普通任務是一次性運行的短任務,部署完成后即可執行。正常退出(exit 0)后,任務即執行完成。
普通任務是用來控制批處理型任務的資源對象。批處理業務與長期伺服業務(Deployment、Statefulset)的主要區別是:
批處理業務的運行有頭有尾,而長期伺服業務在用戶不停止的情況下永遠運行。Job管理的Pod根據用戶的設置把任務成功完成就自動退出了。成功完成的標志根據不同的spec.completions策略而不同,即:
- 單Pod型任務有一個Pod成功就標志完成。
- 定數成功型任務保證有N個任務全部成功。
- 工作隊列型任務根據應用確認的全局成功而標志成功。
已創建資源,具體操作請參見購買節點。若已有集群和節點資源,無需重復操作。
步驟 1 (可選)普通任務需要基于鏡像創建,若選擇私有鏡像,用戶首先需要將鏡像上傳至鏡像倉庫。
步驟 2 登錄CCE控制臺,在左側導航欄中選擇“工作負載 > 普通任務 Job”,單擊“創建普通任務”。
步驟 3 參照下表配置任務基本信息,其中帶“*”標志的參數為必填參數。
參數 | 參數說明 |
* 任務名稱 | 新建任務的名稱,命名必須唯一。 請輸入4到63個字符的字符串,可以包含小寫英文字母、數字和中劃線(-),并以小寫英文字母開頭,小寫英文字母或數字結尾。 |
* 容器集群 | 新建任務所在的集群。 |
* 命名空間 | 新建任務所屬的命名空間,默認為default。 |
* 實例數量 | 任務的實例數量。任務可以有一個或多個實例,用戶可以設置具體實例個數,默認為1。 每個任務實例都由相同的容器部署而成。設置多個實例主要用于實現高可靠性,當某個實例故障時,任務還能正常運行。 |
任務描述 | 任務描述信息。 |
步驟 4 單擊“下一步:添加容器”,添加容器和鏡像。
1. 單擊“選擇鏡像”,選擇需要部署的鏡像。
? 我的鏡像:展示了您創建的所有鏡像倉庫。
? 第三方鏡像:CCE支持拉取第三方鏡像倉庫(即鏡像倉庫之外的鏡像倉庫)的鏡像創建任務。使用第三方鏡像時,請確保任務運行的節點可訪問公網。第三方鏡像的具體使用方法請參見如何使用第三方鏡像。
- 若您的鏡像倉庫不需要認證,密鑰認證請選擇“否”,并輸入“鏡像地址”,單擊“確定”。
- 若您的鏡像倉庫都必須經過認證(帳號密碼)才能訪問,您需要先創建密鑰再使用第三方鏡像,具體操作請參見如何使用第三方鏡像。
? 共享鏡像:其它租戶通過“容器鏡像服務”共享給您的鏡像將在此處展示,您可以基于共享鏡像創建工作負載。
2. 配置鏡像參數。
參數 | 說明 |
鏡像 | 導入的鏡像,您可單擊“更換鏡像”進行更換。 |
* 鏡像版本 | 選擇需要部署的鏡像版本。 |
* 容器名稱 | 容器的名稱,可修改。 |
容器規格 | CPU配額:
內存配額:
申請和限制的具體請參見6.10.2 設置容器規格。 GPU配額:當集群中包含GPU節點時,才能設置GPU,無GPU節點不顯示此選項。 容器需要使用的GPU百分比。勾選“使用”并設置百分比,例如設置為10%,表示該容器需使用GPU資源的10%。若不勾選“使用”,或設置為0,則無法使用GPU資源。 GPU顯卡:工作負載實例將被調度到GPU顯卡類型為指定顯卡的節點上。 若勾選“不限制”,容器將會隨機使用節點中的任一顯卡。您也可以勾選某個顯卡,容器將使用特定顯卡。 |
3. (可選)高級設置。
參數 | 參數說明 |
生命周期 | 生命周期腳本定義,主要針對容器類任務的生命周期事件采取的動作。
|
環境變量 | 在容器中添加環境變量,一般用于通過環境變量設置參數。在環境變量頁簽,單擊“添加環境變量”。當前支持三種類型。
|
數據存儲 | 支持掛載本地磁盤或者云存儲到容器中,以實現數據文件的持久化存儲。 詳細步驟請參見存儲管理。 |
容器日志 | CCE支持配置工作負載日志策略,便于日志收集分析,以及按周期防爆處理。詳細步驟請參見采集容器標準輸出日志。 |
4. (可選)一個任務實例包含1個或多個相關容器。若您的任務包含多個容器,請單擊“添加容器”,再執行添加容器的操作。
步驟 5 配置完成后,單擊“創建”。
待狀態為“執行中”,普通任務創建成功。
Job的配置參數如下所示。
- spec.template格式與Pod相同。
- RestartPolicy僅支持Never或OnFailure。
- 單個Pod時,默認Pod成功運行后Job即結束。
- .spec.completions表示Job結束需要成功運行的Pod個數,默認為1。
- .spec.parallelism表示并行運行的Pod的個數,默認為1。
- spec.backoffLimit表示失敗Pod的重試最大次數,超過這個次數不會繼續重試。
- .spec.activeDeadlineSeconds表示Pod運行時間,一旦達到這個時間,Job即其所有的Pod都會停止。且activeDeadlineSeconds優先級高于backoffLimit,即到達activeDeadlineSeconds的Job會忽略backoffLimit的設置。
根據.spec.completions和.spec.Parallelism的設置,可以將Job劃分為以下幾種類型。
任務類型
Job類型 | 說明 | 使用示例 |
一次性Job | 創建一個Pod直至其成功結束 | 數據庫遷移 |
固定結束次數的Job | 依次創建一個Pod運行直至completions個成功結束 | 處理工作隊列的Pod |
固定結束次數的并行Job | 依次創建多個Pod運行直至completions個成功結束 | 多個Pod同時處理工作隊列 |
并行Job | 創建一個或多個Pod直至有一個成功結束 | 多個Pod同時處理工作隊列 |
以下是一個Job配置示例,保存在myjob.yaml中,其計算π到2000位并打印輸出。
apiVersion: batch/v1
kind: Job
metadata:
name: pi-with-timeout
spec:
completions: 50 # Job結束需要運行50個Pod,這個示例中就是打印π 50次
parallelism: 5 # 并行5個Pod
backoffLimit: 5 # 最多重試5次
template:
spec:
containers:
- name: pi
image: perl
command: ["perl", "-Mbignum=bpi", "-wle", "print bpi(2000)"]
restartPolicy: Never
說明:
- apiVersion: batch/v1 是當前job的Version
- kind: Job指定當前資源的類型時Job
- restartPolicy: Never:是指當前的重啟策略。對于Job,只能設置為Never或者OnFailure。對于其他controller(比如Deployment)可以設置為Always。
運行該任務,如下:
步驟 1 啟動這個job。
[root@k8s-master k8s]# kubectl apply -f myjob.yaml
job.batch/myjob created
步驟 2 查看這個job。
kubectl get job
[root@k8s-master k8s]# kubectl get job
NAME COMPLETIONS DURATION AGE
myjob 1/1 23s 3m45s
completions為 1/1 表示成功運行了這個job。
步驟 3 查看pod的狀態。
kubectl get pod
[root@k8s-master k8s]# kubectl get pod
NAME READY STATUS RESTARTS AGE
myjob-29qlw 0/1 Completed 0 4m5s
狀態為Completed表示這個job已經運行完成。
步驟 4 查看這個pod的日志。
kubectl logs
[root@k8s-master k8s]# kubectl logs myjob-29qlw
hello k8s job!
普通任務創建完成后,您還可執行下表中的操作。
操作 | 操作說明 |
查看YAML | 單擊任務名稱后的“查看YAML”,可查看到當前任務對應的YAML文件。 |
刪除普通任務 | 1. 選擇待刪除的任務,單擊操作列的“刪除”。 2. 單擊“確定”。 任務刪除后將無法恢復,請謹慎操作。 |