1. 程式人生 > >kubernetes--優雅刪除資源物件

kubernetes--優雅刪除資源物件

本文基於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