全部產品
Search
文件中心

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

更新時間:Jun 19, 2024

Job負責批量處理短暫的一次性任務(short-lived one-off tasks),即僅執行一次的任務,它保證批處理任務的一個或多個Pod成功結束。您可以通過Container Service控制台建立Job類型的應用。本文介紹如何建立一個Job類型的busybox應用,並示範該任務(Job)應用的特性。

前提條件

已建立Kubernetes叢集。具體操作,請參見建立Kubernetes託管版叢集

Job類型

Kubernetes支援以下幾種Job類型:

  • 非並行Job:通常建立一個Pod直至其成功結束。

  • 固定結束次數的Job:設定.spec.completions,建立多個Pod,直到.spec.completions個Pod成功結束。

  • 帶有工作隊列的並行Job:設定.spec.Parallelism但不設定.spec.completions,當所有Pod結束並且至少一個成功時,Job就認為是成功。

  • 固定結束次數的並行Job:同時設定.spec.completions.spec.Parallelism,多個Pod同時處理工作隊列。

根據.spec.completions.spec.Parallelism的設定,可以將Job劃分為以下幾種模式:

說明

本例中建立的任務屬於固定結束次數的並行Job。

Job類型

使用樣本

行為

Completions

Parallelism

一次性Job

資料庫遷移

建立一個Pod直至其成功結束。

1

1

固定結束次數的Job

處理工作隊列的Pod

依次建立一個Pod運行直至Completions個成功結束。

2+

1

固定結束次數的並行Job

多個Pod同時處理工作隊列

依次建立多個Pod運行直至Completions個成功結束。

2+

2+

並行Job

多個Pod同時處理工作隊列

建立一個或多個Pod直至有一個成功結束。

1

2+

操作步驟

步驟一:配置應用基本資料

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

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

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

  4. 應用基本資料設定精靈頁面,設定應用的基本資料。

    配置項

    描述

    應用程式名稱

    設定應用的名稱。例如busybox。

    類型

    設定類型任務(Job)

    標籤

    為該應用添加一個標籤,標識該應用。

    註解

    為該應用添加一個註解(Annotation)。

    時區同步

    容器與節點是否使用相同的時區。

  5. 單擊下一步,進入容器設定精靈頁面。

步驟二:配置容器

容器配置嚮導頁面,配置容器的鏡像、資源、連接埠、環境變數、健全狀態檢查、生命週期、資料卷和日誌。

說明

