全部產品
Search
文件中心

Container Service for Kubernetes:建立工作流程

更新時間:Jun 19, 2024

工作流程叢集基於開源Argo Workflow專案構建,您可以參考開來源文件自訂工作流程。工作流程可應用於CI/CD流水線、資料處理、機器學習和模擬計算等。本文通過樣本介紹如何使用Argo CLI建立工作流程,並設定工作流程使用的CPU和Memory資源。

前提條件

使用說明

工作流程ServiceAccount

工作流程可以指定ServiceAccount用於運行中訪問其他Kubernetes資源,您可以建立自己的ServiceAccount,工作流程叢集會為ServiceAccount自動綁定許可權,如果許可權不足以支援您的工作流程運行,請加入DingTalk群(DingTalk群號:35688562),聯絡產品技術專家進行諮詢。

阿里雲Argo CLI

阿里雲Argo CLI完全相容開源Argo CLI,並在此基礎上增強了Metrics能力。您可以使用阿里雲Argo CLI查看工作流程消耗的CPU和記憶體資源,並查看工作流程啟動並執行成本。同時增強了日誌能力,可以擷取工作流程已刪除Pod的日誌。

安裝步驟如下:

  1. 執行如下命令下載阿里雲Argo CLI

    wget https://ack-one.oss-cn-hangzhou.aliyuncs.com/cli/v3.4.12/argo-cli-aliyun-linux
  2. 執行如下命令為argo-cli-aliyun-linux授予可執行許可權。

    chmod +x argo-cli-aliyun-linux
  3. 將執行檔案移動到環境變數包含的目錄下,例如:/usr/local/bin/

    mv argo-cli-aliyun-linux /usr/local/bin/argo

根據不同的作業系統選擇對應的版本下載,並重新命名為Argo。

建立工作流程

您可以通過以下阿里雲Argo CLI和kubectl兩種方式操作建立工作流程。

使用阿里雲Argo CLI操作工作流程

  1. 使用以下內容,建立helloworld-workflow.yaml檔案。

    apiVersion: argoproj.io/v1alpha1
    kind: Workflow                  # new type of k8s spec.
    metadata:
      generateName: hello-world-    # name of the workflow spec.
    spec:
      entrypoint: whalesay          # invoke the whalesay template.
      templates:
        - name: whalesay              # name of the template.
          container:
            image: docker/whalesay
            command: [ cowsay ]
            args: [ "hello world" ]
  2. 執行以下命令,提交工作流程。

    argo submit helloworld-workflow.yaml
  3. 查看工作流程狀態。

    1. 執行以下命令,擷取工作流程列表。

      argo list

      預期輸出:

      NAME                STATUS      AGE   DURATION   PRIORITY
      hello-world-lgdpp   Succeeded   2m    37s        0
    2. 執行以下命令,查看工作流程狀態。

      argo get hello-world-lgdpp

      預期輸出:

      Name:                hello-world-lgdpp
      Namespace:           default
      ServiceAccount:      unset (will run with the default ServiceAccount)
      Status:              Succeeded
      Conditions:
       PodRunning          False
       Completed           True
      ....
      Duration:            37 seconds
      Progress:            1/1
      ResourcesDuration:   17s*(1 cpu),17s*(100Mi memory)
      
      STEP                  TEMPLATE  PODNAME            DURATION  MESSAGE
       ✔ hello-world-lgdpp  whalesay  hello-world-lgdpp  27s

使用kubectl操作工作流程

KubeConfig設定完成後,您可以通過kubectl操作工作流程叢集,但不同於普通的Kubernetes叢集,部分操作會受限。相關許可權說明如下。

資源

許可權說明

priorityclasses

可以管理priorityclasses,並在工作流程中制定priorityclasses,達到通過Pod優先順序控制調度順序的目的。

namespaces

可以建立Namespaces,擁有自建Namespaces的全部許可權,並可訪問自建Namespaces下的資源。不能訪問系統Namespaces下的資源。系統Namespaces即以kube-開頭的Namespaces。

重要

以叢集ID命名的命名空間為Argo的系統命名空間,您可以操作此系統命名空間,例如,修改workflow-controller-configmap配置Argo Workflow的運行參數。

persistentvolumes

全部許可權。

persistentvolumeclaims

自建Namespaces下的全部許可權。

secretsconfigmapsserviceaccounts

自建Namespaces下的全部許可權。

pods

自建Namespaces下的讀許可權。

pods/logevents

自建Namespaces下的讀許可權。

pods/exec

自建Namespaces下的建立許可權。

Argo:

workflows

workflowtasksets

workflowtemplates

cronworkflows

自建Namespaces下的全部許可權。

設定容器CPU和記憶體

工作流程叢集優先使用搶佔式ECI執行個體運行工作流程,並配合使用隨用隨付ECI應對搶佔式ECI的庫存問題,以最佳化成本。搶佔式ECI執行個體的保護期為1小時,請確保工作流程的子步驟在一小時內完成。

由於搶佔式ECI執行個體僅支援2 vCPU及以上規格,不支援工作流程中的容器資源配置小於2 vCPU。

  • 如果工作流程中的容器沒有配置資源請求,系統預設使用2 vCPU/4 GiB。

  • 如果工作流程中的容器配置的資源請求小於2 vCPU/4 GiB,系統覆蓋使用2 vCPU/4 GiB。

  • 如果工作流程中的容器配置的資源請求大於2 vCPU/4 GiB,系統會自動匹配滿足規格的ECI。支援指定的vCPU和記憶體規格如下表所示。不建議使用大於8 vCPU的配置。

    vCPU

    記憶體(GiB)

    2

    4、8、16

    4

    4、8、16、32

    8

    4、8、16、32、64

強制使用隨用隨付ECI運行工作流程

在成本優先模式下,如需運行關鍵任務,不希望使用搶佔式ECI執行個體。您可以設定工作流程使用隨用隨付ECI執行個體運行工作流程。

配置Container的requestslimits欄位,範例程式碼如下。

apiVersion: argoproj.io/v1alpha1
kind: Workflow                  # new type of k8s spec.
metadata:
  generateName: hello-world-    # name of the workflow spec.
spec:
  entrypoint: whalesay         # invoke the whalesay template.
  templates:
    - name: whalesay              # name of the template.
      container:
        image: docker/whalesay
        command: [ cowsay ]
        args: [ "hello world" ]
        resources:
          requests:
            cpu: 0.5
            memory: 1Gi
          limits:
            cpu: 0.5
            memory: 1Gi