kubernetes--優雅刪除資源物件
阿新 • • 發佈:2019-02-05
本文基於kubernetes 1.5.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=的選項,以執行使用者來修改預設值。0表示刪除立即執行,並且立即從API中刪除pod這樣一個新的pod會在同時被建立。在節點上,被設定了立即結束的的pod,仍然會給一個很短的優雅退出時間段,才會開始被強制殺死。
pod生命週期例子
apiVersion: extensions/v1beta1 kind: Deployment metadata: name: lykops-grace labels: app:lykops spec: replicas: 1 template: metadata: labels: app: lykops-grace spec: containers: - name: lykops-grace 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