我是靠谱客的博主 优雅鞋子,这篇文章主要介绍Pod中的钩子函数,现在分享给大家,希望可以做个参考。

前言

钩子函数对于程序员来说并不陌生,比如我们java中常用的过滤器、拦截器都可以称作为一个钩子函数。指在自身生命周期过程中需要做的事情。

K8s对于Pod中的主容器提供了两个钩子函数

Post start容器创建后执行

Pre stop容器终止前执行

与Pod的健康检查一样。可以使用 exec、tcpSocket、httpGet

下面我们来使用一下钩子函数。

使用

在生产环境中,应用启动后通常需要将服务注册才能使用。应用终止前,由于可能有大量的用户正在办理业务。需要等他们办理完才能停止。这段期间需要阻止有新的业务进来。通常我们把它叫做优雅停机。

在这里就不写java程序来演示,直接使用nginx镜像模拟,容器启动后生成一个running.html内容为Runnning,容器终止前修改running.html内容为Stopping,并且等待10秒后才能真正终止。

apiVersion: v1
kind: Pod
metadata:
  name: nginx
  labels:
    app: nginx
spec:
  containers:
  - name: nginx
    image: nginx
    imagePullPolicy: IfNotPresent
    lifecycle:
     postStart:
       exec:
         command:
         - "/bin/sh"
         - "-c"
         - "echo Running > /usr/share/nginx/html/running.html"
     preStop:
       exec:
         command:
         - "/bin/sh"
         - "-c"
         - "echo 'Stopping' > /usr/share/nginx/html/running.html; sleep 10"
   

启动Pod,观察服务状态,停止Pod观察服务状态与停止过程

# 启动
[root@master cycle]# kubectl create -f kube-nginx.yml                      
pod/nginx created

# 查看当前服务状态
[root@master ~]# kubectl exec -it nginx -- curl 127.0.0.1/running.html
Running

# 停止,注意这里停止我们设置了休眠10s,所以新打开一个终端查看状态
[root@master cycle]# kubectl delete -f kube-nginx.yml

# 新打开一个终端查看状态
[root@master ~]# kubectl exec -it nginx -- curl 127.0.0.1/running.html
Stopping

#观察停止过程,这里我删掉启动过程,只暂时 Stopping
[root@master ~]# kubectl describe  pod nginx|grep -A 100 Event
  Normal  Killing    7s    kubelet            Stopping container nginx
[root@master ~]# kubectl describe  pod nginx|grep -A 100 Events
  Normal  Killing    10s   kubelet            Stopping container nginx
[root@master ~]# kubectl describe  pod nginx|grep -A 100 Events
Error from server (NotFound): pods "nginx" not found

从上面结果可以看出,容器运行后postStart也运行了,在delete Pod时。等待了十秒钟才删除,并且这十秒期间服务状态为Stopping,不在对外提供流量。

Pod的钩子函数就介绍到这里了,下期对Pod的生命周期做一个总结。


欢迎关注,学习不迷路!

最后

以上就是优雅鞋子最近收集整理的关于Pod中的钩子函数的全部内容,更多相关Pod中内容请搜索靠谱客的其他文章。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(47)

评论列表共有 0 条评论

立即
投稿
返回
顶部