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

Container Compute Service:名前空間にワークフローを送信する

最終更新日:Dec 28, 2024

デフォルトでは、ワークフローはargo名前空間に送信されます。リソースを分離し、権限制御を強制するために、別の名前空間にワークフローを送信する場合、デフォルトまたは目的のServiceAccountに権限を付与する必要があります。

承認ファイルを作成して、名前空間のServiceAccountに権限を付与できます。その後、ワークフローを名前空間に送信できます。

  1. testという名前の名前空間を作成します。

    kubectl create ns test
  2. role-rolebinding.yamlという名前の承認ファイルを作成します。

    説明

    この例では、デフォルトのServiceAccountが承認されています。ワークフローに他のServiceAccountが指定されている場合は、これらのServiceAccountに権限を付与します。

    apiVersion: rbac.authorization.k8s.io/v1
    kind: Role
    metadata:
      annotations:
        workflows.argoproj.io/description: |
          これは、エージェントを使用する場合に必要な最小限の推奨権限です(HTTPまたはプラグインテンプレートの場合など)。
    
          v3.2以下の場合は、`workflowtasksets/status`を`patch workflowtasksets`に置き換える必要があります。
      name: agent
    rules:
      - apiGroups:
          - argoproj.io
        resources:
          - workflowtasksets
        verbs:
          - list
          - watch
      - apiGroups:
          - argoproj.io
        resources:
          - workflowtasksets/status
        verbs:
          - patch
    ---
    apiVersion: rbac.authorization.k8s.io/v1
    kind: Role
    metadata:
      annotations:
        workflows.argoproj.io/description: |
          これは、アーティファクトGCを使用する場合に必要な最小限の推奨権限です。
      name: artifactgc
    rules:
      - apiGroups:
          - argoproj.io
        resources:
          - workflowartifactgctasks
        verbs:
          - list
          - watch
      - apiGroups:
          - argoproj.io
        resources:
          - workflowartifactgctasks/status
        verbs:
          - patch
    ---
    apiVersion: rbac.authorization.k8s.io/v1
    kind: Role
    metadata:
      annotations:
        workflows.argoproj.io/description: |
          `emissary` executorの推奨最小権限です。
      name: executor
    rules:
      - apiGroups:
          - argoproj.io
        resources:
          - workflowtaskresults
        verbs:
          - create
          - patch
    ---
    apiVersion: rbac.authorization.k8s.io/v1
    kind: Role
    metadata:
      name: submit-workflow-template
    rules:
      - apiGroups:
          - argoproj.io
        resources:
          - workfloweventbindings
        verbs:
          - list
      - apiGroups:
          - argoproj.io
        resources:
          - workflowtemplates
        verbs:
          - get
      - apiGroups:
          - argoproj.io
        resources:
          - workflows
        verbs:
          - create
    ---
    apiVersion: rbac.authorization.k8s.io/v1
    kind: Role
    metadata:
      annotations:
        workflows.argoproj.io/description: |
          これは、リソーステンプレートを使用して他のワークフローを作成および管理する場合に必要な権限の例です。同じパターンは、サービスなどの他のリソースにも適しています。
      name: workflow-manager
    rules:
      - apiGroups:
          - argoproj.io
        resources:
          - workflows
        verbs:
          - create
          - get
    ---
    apiVersion: rbac.authorization.k8s.io/v1
    kind: RoleBinding
    metadata:
      name: agent-default
    roleRef:
      apiGroup: rbac.authorization.k8s.io
      kind: Role
      name: agent
    subjects:
      - kind: ServiceAccount
        name: default
    ---
    apiVersion: rbac.authorization.k8s.io/v1
    kind: RoleBinding
    metadata:
      name: artifactgc-default
    roleRef:
      apiGroup: rbac.authorization.k8s.io
      kind: Role
      name: artifactgc
    subjects:
      - kind: ServiceAccount
        name: default
    ---
    apiVersion: rbac.authorization.k8s.io/v1
    kind: RoleBinding
    metadata:
      name: executor-default
    roleRef:
      apiGroup: rbac.authorization.k8s.io
      kind: Role
      name: executor
    subjects:
      - kind: ServiceAccount
        name: default
    ---
    apiVersion: rbac.authorization.k8s.io/v1
    kind: RoleBinding
    metadata:
      name: workflow-manager-default
    roleRef:
      apiGroup: rbac.authorization.k8s.io
      kind: Role
      name: workflow-manager
    subjects:
      - kind: ServiceAccount
        name: default
  3. YAMLファイルをデプロイして承認を完了します。

    kubectl apply -f role-rolebinding.yaml -n test

    予想される出力:

    role.rbac.authorization.k8s.io/agent created
    role.rbac.authorization.k8s.io/artifactgc created
    role.rbac.authorization.k8s.io/executor created
    role.rbac.authorization.k8s.io/submit-workflow-template created
    role.rbac.authorization.k8s.io/workflow-manager created
    rolebinding.rbac.authorization.k8s.io/agent-default created
    rolebinding.rbac.authorization.k8s.io/artifactgc-default created
    rolebinding.rbac.authorization.k8s.io/executor-default created
    rolebinding.rbac.authorization.k8s.io/workflow-manager-default created
  4. 次の内容に基づいてアプリケーションを作成します。この例では、アプリケーションの名前はhelloworld-workflow.yamlです。

    apiVersion: argoproj.io/v1alpha1
    kind: Workflow                  # 新しい種類のk8s仕様
    metadata:
      generateName: hello-world-    # ワークフロー仕様の名前
    spec:
      entrypoint: main          # メインテンプレートを呼び出す
      templates:
        - name: main              # テンプレートの名前
          container:
            image: mirrors-ssl.aliyuncs.com/busybox:latest
            command: [ echo ]
            args: [ "hello world" ]
  5. 次のコマンドを実行して、ワークフローをtest名前空間に送信します。

    argo submit helloworld-workflow.yaml -n test