3个关键点,帮助你更好的调试pod的prestop,prestart脚本的执行过程
在对pod的钩子脚本进行调试,尤其是,对exec类型的命令进行调试的时候,重要的就是观察这些脚本是否正确的执行了,我们知道,执行钩子命令时,如果没有特殊的处理,很容器pod就退出了,无法看到命令具体的执行过程,这个时候,我们使用如下的方法来解决:
1、创建一个数据卷
volumes: - name: hooks hostPath: path: /data/hooks/
2、挂载这个数据卷到容器里
volumeMounts: - name: hooks mountPath: /data/
3、然后,将执行的钩子的命令的执行结果,定向到这个卷中
lifecycle: preStop: exec: command: - /bin/sh - -c - if [[ -f /bin/echo ]]; then /bin/echo "123" > /data/tmp01 ;fi; if [[ -f /bin/echo ]]; then /bin/echo "456" > /data/tmp02 ;fi;
到这里就大功告成了吗?当然没有
接下来,要做的就是
首先,查出来pod所在的主机(因为volume是hostpath)IP
[root@install ~]# kubectl get pod -n c87e2267-1001-4c70-bb2a-ab41f3b81aa3 -o wide | grep zhaimm dev-zhaimmprestop-787f949f9d-7z5ls 1/1 Running 0 3m35s 172.23.117.230 10.10.18.39 <none> <none>
然后,kubectl delete pod,就可以触发,prestop中的命令的执行
[root@install ~]# kubectl delete pod -n c87e2267-1001-4c70-bb2a-ab41f3b81aa3 dev-zhaimmprestop-787f949f9d-7z5ls pod "dev-zhaimmprestop-787f949f9d-7z5ls" deleted
最后,我们去pod所在的宿主机上,看看命令执行的日志文件有没有执行,就可以不断的调试我们的prestop脚本了。
[root@bip39 data]# cd hooks/ [root@bip39 hooks]# ls [root@bip39 hooks]# ls tmp01 tmp02 [root@bip39 hooks]# cat tmp01 123 [root@bip39 hooks]# ls tmp01 tmp02 [root@bip39 hooks]# cat tmp02 456 [root@bip39 hooks]#
看起来没那么复杂对吧,但是,确实在调试prestop,prestart脚本时,起到了至关重要的作用。