k8s【PostStart鉤子】

PostStart

容器生命週期鉤子(Container Lifecycle Hooks)監聽容器生命週期的特定事件,並在事件發生時

spec:
  containers:
  - name: lifecycle-demo-container
    image: nginx
    lifecycle:
      postStart:
        exec:
          command: ["/bin/sh", "-c", "echo Hello from the postStart handler > /usr/share/message"]
      preStop:
        exec:
          command: ["/usr/sbin/nginx","-s","quit"]

執行已註冊的回調函數。支持兩種鉤子:

  • postStart: 容器啓動後執行,注意由於是異步執行,它無法保證一定在ENTRYPOINT之後運行。如果失敗,容器會被殺死,並根據RestartPolicy決定是否重啓
  • preStop:容器停止前執行,常用於資源清理。如果失敗,容器同樣也會被殺死

而鉤子的回調函數支持兩種方式:

  • exec:在容器內執行命令
  • httpGet:向指定URL發起GET請求

關於postStart異步執行測試

apiVersion: v1
kind: Pod
metadata:
  name: test-post-start
spec:
  containers:
  - name: test-post-start-container
    image: busybox
    command: ["/bin/sh", "-c", "sleep 5 && echo $(date) 'written by entrypoint' >> log.log && sleep 600"]
    lifecycle:
      postStart:
        exec:
          command: ["/bin/sh", "-c", "sleep 10 && echo $(date) 'written by post start' >> log.log"]

創建上面的pod,通過進入pod,查看log.log打印日誌,證明:

  • PostStart是否會擋住主進程的啓動
  • PostStart是否是異步執行

如果 PostStart 會阻擋 ENTRYPOINT 的啓動,則日誌文件內容應該是:

(時間點 T)written by post start
(時間點 T + 約 10 秒)written by entrypoint

否則內容應該是:

(時間點 T)written by entrypoint
(時間點 T + 約 5 秒)written by post start
```log

實驗結果:
```log
/ # cat log.log
Thu Jun 4 06:14:50 UTC 2020 written by entrypoint
Thu Jun 4 06:14:55 UTC 2020 written by post start

修改YML

apiVersion: v1
kind: Pod
metadata:
  name: test-post-start
spec:
  containers:
  - name: test-post-start-container
    image: busybox
    command: ["/bin/sh", "-c", "sleep 15 && echo $(date) 'written by entrypoint' >> log.log && sleep 600"]
    lifecycle:
      postStart:
        exec:
          command: ["/bin/sh", "-c", "sleep 10 && echo $(date) 'written by post start' >> log.log"]

如果 PostStart 不是異步執行,則日誌文件內容應該是:

(時間點 T)written by entrypoint
(時間點 T + 約 5 秒)written by post start
```log

否則內容應該是:
```log
(時間點 T)written by post start
(時間點 T + 約 5 秒)written by entrypoint

實驗結果:

[root@master k8s]# kubectl exec -it test-post-start sh
/ # cat log.log
Thu Jun 4 06:17:54 UTC 2020 written by post start
Thu Jun 4 06:17:59 UTC 2020 written by entrypoint
/ # 

實驗結論

  • PostStart不會擋住主進程的啓動
  • PostStart是異步執行
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章