Kubernetes中鉤子函數詳解、實例
作者:全棧行動派
kubernetes在主容器的啟動之后和停止之前提供了兩個鉤子函數,post start:容器創(chuàng)建之后執(zhí)行,如果失敗了會重啟容器,pre stop :容器終止之前執(zhí)行,執(zhí)行完成之后容器將成功終止,在其完成之前會阻塞刪除容器的操作。
1、概述
鉤子函數能夠感知自身生命周期中的事件,并在相應的時刻到來時運行用戶指定的程序代碼。
kubernetes在主容器的啟動之后和停止之前提供了兩個鉤子函數:
- post start:容器創(chuàng)建之后執(zhí)行,如果失敗了會重啟容器。
- pre stop :容器終止之前執(zhí)行,執(zhí)行完成之后容器將成功終止,在其完成之前會阻塞刪除容器的操作。
鉤子處理器支持使用下面三種方式定義動作:
- Exec命令:在容器內執(zhí)行一次命令。
……
lifecycle:
postStart:
exec:
command:
- cat
- /tmp/healthy
……
- TCPSocket:在當前容器嘗試訪問指定的socket。
……
lifecycle:
postStart:
tcpSocket:
port: 8080
……
- HTTPGet:在當前容器中向某url發(fā)起http請求
……
lifecycle:
postStart:
httpGet:
path: / #URI地址
port: 80 #端口號
host: 192.168.5.3 #主機地址
scheme: HTTP #支持的協(xié)議,http或者https
……
2、以exec方式為例,演示鉤子函數的使用
創(chuàng)建pod-hook-exec.yaml文件,內容如下:
apiVersion: v1
kind: Pod
metadata:
name: pod-hook-exec
namespace: dev
spec:
containers:
- name: main-container
image: nginx
ports:
- name: nginx-port
containerPort: 80
lifecycle:
postStart:
exec: # 在容器啟動的時候執(zhí)行一個命令,修改掉nginx的默認首頁內容
command: ["/bin/sh", "-c", "echo postStart... > /usr/share/nginx/html/index.html"]
preStop:
exec: # 在容器停止之前停止nginx服務
command: ["/usr/sbin/nginx","-s","quit"]
# 創(chuàng)建pod
[root@k8s-master01 ~]# kubectl create -f pod-hook-exec.yaml
pod/pod-hook-exec created
# 查看pod
[root@k8s-master01 ~]# kubectl get pods pod-hook-exec -n dev -o wide
NAME READY STATUS RESTARTS AGE IP NODE
pod-hook-exec 1/1 Running 0 29s 172.17.169.187 k8s-node2
# 訪問pod
[root@k8s-master01 ~]# curl 172.17.169.187
postStart...
效果:
3、總結
- PostStart hook是在容器創(chuàng)建(created)之后立馬被調用,并且PostStart跟容器的ENTRYPOINT是異步執(zhí)行的,無法保證它們之間的順序。
- PreStop hook是容器處于Terminated狀態(tài)時立馬被調用(也就是說要是Job任務的話,執(zhí)行完之后其狀態(tài)為completed,所以不會觸發(fā)PreStop的鉤子),同時PreStop是同步阻塞的,PreStop執(zhí)行完才會執(zhí)行刪除Pod的操作。
- PostStart會阻塞容器成為Running狀。
- PreStop會阻塞容器的刪除,但是過了terminationGracePeriodSeconds時間后,容器會被強制刪除。
- 如果PreStop或者PostStart失敗的話, 容器會被殺死。
責任編輯:姜華
來源:
今日頭條