すべてのプロダクト
Search
ドキュメントセンター

Container Service for Kubernetes:ACK Oneワークフロークラスターを使用してイメージCIパイプラインを構築する

最終更新日:Mar 06, 2025

このトピックでは、Distributed Cloud Container Platform for Kubernetes (ACK One) ワークフロークラスターを使用して、イメージ連続統合 (CI) パイプラインを構築する方法について説明します。

前提条件

制限

このメソッドを使用して構築されたCIパイプラインは、コードコミットに基づいてイメージビルドをトリガーできません。

ACKの利点Oneワークフロークラスター

ACK Oneワークフロークラスターのメリットを表示

オープンソースのArgoワークフローに基づいて開発されたワークフロークラスターは、オープンソースワークフローの標準に準拠しています。 既存のContainer Service for Kubernetes (ACK) クラスターまたはKubernetesクラスターでArgoワークフローが実行されている場合、ワークフローを変更することなく、クラスターをワークフロークラスターにシームレスにアップグレードできます。

ワークフロークラスターを使用すると、ワークフローオーケストレーションを簡単に管理し、各ワークフローステップをコンテナーで実行できます。 これにより、高効率の継続的インテグレーション /継続的デプロイメント (CI/CD) パイプラインが構築され、機械学習やデータ処理ジョブなどのコンピューティング集約型ジョブ用の多数のコンテナをすばやく起動できます。

  • ワークフロークラスターは、オープンソースのArgoワークフローに基づいて開発されています。 ワークフローを変更することなく、Argoワークフローを実行するKubernetesクラスターをワークフロークラスターにシームレスにアップグレードできます。

  • ワークフロークラスターは完全に自動化されたO&Mをサポートし、ワークフロー開発に集中できます。

  • ワークフロークラスターは、高い弾力性と自動スケーリング機能を提供し、計算リソースのコストを削減します。

  • ワークフロークラスターは、高いスケジューリング信頼性とマルチゾーン負荷分散をサポートします。

  • ワークフロークラスターは、パフォーマンス、効率、安定性、および可観測性が最適化された制御プレーンを使用します。

  • ワークフロークラスターは、大規模なオブジェクトのアップロード、アーティファクトのガベージコレクション (GC) 、データストリーミングなど、拡張されたOSS管理機能をサポートします。

イメージCIパイプラインの構築

