全部產品
Search
文件中心

Container Service for Kubernetes:建立任務工作負載Job

更新時間:Jun 14, 2025

Job是用於一次性任務的工作負載,因此也被稱為“任務工作負載”,它保證處理任務的多個Pod運行到成功完成。本文介紹Job的特點,以及如何通過控制台或kubectl建立Job。

Job介紹

Deployment、StatefulSet與DaemonSet的目標都是保證一定數量的Pod持續運行,而Job的目標是讓一定數量的Pod運行到完成狀態。您可通過spec.completionsspec.parallelism指定Pod完成數量與並行數量。

適用情境

completions配置

parallelism配置

Job行為

單次任務,例如資料庫初始化。

1

1

同時只運行一個Pod直到完成。

多個Pod並存執行,但只需其中部分返回結果的情境。例如在同時多個可用性區域執行任務以提高可靠性,但只需其中一個返回結果。

M(M<N)

N

同時運行N個Pod,其中有M個完成後即停止。

計算資源受限,無法同時運行所有Pod的情境。

N

M(M<N)

同時運行M個Pod,直到N個Pod完成。

資源充足情況下的並行任務,例如並行的資料處理。

N

N

同時運行N個Pod,直到N個Pod完成。

重要

本文樣本使用的鏡像為公網鏡像,拉取時叢集或節點需具備公網訪問能力:

  • 為叢集開啟訪問公網的能力(推薦):為叢集所在的VPC建立公網NAT Gateway,叢集中的所有資源均可訪問公網。

  • 為節點分配固定公網IP:擁有公網IP的節點可拉取公網鏡像,但需要為部署工作負載的每個節點都分配公網IP。

建立Job

通過控制台建立

  1. 登入Container Service管理主控台,在左側導覽列選擇叢集列表

  2. 叢集列表頁面,單擊目的地組群名稱,然後在左側導覽列,選擇工作負載 > 任務

  3. 任務頁面,單擊使用鏡像建立

  4. 應用基本資料設定精靈頁面,設定應用的基本資料。然後單擊下一步,進入容器配置嚮導頁面。

  5. 基本配置地區的鏡像名稱中輸入registry.cn-hangzhou.aliyuncs.com/acs-sample/nginx:latest,在生命週期地區的啟動執行 > 命令中輸入/bin/sh參數中輸入["-c", "echo 'starting...'; COUNTER=0; while [ $COUNTER -lt 5 ]; do sleep 2; COUNTER=$((COUNTER+1)); echo $COUNTER; done; echo 'finished'; exit 0"],如下圖所示。然後單擊下一步,進入進階設定精靈頁面。

    重要

    拉取registry.cn-hangzhou.aliyuncs.com/acs-sample/nginx:latest鏡像前,您需要為叢集開啟公網訪問能力。如果您在建立叢集時,為專用網路配置SNAT選擇保持預設勾選,則叢集已擁有公網訪問能力。如果未選擇,請參見為叢集開啟訪問公網的能力

    image.png

  6. 進階配置嚮導頁面中,您可配置Job的completionsparallelism配置,將成功啟動並執行Pod數設定為2,它們的功能請參見上方的Job介紹。然後,單擊最下方的建立

    image.png

    配置卡片

    配置項

    說明

    任務設定

    成功啟動並執行Pod數

    spec.completions,指定進入完成狀態的Pod數量。

    並行啟動並執行Pod數

    spec.parallelism,同時啟動並執行Pod數量。

    逾時時間

    spec.activeDeadlineSeconds,Job的最大已耗用時間。Job已耗用時間超過此值後立即停止,不論是否完成。適用於有強制時效性要求或可能陷入無限迴圈的任務。預設值為600,單位秒(s)。

    重啟次數

    spec.backoffLimit:Pod失敗後的最大重試次數,是該Job的所有Pod失敗次數的總和。預設值為6

    重啟策略

    template.spec.restartPolicy,Pod失敗後的重啟策略。

    • 不重啟:Pod中的容器異常退出後,嘗試原地重啟Pod(不建立 Pod)。重啟不計入spec.backoffLimit

    • 失敗時:Pod失敗後,建立新Pod進行替換。

    標籤和註解

    Pod標籤

    為該工作負載所屬的每個Pod添加標籤(Label)。叢集中包括工作負載、Service在內的各種資源會通過標籤與Pod進行匹配。ACK為Pod預設添加格式為app:(應用程式名稱)的標籤。

    Pod註解

    為該工作負載所屬的每個Pod添加註解(Annotation)。ACK中的部分功能會使用到註解,您可在使用這些功能時再編輯。

  7. 在建立Job後,您可在控制台的Job日誌中看到兩個Pod輸出了相同的內容。

    image

通過kubectl建立

重要

建立工作負載前,請確保已通過kubectl串連到叢集。具體操作,請參見擷取叢集KubeConfig並通過kubectl工具串連叢集

  1. 複製下方的YAML檔案,並儲存到job.yaml中。

    apiVersion: batch/v1
    kind: Job
    metadata:
      name: example-job
    spec:
      completions: 2 # 兩個Pod完成後停止Job
      parallelism: 1 # 同時只運行一個Pod
      template:
        spec:
          containers:
          - name: counter
            image: registry.cn-hangzhou.aliyuncs.com/acs-sample/nginx:latest
            command: 
            - /bin/sh
            - -c
            - |
              echo "starting...";
              COUNTER=0;
              while [ $COUNTER -lt 5 ]; do
                sleep 2;
                COUNTER=$((COUNTER+1));
                echo "${COUNTER}";
              done;
              echo "finished";
              exit 0
          restartPolicy: Never # 不重啟Pod
  2. 執行以下命令建立Job。

    kubectl apply -f job.yaml

    預期輸出:

    job.batch/example-job created
  3. 等待約15秒後,執行以下命令查詢Job狀態。

    kubectl get job example-job

    預期輸出如下,說明一個Pod已完成,Job仍處於Running狀態。

    NAME          STATUS    COMPLETIONS   DURATION   AGE
    example-job   Running   1/2           16s        16s
  4. Job建立後約40秒,執行以下命令查詢Job狀態。

    kubectl get job example-job

    預期輸出如下,說明Job已完成。

    NAME          STATUS     COMPLETIONS   DURATION   AGE
    example-job   Complete   2/2           27s        37s
  5. 執行以下命令查看Job日誌。

    kubectl logs -l job-name=example-job

    預期輸出:

    starting...
    1
    2
    3
    4
    5
    finished
    starting...
    1
    2
    3
    4
    5
    finished

相關文檔