Pod中的钩子分为启动后钩子post start hook和结束前钩子pre stop hook

  • post start hook:主要是为了容器启动后做一些初始化工作。只有post start hook启动成功了main container才能正常工作。
  • pre stop hook:一般在主进程结束之前做一些清理操作。清理操作可能会有一些要求,只有清理完成了pod才会终止,所以一定要确保pre stop hook的任务正常结束了,容器才能正常结束。

pod钩子示例

1.编写资源清单

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
root@k8s-master01:~/yaml/chapter04# kubectl apply -f lifecycle-demo.yaml
apiVersion: v1
kind: Pod
metadata:
name: lifecycle-demo
namespace: default
spec:
containers:
- name: demo
image: ikubernetes/demoapp:v1.0
imagePullPolicy: IfNotPresent
securityContext:
capabilities:
add:
- NET_ADMIN
livenessProbe:
httpGet:
path: '/livez'
port: 80
scheme: HTTP
initialDelaySeconds: 5
lifecycle:
postStart:
exec:
command: ['/bin/sh','-c','iptables -t nat -A PREROUTING -p tcp --dport 8080 -j REDIRECT --to-ports 80']
preStop:
exec:
command: ['/bin/sh','-c','while killall python3; do sleep 1; done']
restartPolicy: Always

2.应用清单文件

1
2
3
4
5
6
7
root@k8s-master01:~/yaml/chapter04# kubectl apply -f lifecycle-demo.yaml
pod/lifecycle-demo created

# 已经运行说名内部命令已经启动成功
root@k8s-master01:~/yaml/chapter04# kubectl get pods lifecycle-demo -o wide
NAME READY STATUS RESTARTS AGE IP NODE NOMINATED NODE READINESS GATES
lifecycle-demo 1/1 Running 0 67s 10.244.2.22 k8s-node02 <none> <none>

3.测试

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
# 进入容器验证iptables规则
root@k8s-master01:~/yaml/chapter04# kubectl exec lifecycle-demo -- iptables -t nat -nvL
Chain PREROUTING (policy ACCEPT 53 packets, 3180 bytes)
pkts bytes target prot opt in out source destination
0 0 REDIRECT tcp -- * * 0.0.0.0/0 0.0.0.0/0 tcp dpt:8080 redir ports 80

Chain INPUT (policy ACCEPT 53 packets, 3180 bytes)
pkts bytes target prot opt in out source destination

Chain OUTPUT (policy ACCEPT 0 packets, 0 bytes)
pkts bytes target prot opt in out source destination

Chain POSTROUTING (policy ACCEPT 0 packets, 0 bytes)
pkts bytes target prot opt in out source destination

# 访问8080端口测试
root@k8s-master01:~/yaml/chapter04# curl 10.244.2.22:8080
iKubernetes demoapp v1.0 !! ClientIP: 10.244.0.0, ServerName: lifecycle-demo, ServerIP: 10.244.2.22!