回调钩子是pod生命周期中触发的动作,分别是创建容器之后,和删除容器之前。
在这里插入图片描述

lifecycle  #做回调钩子的(pod生命周期中的回调钩子)

preStop		:结束回调钩子,在容器终止之前执行。
postStart	:开始回调钩子,在容器开始之后执行。(用于初始化工作通知等工作的)

开始回调钩子(postStart)里面有如下三种方式:
exec		: 执行命令,执行的结果如果返回值不为0即为失败(注:exec下面执行的命令,必须为当前容器内支持的命令)
tcpsocket	:探测端口,探测的端口如果探测失败即为失败
httpget		: 访问链接 ,如果访问链接状态码不为200即为失败

验证开始回调钩子

vim lifecycle.yaml

apiVersion: apps/v1
kind: Deployment
metadata:
  name: lifecycle
spec:
  selector:
    matchLabels:
      app: lifecycle
  template:
    metadata:
      labels:
        app: lifecycle
    spec:
      containers:
        - name: lifecycle
          image: nginx
          lifecycle:
            postStart:   # 启动回调钩子
              exec:
                command:
                  - "/bin/sh"
                  - "-c"
                  - "touch /opt/lifecycle.txt"


#应用资源
[root@k8s-master k8spod]# kubectl apply -f lifecycle.yaml 
# 查看pod
[root@k8s-master k8spod]# kubectl get pods
NAME                        READY   STATUS    RESTARTS   AGE
bash                        1/1     Running   0          14h
lifecycle-6f5f6596d-8fh6t   1/1     Running   0          21s
mysql-56f8cdb464-lrs2l      1/1     Running   0          14h
# 进入pod
[root@k8s-master k8spod]# kubectl exec -it lifecycle-6f5f6596d-8fh6t -- sh
# ls /opt
lifecycle.txt # 文件存在,就验证了开始回调钩子

验证结束回调钩子

apiVersion: apps/v1
kind: Deployment
metadata:
  name: lifecycle
spec:
  selector:
    matchLabels:
      app: lifecycle
  template:
    metadata:
      labels:
        app: lifecycle
    spec:
      containers:
        - name: lifecycle
          image: nginx
          lifecycle:
            postStart:         # 开始回调钩子
              exec:
                command:
                  - "/bin/sh"   #大多数容器内都支持sh,bash有的不支持
                  - "-c"        #指定将要执行的命令
                  - "touch /opt/123.txt"  #执行的命令
            preStop:             # 结束回调钩子
              exec:
                command:
                  - "/bin/sh"
                  - "-c"
                  - "rm -rf /opt/123.txt"  #删除容器当中的文件,要是下面挂载的宿主主机目录,则把宿主主机目录下的文件也删掉了
          volumeMounts:       # 选择挂载
            - mountPath: /opt/
              name: hostpath   #指定下面要挂载的本地存储卷
      volumes:            # 定义挂载
        - name: hostpath   # 下面要指定挂载本机的目录
          hostPath:    # 指定将要挂载的目录
            path: /opt   # 要挂载的本地目录


# 应用资源
kubectl apply -f lifecycle.yaml

# 查看资源在哪个节点
[root@k8s-master k8spod]# kubectl get pod -o wide
NAME                         READY   STATUS    RESTARTS   AGE   IP             NODE        NOMINATED NODE   READINESS GATES
bash                         1/1     Running   0          14h   10.244.1.104   k8s-node2   <none>           <none>
lifecycle-76c8858c4d-r7q69   1/1     Running   0          25s   10.244.3.67    k8s-node1   <none>           <none>
mysql-56f8cdb464-lrs2l       1/1     Running   0          15h   10.244.1.101   k8s-node2   <none>           <none>



# 未删除pod时候123.txt存在,删除pod后文件不存在,说明启动了结束回调钩子
[root@k8s-node1 ~]# cd /opt/
[root@k8s-node1 opt]# ls 
123.txt  cni  containerd

[root@k8s-node1 opt]# ls
cni  containerd

Logo

K8S/Kubernetes社区为您提供最前沿的新闻资讯和知识内容

更多推荐