容器1頁簽右側,單擊添加容器可以為應用的Pod設定多個容器。

  1. 設定容器配置。

    1. 基本配置地區,完成容器的基本配置。

      參數

      描述

      鏡像名稱

      • 選擇鏡像

        您可以單擊選擇鏡像,選擇所需的鏡像。支援選擇以下三種類型的鏡像。

        • Container Registry企業版:可以選擇託管在Container RegistryACR中的企業版鏡像。需要選擇鏡像所屬地區,以及鏡像服務執行個體。關於ACR的更多資訊,請參見什麼是Container RegistryACR

        • Container Registry個人版:可以選擇託管在Container RegistryACR中的個人版鏡像。需要選擇鏡像所屬地區,以及鏡像服務執行個體。

        • 製品中心:包含應用程式容器化基礎OS鏡像、基礎語言鏡像、AI/巨量資料相關鏡像,本樣本以製品中心的Nginx鏡像為例說明。關於製品中心的更多資訊,請參見製品中心

          說明

          Container RegistryACR提供製品中心便於您的基礎鏡像使用,這些基礎鏡像由阿里雲或者龍蜥社區做版本更新及安全修複。如果您有額外的鏡像需求或者問題,請加入DingTalk群33605007047進行諮詢。

        您還可以填寫私人鏡像。填寫的格式為domainname/namespace/imagename:tag

      • 選擇鏡像拉取策略

        ACK支援以下三種鏡像拉取策略(imagePullPolicy):

        • 優先使用本地鏡像(IfNotPresent):如果本地有該鏡像(之前拉取過該鏡像至宿主機中),則使用本地鏡像,本地不存在時拉取鏡像。

        • 總是拉取鏡像(Always):表示每次部署或擴容都會從Container Registry重新拉取鏡像,而不會從本地拉取鏡像。

        • 僅使用本地鏡像(Never):僅使用本地鏡像。

        說明

        當您選中鏡像拉取策略時,預設不設定鏡像拉取策略。

      • 設定鏡像密鑰

        您可以單擊設定鏡像密鑰,為私人鏡像設定密鑰以確保安全。

        • 對於ACR個人版執行個體,您可以通過設定鏡像密鑰的方式拉取容器鏡像。設定密鑰的更多資訊,請參見建立保密字典

        • 對於ACR企業版執行個體,您可以通過免密組件拉取鏡像。具體操作,請參見使用免密組件拉取容器鏡像

      資源限制

      可指定該應用所能使用的資源上限,包括CPU、記憶體和Ephemeral-Storage三種資源,以防止佔用過多資源。關於設定資源限制的更多資訊,請參見資源畫像

      所需資源

      為該應用預留資源額度,包括CPU、記憶體和Ephemeral-Storage三種資源,即容器獨佔這些資源,防止因資源不足而被其他服務或進程爭奪資源,導致應用不可用。關於設定所需資源的更多資訊,請參見資源畫像

      容器啟動項

      • stdin:表示為該容器開啟標準輸入。

      • tty:表示為該容器分配一個虛擬終端,以便於向容器發送訊號。

      通常這兩個選項是一起使用的,表示將終端(tty)綁定到容器的標準輸入(stdin)上。例如,一個互動程式從使用者擷取標準輸入,並顯示到終端中。

      特權容器

      • 選擇特權容器,則privileged=true,開啟特權模式。

      • 不選擇特權容器,則privileged=false,關閉特權模式。

      初始化容器

      選中該選項,表示建立一個初始化容器。

      初始化容器提供了一種機制來阻塞或延遲應用程式容器的啟動,初始化容器執行成功後,Pod內的應用程式容器會並行啟動。例如,檢測依賴服務的可用性。初始化容器可以包括一些應用鏡像中不存在的工具 + 生產力和安裝指令碼,用來初始化應用程式容器的運行環境,例如設定核心參數、組建組態檔案。更多資訊,請參見Init Containers

    2. 可選:連接埠設定地區,單擊新增設定容器的連接埠。

      參數

      描述

      名稱

      設定容器連接埠名稱。

      容器連接埠

      設定暴露的容器訪問連接埠或連接埠名,連接埠號碼必須介於1~65535。

      協議

      支援TCP和UDP。

    3. 可選:環境變數地區,單擊新增設定環境變數。

      支援通過索引值對的形式為Pod配置環境變數。用於給Pod添加環境標誌或傳遞配置等,具體操作,請參見Pod variable

      參數

      描述

      類型

      設定環境變數的類型,支援以下類型:

      • 自訂

      • 配置項

      • 保密字典

      • 變數/變數引用

      • 資源引用

      配置項、保密字典支援對全部檔案的引用,以保密字典為例。選擇保密字典類型,只選擇目標保密字典,則預設引用全部檔案。環境變數

      對應的YAML,也引用了整個密鑰(Secret)。yaml

      變數名稱

      設定環境變數名稱。

      變數/變數引用

      設定變數引用的值。

    4. 可選:健全狀態檢查地區,根據需要開啟存活檢查就緒檢查啟動探測

      更多資訊,請參見配置存活、就緒和啟動探測器

      參數

      請求類型

      配置說明

      • 存活檢查(Liveness):用於檢測何時重啟容器。

      • 就緒檢查(Readiness):確定容器是否已經就緒,且可以接受流量。

      • 啟動探測(Startup Probes):用於檢測何時啟動容器。

        說明

        僅Kubernetes叢集1.18及之後版本支援啟動探測。

      HTTP請求

      即向容器發送一個HTTP GET請求,支援的參數包括:

      • 協議HTTP/HTTPS

      • 路徑:訪問HTTP Server的路徑。

      • 連接埠:容器暴露的訪問連接埠或連接埠名,連接埠號碼必須介於1~65535。

      • Http頭:即HTTP Headers,HTTP請求中自訂的要求標頭,HTTP允許重複的Header。支援索引值對的配置方式。

      • 延遲探測時間(秒):即initialDelaySeconds,容器啟動後第一次執行探測時需要等待多少秒,預設為3秒。

      • 執行探測頻率(秒):即periodSeconds,指執行探測的時間間隔,預設為10秒,最小為1秒。

      • 逾時時間(秒):即timeoutSeconds,探測逾時時間。預設1秒,最小1秒。

      • 健康閾值:探測失敗後,最少連續探測成功多少次才被認定為成功。預設是1,最小值是1。對於存活檢查(liveness)必須是1。

      • 不健康閾值:探測成功後,最少連續探測失敗多少次才被認定為失敗。預設是3,最小值是1。

      TCP串連

      即向容器發送一個TCP Socket,Kubelet將嘗試在指定連接埠上開啟容器的通訊端。 如果可以建立串連,容器被認為是健康的,如果不能就認為是失敗的。支援的參數包括:

      • 連接埠:容器暴露的訪問連接埠或連接埠名,連接埠號碼必須介於1~65535。

      • 延遲探測時間(秒):即initialDelaySeconds,容器啟動後第一次執行探測時需要等待多少秒,預設為15秒。

      • 執行探測頻率(秒):即periodSeconds,指執行探測的時間間隔,預設為10秒,最小為1秒。

      • 逾時時間(秒):即timeoutSeconds,探測逾時時間。預設1秒,最小1秒。

      • 健康閾值:探測失敗後,最少連續探測成功多少次才被認定為成功。預設是1,最小值是1。對於存活檢查(liveness)必須是1。

      • 不健康閾值:探測成功後,最少連續探測失敗多少次才被認定為失敗。預設是3,最小值是1。

      命令列

      通過在容器中執行探針檢測命令,來檢測容器的健康情況。支援的參數包括:

      • 命令列:用於檢測容器健康情況的探測命令。

      • 延遲探測時間(秒):即initialDelaySeconds,容器啟動後第一次執行探測時需要等待多少秒,預設為5秒。

      • 執行探測頻率(秒):即periodSeconds,指執行探測的時間間隔,預設為10秒,最小為1秒。

      • 逾時時間(秒):即timeoutSeconds,探測逾時時間。預設1秒,最小1秒。

      • 健康閾值:探測失敗後,最少連續探測成功多少次才被認定為成功。預設是1,最小值是1。對於存活檢查(liveness)必須是1。

      • 不健康閾值:探測成功後,最少連續探測失敗多少次才被認定為失敗。預設是3,最小值是1。

    5. 可選:生命週期地區,設定容器的生命週期。

      您可以為容器的生命週期配置啟動執行、啟動後處理和停止前處理。具體操作,請參見配置生命週期生命週期

      參數

      描述

      啟動執行

      為容器設定啟動前置命令和參數。

      啟動後處理

      為容器設定啟動後的命令。

      停止前處理

      為容器設定預結束命令。

    6. 可選:資料卷地區,增加本機存放區或雲端儲存聲明PVC(Persistent Volume Claim)。

      參數

      描述

      增加本機存放區

      本機存放區:支援主機目錄(HostPath)、配置項(ConfigMap)、保密字典(Secret)和臨時目錄,將對應的掛載源掛載到容器路徑中。更多資訊,請參見volumes

      增加雲端儲存聲明(PersistentVolumeClaim)

      支援通過PVC掛載雲端儲存卷。在選擇目標掛載源前,您需要建立雲端儲存聲明。具體操作,請參見建立持久化儲存卷聲明

      本例中配置了一個雲端儲存類型的資料卷聲明disk-ssd,將其掛載到容器的/tmp路徑下。配置資料卷

    7. 可選:日誌配置地區,進行採集配置和自訂Tag設定。

      重要

      請確保已部署Kubernetes叢集,並且在此叢集上已安裝日誌外掛程式。

      配置項

      描述

      採集配置

      日誌庫:即在Log Service中產生一個對應的Logstore,用於儲存採集到的日誌。

      容器內日誌路徑:支援Stdout和文本日誌。

      • Stdout:表示採集容器的標準輸出日誌。

      • 文本日誌:表示收集容器內指定路徑的日誌,本例中表示收集/var/log/nginx下所有的文本日誌,也支援萬用字元的方式。

      自訂Tag

      您還可以設定自訂Tag,設定Tag後,會將該Tag一起採集到容器的日誌輸出中。自訂Tag可協助您給容器日誌打上Tag,方便進行日誌統計和過濾等分析操作。

    8. 單擊下一步,進入進階設定精靈頁面。

