設置容器生命周期
更新時間 2024-01-05 16:04:21
最近更新時間: 2024-01-05 16:04:21
分享文章
本文主要介紹設置容器生命周期。
操作場景
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 在“啟動命令”頁簽,輸入運行命令和運行參數。
表 容器啟動命令
| 命令方式 | 操作步驟 |
|---|---|
| 運行命令 | 輸入可執行的命令,例如“/run/server”。若運行命令有多個,多個命令之間用空格進行分隔。 若命令本身帶空格,則需要加引號("")。 說明多命令時,運行命令建議用/bin/sh或其他的shell,其他全部命令作為參數來傳入。 |
| 運行參數 | 輸入控制容器運行命令參數,例如--port=8080。若參數有多個,多個參數以換行分隔。 |
啟動后處理
步驟 1 登錄CCE控制臺,在創建工作負載時,配置容器信息,選擇“生命周期”。
步驟 2 在“啟動后處理”頁簽,設置啟動后處理的參數。
表 啟動后處理-參數說明
| 參數 | 說明 |
|---|---|
| 命令行方式 | 在容器中執行指定的命令,配置為需要執行的命令。 命令的格式為Command Args[1] Args[2]…(Command為系統命令或者用戶自定義可執行程序,如果未指定路徑則在默認路徑下尋找可執行程序),如果需要執行多條命令,建議采用將命令寫入腳本執行的方式。 不支持后臺執行和異步執行的命令。如需要執行的命令如下: exec: command: - /install.sh - install_agent 請在執行腳本中填寫: /install install_agent。這條命令表示容器創建成功后將執行install.sh。 |
| HTTP請求方式 | 發起一個HTTP調用請求。 配置參數如下: 路徑:請求的URL路徑,可選項。 端口:請求的端口,必選項。 主機地址:請求的IP地址,可選項,默認是容器所在的節點IP。 |
停止前處理
步驟 1 登錄CCE控制臺,在創建工作負載時,配置容器信息,選擇“生命周期”。
步驟 2 在“停止前處理”頁簽,設置停止前處理的命令。
表 停止前處理
| 參數 | 說明 |
|---|---|
| 命令行方式 | 在容器中執行指定的命令,配置為需要執行的命令。 命令的格式為Command Args[1] Args[2]…(Command為系統命令或者用戶自定義可執行程序,如果未指定路徑則在默認路徑下尋找可執行程序),如果需要執行多條命令,建議采用將命令寫入腳本執行的方式。 如需要執行的命令如下: exec: command: - /uninstall.sh - uninstall_agent請在執行腳本中填寫: /uninstall uninstall_agent。這條命令表示容器結束前將執行uninstall.sh。 |
| HTTP請求方式 | 發起一個HTTP調用請求。配置參數如下: 路徑:請求的URL路徑,可選項。 端口:請求的端口,必選項。 主機地址:請求的IP地址,可選項,默認是容器所在的節點IP。 |
YAML樣例
本節以nginx為例,說明kubectl命令設置容器生命周期的方法。
在以下配置文件中,您可以看到postStart命令在容器目錄/bin/bash下寫了個install.sh命令。 preStop執行uninstall.sh命令。
apiVersion: apps/v1
kind: Deployment
metadata:
name: nginx
spec:
replicas: 1
selector:
matchLabels:
app: nginx
template:
metadata:
labels:
app: nginx
spec:
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