kubernetes--pod的生命週期管理(PostStart,PreStop)
阿新 • • 發佈:2018-12-09
lifecycle
建立資源物件時,可以使用lifecycle來管理容器在執行前和關閉前的一些動作。
lifecycle有兩種回撥函式:
- PostStart:容器建立成功後,執行前的任務,用於資源部署、環境準備等。
- PreStop:在容器被終止前的任務,用於優雅關閉應用程式、通知其他系統等等。
例1、部署程式碼
以下示例中,定義了一個Pod,包含一個JAVA的web應用容器,其中設定了PostStart和PreStop回撥函式。即在容器建立成功後,複製/sample.war到/app資料夾中。而在容器終止之前,傳送HTTP請求到http://monitor.com:8080/waring,即向監控系統傳送警告。
具體示例如下:
...... containers: - image: sample:v2 name: war lifecycle: postStart: exec: command: - “cp” - “/sample.war” - “/app” prestop: httpGet: host: monitor.com psth: /waring port: 8080 scheme: HTTP ......
例2、優雅刪除資源物件
當用戶請求刪除含有pod的資源物件時(如RC、deployment等),K8S為了讓應用程式優雅關閉(即讓應用程式完成正在處理的請求後,再關閉軟體),K8S提供兩種資訊通知:
1)、預設:K8S通知node執行docker stop命令,docker會先向容器中PID為1的程序傳送系統訊號SIGTERM,然後等待容器中的應用程式終止執行,如果等待時間達到設定的超時時間,或者預設超時時間(30s),會繼續傳送SIGKILL的系統訊號強行kill掉程序。
2)、使用pod生命週期(利用PreStop回撥函式),它執行在傳送終止訊號之前。
預設情況下,所有的刪除操作的優雅退出時間都在30秒以內。kubectl delete命令支援--grace-period=
具體示例如下:
kind: Deployment
metadata:
name: nginx-demo
labels:
app: nginx-demo
spec:
replicas: 1
template:
metadata:
labels:
app: nginx-demo
spec:
containers:
- name: nginx-demo
image: centos:nginx
lifecycle:
preStop:
exec:
# nginx -s quit gracefully terminate while SIGTERM triggers a quick exit
command: ["/usr/local/nginx/sbin/nginx","-s","quit"]
ports:
- name: http
containerPort: 80