回调钩子是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