ACK Oneワークフロークラスターは、BuildKitツールを使用してイメージをビルドおよびプッシュします。 この例では、BuildKitはDocker Hub ( https://hub.docker.com/r/moby/buildkit ) からダウンロードできるmoby/buildkit:v0.12.1-rootlessイメージを使用してデプロイされます。

手順1: Container Registry Enterprise Editionインスタンスにログインするためのユーザー名とパスワードを保存するためのシークレットをワークフロークラスターに作成します。

  1. Container Registry Enterprise Editionインスタンスのアクセス資格情報を設定します。 詳細については、「Container Registry Enterprise Editionインスタンスのアクセス資格情報の設定」をご参照ください。

  2. 次のコマンドを実行して、ワークフロークラスターにシークレットを作成し、認証情報を保存します。これは、BuildKitがContainer Registry Enterprise Editionインスタンスにアクセスするために使用できます。

    次のコードブロックの ${workflow_kubeconfig}$username:$passwordを実際の値に置き換えます。

    # repositoryDomain: For example, you can set the value to demo-test-registry.cn-hangzhou.cr.aliyuncs.com.
    kubectl --kubeconfig ${workflow_kubeconfig} create secret generic docker-config --from-literal="config.json={\"auths\": {\"$repositoryDomain\": {\"auth\": \"$(echo -n $username:$password|base64)\"}}}"

手順2: ワークフロークラスターでのWorkflowTemplateの作成

WorkflowTemplateを使用して、Gitリポジトリからのコードの複製、イメージの構築、およびイメージのプッシュを設定できます。

  • Gitリポジトリからのコードクローニング: この例では、パブリックGitリポジトリが使用されています。 プライベートGitリポジトリを使用する場合は、プライベートリポジトリにログオンするためのトークンを指定します。 例: git clone https://[username]:[token]@ gitlab.com/demo3624733/echo-server.git

  • Image building and pushing: この例では、BuildKitツールを使用してイメージをビルドおよびプッシュします。

次のセクションでは、共有ストレージを使用しないWorkflowTemplateとApsara File storage NAS (NAS) を使用するWorkflowTemplateを作成する方法について説明します。

共有ストレージを使用しないWorkflowTemplateの作成

この方法では、簡単な手順でCIパイプラインを構築できます。 次のWorkflowTemplateは、initコンテナーを構成して、emptyDirボリュームにコードを複製し、一時ディレクトリにイメージを構築します。

  1. 次のYAMLテンプレートに基づいて、worktemplate-1.yamlという名前のファイルを作成します。

    パラメーターセクションで、リポジトリ、ブランチ、およびイメージを指定します。 次のテンプレートのユーザー名とトークンを、実際に使用されているものに置き換えます。

    worktemplate-1.yamlのコンテンツを表示

    apiVersion: argoproj.io/v1alpha1
    kind: WorkflowTemplate
    metadata:
      name: build-echo-server-2
    spec:
      arguments:
        parameters:
          - name: repo
            value: https://github.com/ivan-cai/echo-server.git
          - name: branch
            value: main
          - name: path
            value: echo-server
          - name: image
            value: demo-test-registry.cn-hangzhou.cr.aliyuncs.com/cidemo/echo-server:v2-argo-08231710
      entrypoint: main
      volumes:
        - name: work
          emptyDir: {}
      templates:
        - name: main
          inputs:
            parameters:
              - name: repo
              - name: branch
              - name: path
              - name: image
          # Mount the configuration so we can push the image.
          # This should create the /.docker/config.json file.
          volumes:
            - name: docker-config
              secret:
                secretName: docker-config
          initContainers:
          - name: git-clone
            image: alpine/git:v2.26.2
            volumeMounts:
              - mountPath: /work
                name: work
            workingDir: /work/
            command:
              - git
            args:
              - clone
              - --depth
              - "1"
              - --branch
              - "{{inputs.parameters.branch}}"
              - --single-branch
              - "{{inputs.parameters.repo}}"
          container:
            readinessProbe:
              exec:
                command: [ sh, -c, "buildctl debug workers" ]
            image: moby/buildkit:v0.12.1-rootless
            volumeMounts:
              - name: work
                mountPath: /work
              - name: docker-config
                mountPath: /.docker
            workingDir: /work/{{inputs.parameters.path}}
            env:
              - name: BUILDKITD_FLAGS
                value: --oci-worker-no-process-sandbox
              - name: DOCKER_CONFIG
                value: /.docker
            command:
              - buildctl-daemonless.sh
            args:
              - build
              - --frontend
              - dockerfile.v0
              - --local
              - context=.
              - --local
              - dockerfile=.
              - --output
              - type=image,name={{inputs.parameters.image}},push=true
              - build-arg:GOPROXY=http://goproxy.cn,direct
  2. 次のコマンドを実行して、ワークフロークラスターにWorkflowTemplateを作成します。

    kubectl -- kubeconfig ${ackone_argo_kubeconfig} apply -f worktemplate-1.yaml

NASを使用するWorkflowTemplateの作成

このメソッドは、Gitリポジトリからコードを複製するために作成されたポッドと、イメージを構築するために作成されたポッドとの間でNASを使用してデータを共有します。 ワークフロークラスターでNASボリュームをプロビジョニングする方法の詳細については、「ボリュームの使用」をご参照ください。

  1. 次のYAMLテンプレートに基づいて、worktemplate-2.yamlという名前のファイルを作成します。

    パラメーターセクションで、リポジトリ、ブランチ、およびイメージを指定します。 次のテンプレートのユーザー名とトークンを、実際に使用されているものに置き換えます。

    worktemplate-2.yamlのコンテンツを表示

    apiVersion: argoproj.io/v1alpha1
    kind: WorkflowTemplate
    metadata:
      name: build-echo-server
    spec:
      arguments:
        parameters:
          - name: repo
            value: https://github.com/ivan-cai/echo-server.git
          - name: branch
            value: main
          - name: path
            value: echo-server
          - name: image
            value: demo-test-registry.cn-hangzhou.cr.aliyuncs.com/cidemo/echo-server:v2-argo
      entrypoint: main
      volumes:
        - name: work
          persistentVolumeClaim:
            claimName: pvc-nas
      templates:
        - name: main
          dag:
            tasks:
              - name: clone
                template: clone
                arguments:
                  parameters:
                    - name: repo
                      value: "{{workflow.parameters.repo}}"
                    - name: branch
                      value: "{{workflow.parameters.branch}}"
              - name: image
                template: image
                arguments:
                  parameters:
                    - name: path
                      value: "{{workflow.parameters.path}}"
                    - name: image
                      value: "{{workflow.parameters.image}}"
                depends: "clone"
        - name: clone
          inputs:
            parameters:
              - name: repo
              - name: branch
          container:
            volumeMounts:
              - mountPath: /work
                name: work
            image: alpine/git:v2.26.2
            workingDir: /work/
            # Do a shallow clone, which is the fastest way to clone, by using the
            # --depth, --branch, and --single-branch options
            command:
              - sh
              - -c
              - |
                if [ -d "{{workflow.parameters.path}}" ];then
                  rm -rf {{workflow.parameters.path}}
                fi
                git clone --depth 1 --branch {{inputs.parameters.branch}} --single-branch {{inputs.parameters.repo}}
        - name: image
          inputs:
            parameters:
              - name: path
              - name: image
          # Mount the configuration so we can push the image.
          # This should create the /.docker/config.json file.
          volumes:
            - name: docker-config
              secret:
                secretName: docker-config
          container:
            readinessProbe:
              exec:
                command: [ sh, -c, "buildctl debug workers" ]
            image: moby/buildkit:v0.9.3-rootless
            volumeMounts:
              - name: work
                mountPath: /work
              - name: docker-config
                mountPath: /.docker
            workingDir: /work/{{inputs.parameters.path}}
            env:
              - name: BUILDKITD_FLAGS
                value: --oci-worker-no-process-sandbox
              - name: DOCKER_CONFIG
                value: /.docker
            command:
              - buildctl-daemonless.sh
            args:
              - build
              - --frontend
              - dockerfile.v0
              - --local
              - context=.
              - --local
              - dockerfile=.
              - --output
              - type=image,name={{inputs.parameters.image}},push=true
              - build-arg:GOPROXY=http://goproxy.cn,direct
  2. 次のコマンドを実行して、ワークフロークラスターにWorkflowTemplateを作成します。

    kubectl --kubeconfig ${ackone_argo_kubeconfig} apply -f worktemplate-2.yaml

ステップ3: ワークフローの作成

  1. 次のyamlテンプレートに基づいてworkflow. YAMLという名前のファイルを作成します。

    apiVersion: argoproj.io/v1alpha1
    kind: Workflow
    metadata:
      annotations:
        workflows.argoproj.io/pod-name-format: v1
      generateName: echo-server-
    spec:
      workflowTemplateRef:
        name: echo-server
  2. 次のコマンドを実行して、ワークフロークラスターにワークフローを作成します。

    kubectl --kubeconfig ${ackone_argo_kubeconfig} create -f workflow.yaml

ステップ4: ACK Oneコンソールでワークフローを表示する

インターネットアクセスを有効にすると、Distributed Cloud Container Platform for Kubernetes (ACK One) コンソールからArgoコンソールにアクセスできます。

  1. ACK Oneコンソールにログインします。 左側のナビゲーションウィンドウで、[ワークフロークラスター] をクリックします。

  2. [基本情報] タブで、[一般的な操作] セクションの [ワークフローコンソール (アルゴ)] をクリックします。

  3. ワークフローコンソールの左側で、NAMESPACEデフォルトに設定して、作成したワークフローを表示します。