一、什么是钩子函数

钩子函数能够感知自身生命周期中的事件,并在相应的时刻到来时运行用户指定的程序代码。
kubernetes在主容器的启动之后和停止之前提供了两个钩子函数:
-
post start:容器创建之后执行,如果失败了会重启容器(启动后)
-
pre stop :容器终止之前执行,执行完成之后容器将成功终止,在其完成之前会阻塞删除容器的操作(终止前)
二、支持的三种方式定义动作
Exec命令:在容器内执行一次命令
……
lifecycle:
postStart:
exec:
command:
- cat
- /tmp/healthy
TCPSocket:在当前容器尝试访问指定的socket
……
lifecycle:
postStart:
tcpSocket:
port: 8080
……
HTTPGet:在当前容器中向某url发起http请求
……
lifecycle:
postStart:
httpGet:
path: / #URI地址
port: 80 #端口号
host: 192.168.19.1 #主机地址
scheme: HTTP #支持的协议,http或者https
……
三、钩子函数的使用
接下来,以exec方式为例,演示下钩子函数的使用,创建pod-exec.yaml文件
apiVersion: v1
kind: Pod
metadata:
name: pod-hook-exec
namespace: test
spec:
containers:
- name: main-container
image: nginx:1.18
ports:
- name: nginx-port
containerPort: 80
lifecycle:
postStart:
exec: #容器启动时执行修改nginx默认网页类容
command: ["/bin/sh", "-c", "echo helloworld > /usr/share/nginx/html/index.html"]
preStop:
exec: #容器停止之前关闭nginx服务
command: ["/usr/sbin/nginx","-s","quit"]
创建pod
[root@master ~]# kubectl create -f pod-exec.yaml
pod/pod-hook-exec created
[root@master ~]# kubectl get pod -n test -o wide
NAME READY STATUS RESTARTS AGE
pod-hook-exec 1/1 Running 0 28s
访问pod
[root@master ~]# curl http://10.244.1.14
helloworld
# 进入该pod
kubectl exec pod-hook-exec -n test -it -c main-container /bin/sh
# 进入目录,/usr/share/nginx/html
cd /usr/share/nginx/html
#查看index.html
cat index.html