1. 程式人生 > 其它 >k8s生命週期-鉤子函式

k8s生命週期-鉤子函式

容器生命週期鉤子(Container Lifecycle Hooks)監聽容器生命週期的特定事件,並在事件發生時執行已註冊的回撥函式。

支援兩種鉤子:

postStart: 容器建立後立即執行,注意由於是非同步執行,它無法保證一定在 ENTRYPOINT 之前執行。如果失敗,容器會被殺死,並根據 RestartPolicy 決定是 否重啟
preStop:容器終止前執行,常用於資源清理。執行完成之後容器將成功終止,如果失敗,容器同樣也會被殺死。在其完成之前 會阻塞刪除容器的操作

鉤子的回撥函式支援三種方式定義動作:
exec:在容器內執行命令,如果命令的退出狀態碼是 0 表示執行成功,否則表示失敗

  lifecycle:
    postStart:
      exec:
        command:
        
- cat - /tmp/healthy

httpGet:向指定 URL 發起 GET 請求,如果返回的 HTTP 狀態碼在 [200, 400) 之間表示請求成功,否則表示失敗

  lifecycle:
    postStart:
      httpGet:
        path: /login   # URI地址
        port: 80  # 埠號
        host: 192.168.126.100 # 主機地址
        scheme: HTTP   # 支援的協議,http或https

# http://192.168.126.100:80/login

TCPSocket

:在容器嘗試訪問指定的socket

  lifecycle:
    postStart:
      tcpSocket:
        port: 8080

演示:

[root@k8s-master ~]# vim pod-hook-exec.yaml
apiVersion: v1
kind: Pod
metadata:
  name: pod-hook-exec
  namespace: test
spec:
  containers:
  - name: main-container
    image: nginx:1.17.1
    ports:
    - name: nginx-port
      containerPort: 
80 lifecycle: postStart: exec: # 在容器啟動的時候執行一個命令,修改nginx預設首頁內容 command: ["/bin/sh","-c","echo postStart... > /usr/share/nginx/html/index.html"] preStop: exec: # 在容器停止之前停止nginx服務 command: ["/usr/sbin/nginx","-s","quit"] [root@k8s-master ~]# kubectl create -f pod-hook-exec.yaml pod/pod-hook-exec created [root@k8s-master ~]# kubectl get pod -n test -o wide NAME READY STATUS RESTARTS AGE IP NODE NOMINATED NODE READINESS GATES pod-hook-exec 1/1 Running 0 19s 10.244.2.31 k8s-node02 <none> <none> [root@k8s-master ~]# curl 10.244.2.31 postStart...