步驟三:完成進階配置

  1. 在任務設定地區,設定任務的運行狀態。

    參數

    說明

    成功啟動並執行Pod數

    即設定COMPLETIONS的值,指定Job需要成功運行Pods的數量。預設值為1。

    並行啟動並執行Pod數

    即設定parallelism的值,指定Job在任一時刻應該並發運行Pod的數量。預設值為1。

    逾時時間

    即設定activeDeadlineSeconds的值,指定Job可啟動並執行時間期限,超過時間還未結束,系統將會嘗試進行終止。

    重試次數

    即設定backoffLimit的值,指定Job失敗後進行重試的次數。預設是6次,每次失敗後重試會有延遲時間,該時間是指數級增長,最長時間是6分鐘。

    重啟策略

    僅支援不重啟(Never)失敗時(OnFailure)

  2. 可選:標籤和注釋地區,單擊添加設定容器組的標籤和注釋。

    參數

    描述

    Pod標籤

    為該Pod添加一個標籤,標識該應用。

    Pod註解

    為該Pod添加一個註解(Annotation)。

  3. 單擊建立

步驟四:查看應用

  1. 建立成功後,預設進入建立完成頁面,會列出應用程式套件含的對象。

    您可以單擊查看應用詳情,進入任務詳情頁面。本例中按照任務定義,一次性並行建立2個Pod。

    等待一段時間,所有容器組建立完畢。

  2. 單擊工作負載 > 任務,在任務頁面,您可以看到該任務的完成時間。

    說明

    若任務未建立完所有容器組,任務將不會顯示完成時間。

相關操作

Job建立完成後,您還可以進行以下操作:

在工作清單中,單擊目標任務名稱或目標任務操作列下的詳情,在任務詳情頁面,您可以伸縮查看Yaml、重新整理應用。

  • 伸縮:在應用詳情頁面單擊伸縮,您可以修改所需容器組數量。

  • 查看Yaml:在應用詳情頁面單擊查看Yaml,您可以更新下載另存新檔YAML檔案。

  • 重新整理:在應用詳情頁面,單擊image.png表徵圖,您可以重新整理應用。

在工作清單目標任務名稱右側的操作列中,選擇更多 > 刪除,即可刪除任務Job。