zl程序教程

您现在的位置是:首页 >  其它

当前栏目

pod--钩子函数

函数 -- Pod 钩子
2023-09-11 14:21:18 时间

前言

环境:centos7.9 docker-ce-20.10.9 kubernetes-version v1.22.6

pod资源钩子函数详解

钩子函数能够感知自身生命周期中的时间,并在相应的时刻到来时运行指定的程序代码。

kubernetes在主容器的启动之后和停止之前提供了两个钩子函数:

postStart:容器启动之后执行,如果失败了会重启容器;
preStop:容器终止之前执行,执行完成后容器将会成功终止,该钩子函数会在命令执行完成之前会阻塞删除容器的操作;
postStart:这个钩子在容器创建后立即执行。但是,并不能保证钩子将在容器ENTRYPOINT之前运行,
因为没有参数传递给处理程序。主要用于资源部署、环境准备等。不过需要注意的是如果钩子花费太长
时间以至于不能运行或者挂起,容器将不能达到running状态。

preStop:这个钩子在容器终止之前立即被调用。它是阻塞的,意味着它是同步的, 所以它必须在
删除容器的调用发出之前完成。主要用于优雅关闭应用程序、通知其他系统等。如果钩子在执行期间
挂起,Pod阶段将停留在running状态并且永不会达到failed状态。

钩子函数的三种定义动作

钩子函数支持exec、httpGet、tcpSocket三种方式定义动作,如下所示:

exec命令:在容器内执行一次性命令。如下演示:

.......
lifecycle:
      postStart:
        exec:
          command:
           - cat
           - /tmp/healthy
........

httpGet:向容器IP地址、端口、路径发起http 请求。如下演示:

lifecycle:
      postStart:
        httpGet:
          host: xxx				#想要连接的主机ip,默认是当前pod的ip,一般省略不写
          httpHeaders:	xx 		#可以自定义请求头
          path: xxxx			#路径
          port: 8080			#连接端口
          scheme: http			#协议

tcpSocket:向容器的IP地址,端口建立tcp socket连接。如下演示:

lifecycle:
      postStart:
        tcpSocket:
          host: xxx				#想要访问的主机ip,默认是当前pod的ip,一般省略不写
          port: 8080			#访问的端口

钩子函数演示范例

下面使用exec命令来演示钩子函数

[root@master ~]# vim pod-postStart-preStop.yaml 
apiVersion: v1
kind: Pod
metadata:
  name: pod-poststart-prestop
  labels:
    env: dev
  namespace: default
spec:
  containers:
  - name: nginx
    image: nginx:1.7.9
    lifecycle:					#定义钩子函数
      postStart:
        exec:					#覆盖掉nginx的index.html的内容
          command: ["/bin/sh","-c","echo 'postStart...' > /usr/share/nginx/html/index.html"]
      preStop:
        exec:
          command: ["/usr/sbin/nginx","-s","quit"]

[root@master ~]# kubectl  get pod pod-poststart-prestop -o wide
NAME                    READY   STATUS    RESTARTS   AGE   IP             NODE    NOMINATED NODE   READINESS GATES
pod-poststart-prestop   1/1     Running   0          20s   10.244.1.137   node1   <none>           <none>
[root@master ~]# curl 10.244.1.137:80		#访问nginx,内容已经是我们自定义的内容了,说明postStart钩子函数功能是正常的
postStart...