CCE提供了回調函數,在容器的生命周期的特定階段執行調用,比如容器在停止前希望執行某項操作,就可以注冊相應的鉤子函數。
目前提供的生命周期回調函數如下所示:
- 啟動命令:容器將會以該啟動命令啟動,請參見設置容器啟動命令。
- 啟動后處理:容器啟動后觸發,請參見啟動后處理。
- 停止前處理:容器停止前觸發。設置停止前處理,確保升級或實例刪除時可提前將實例中運行的業務排水。詳細請參見停止前處理。
Docker的鏡像擁有存儲鏡像信息的相關元數據,如果不設置生命周期命令和參數,容器運行時將運行鏡像制作時提供的默認的命令和參數,Docker將這兩個字段定義為“Entrypoint”和 "CMD"。
如果在創建工作負載時填寫了容器的運行命令和參數,將會覆蓋鏡像構建時的默認命令 "Entrypoint"、"CMD",規則如下:
表-容器執行命令和參數
鏡像 Entrypoint | 鏡像CMD | 容器運行命令 | 容器運行參數 | 最終執行 |
[touch] | [/root/test] | 未設置 | 未設置 | [touch /root/test] |
[touch] | [/root/test] | [mkdir] | 未設置 | [mkdir] |
[touch] | [/root/test] | 未設置 | [/opt/test] | [touch /opt/test] |
[touch] | [/root/test] | [mkdir] | [/opt/test] | [mkdir /opt/test] |
在默認情況下,鏡像啟動時會運行默認命令,如果想運行特定命令或重寫鏡像默認值,需要進行相應設置。設置方法請參見設置容器啟動命令。
啟動后處理
步驟 1 登錄CCE控制臺,在創建工作負載時,展開“生命周期”。
步驟 2 在“啟動后處理”后,設置啟動后處理的參數,如下表。
啟動后處理-參數說明
參數 | 說明 |
命令行方式 | 在容器中執行指定的命令,配置為需要執行的命令。命令的格式為Command Args[1] Args[2]…(Command為系統命令或者用戶自定義可執行程序,如果未指定路徑則在默認路徑下尋找可執行程序),如果需要執行多條命令,建議采用將命令寫入腳本執行的方式。 如需要執行的命令如下: exec: 請在執行腳本中填寫: /install install_agent。這條命令表示容器創建成功后將執行install.sh。 |
HTTP請求方式 | 發起一個HTTP調用請求。配置參數如下: 路徑:請求的URL路徑,可選項。 端口:請求的端口,必選項。 主機地址:請求的IP地址,可選項,默認是容器所在的節點IP。 |
步驟 1 登錄CCE控制臺,在創建工作負載配置生命周期過程中,選擇“停止前處理”。
步驟 2 在“停止前處理”后,設置停止前處理的參數,如下表。
停止前處理-參數說明
參數 | 說明 |
命令行方式 | 在容器中執行指定的命令,配置為需要執行的命令。命令的格式為Command Args[1] Args[2]…(Command為系統命令或者用戶自定義可執行程序,如果未指定路徑則在默認路徑下尋找可執行程序),如果需要執行多條命令,建議采用將命令寫入腳本執行的方式。 如需要執行的命令如下: exec: 請在執行腳本中填寫: /uninstall uninstall_agent。這條命令表示容器結束前將執行uninstall.sh。 |
HTTP請求方式 | 發起一個HTTP調用請求。配置參數如下: 路徑:請求的URL路徑,可選項。 端口:請求的端口,必選項。 主機地址:請求的IP地址,可選項,默認是容器所在的節點IP。 |
Pod通過restartPolicy字段指定重啟策略,重啟策略類型為:Always、OnFailure和Never,默認為 Always。
restartPolicy僅指通過同一節點上的kubelet重新啟動容器。
重啟策略 | 說明 |
Always | 當容器失效時,由kubelet自動重啟該容器。 |
OnFailure | 當容器終止運行且退出碼不為0時,由kubelet自動重啟該容器。 |
Never | 不論容器運行狀態如何,kubelet都不會重啟該容器。 |
說明:
可以管理Pod的控制器有ReplicaSet Controller,Job,DaemonSet,及kubelet(靜態Pod)。
- RS和DaemonSet:必須設置為Always,需要保證該容器持續運行。
- Job:OnFailure或Never,確保容器執行完后不再重啟。
- kubelet:在Pod失效的時候重啟它,不論RestartPolicy設置為什么值,并且不會對Pod進行健康檢查。
設置容器生命周期-YAML樣例
本節以nginx為例,說明kubectl命令設置容器生命周期的方法。
前提條件
請參見通過kubectl操作CCE集群配置kubectl命令,使彈性云主機連接集群。
操作步驟
步驟 1 登錄已配置好kubectl命令的彈性云主機。
步驟 2 創建一個名為nginx-deployment.yaml的描述文件。其中,nginx-deployment.yaml為自定義名稱,您可以隨意命名。
vi nginx-deployment.yaml
在以下配置文件中,您可以看到postStart命令在容器目錄/bin/bash下寫了個install.sh命令。 preStop執行uninstall.sh命令。
apiVersion: extensions/v1beta1
kind: Deployment
metadata:
name: nginx
spec:
replicas: 1
selector:
matchLabels:
app: nginx
strategy:
type: RollingUpdate
template:
metadata:
labels:
app: nginx
spec:
restartPolicy: Always #重啟策略
containers:
- image: nginx
command:
- sleep 3600 #啟動命令
imagePullPolicy: Always
lifecycle:
postStart:
exec:
command:
- /bin/bash
- install.sh #啟動后命令
preStop:
exec:
command:
- /bin/bash
- uninstall.sh #停止前命令
name: nginx
imagePullSecrets:
- name: default-secret