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脚本时,起到了至关重要的作用。

 

 

posted @ 2022-07-08 10:40  Zhai_David  阅读(793)  评论(0编辑  收藏  举报