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

:ポッドをオーケストレーションするためのECIプロファイルの設定

最終更新日:May 02, 2022

YAMLファイルへの変更を最小限に抑えるために、ECIはECIプロファイル機能を提供します。 この機能を使用すると、クラスター内にエラスティックコンテナーインスタンスを設定し、セレクターに基づいてポッドを調整できます。 このトピックでは、ECIプロファイルを設定する方法について説明します。

ECIプロファイルの概要

ECIプロファイル機能は、次の機能を提供します。

  • ECIスケジューラ

    実ノードと仮想ノード (VNodes) の両方が使用されるシナリオでは、ポッドのラベルまたは名前空間のラベルを構成してポッドをVNodeにスケジュールし、VNodeにデプロイされたエラスティックコンテナインスタンスでポッドを実行できます。 同じ操作を実行するようにnodeSelectorとtolerationsパラメーターを設定することもできます。 これらの方法を使用するには、既存のリソースを変更する必要があります。 これらの変更は、システムに脆弱性を引き起こす可能性があります。

    ECI Schedulerは、Mutating Webhookに基づくスケジューリングメカニズムを使用します。 eci-profileコンポーネントで照合する名前空間ラベルまたはポッドラベルを宣言できます。 宣言されたラベルを持つポッドは、自動的にVNodesにスケジュールされ、VNodesにデプロイされたエラスティックコンテナインスタンスで実行されます。

  • ECI効果

    Elastic Compute Service (ECS) インスタンスタイプを指定したり、イメージキャッシュを有効にしたりする場合など、一部のElastic Container Instance機能を有効にするには、ポッドにアノテーションまたはラベルを追加する必要があります。 ECI Effectは自動的に注釈とラベルを追加します。 eci-profileコンポーネントでは、照合する名前空間ラベルまたはポッドラベルを宣言し、追加するアノテーションとラベルを指定できます。 指定されたアノテーションとラベルは、宣言されたラベルを持つポッドに自動的に追加されます。

    追加できるアノテーションの詳細については、「Elastic Container Instanceでサポートされているアノテーション」をご参照ください。

eci-profileコンポーネントのデプロイ

ECIプロファイル機能を使用する前に、eci-Profileコンポーネントをクラスターにデプロイする必要があります。

  1. 次の内容をeci-profile.yamlファイルとして保存します。

    apiVersion: v1
    kind: ConfigMap
    メタデータ:
      名前: eci-profile
      名前空間: kube-system
    データ:
      セレクター: |
        [
            {
                "name":"default-pod-selector" 、
                "objectSelector":{
                    "matchLabels":{
                        "alibabacloud.com/eci": "true"
                    }
                }
            },
            {
                "name":"default-namespace-selector" 、
                "namespaceSelector":{
                    "matchLabels":{
                        "alibabacloud.com/eci": "true"
                    }
                }
            }
        ]
    ---
    apiVersion: rbac.authorization.k8s.io/v1
    kind: ClusterRole
    メタデータ:
      名前: alicloud-eci-profile
    ルール:
      - apiGroups:
          - ""
        resources:
          - namespaces
        verbs:
          - get
          - list
          - watch
      - apiGroups:
          - ""
        resources:
          -イベント
        verbs:
          - create
          - patch
          - update
      - apiGroups:
          - ""
        resources:
          - configmaps
        verbs:
          - get
          - list
          - watch
          - create
          - patch
      - apiGroups:
          - ""
        resources:
          -ノード
        verbs:
          - get
      - apiGroups:
          - "admissionregistration.k8s.io"
        resources:
          -mutatingwebhookconfigurations
        verbs:
          - get
          - patch
          -作成
    ---
    apiVersion: v1
    kind: ServiceAccount
    メタデータ:
      名前: alicloud-eci-profile
      名前空間: kube-system
    ---
    apiVersion: rbac.authorization.k8s.io/v1
    kind: ClusterRoleBinding
    メタデータ:
      名前: alicloud-eci-profile
    roleRef:
      apiGroup: rbac.authorization.k8s.io
      kind: ClusterRole
      名前: alicloud-eci-profile
    主題:
      - kind: ServiceAccount
        名前: alicloud-eci-profile
        名前空間: kube-system
    ---
    apiVersion: v1
    種類: サービス
    メタデータ:
      labels:
        role: eci-profile
      名前: eci-profile
      名前空間: kube-system
    spec:
      ports:
        - port: 443
          targetPort: 443
      selector:
        アプリ: eci-profile
    ---
    apiVersion: apps/v1
    kind: 配置
    メタデータ:
      名前: alicloud-eci-profile
      namespace: kube-system
      labels:
        アプリ: eci-profile
        webhook: eci-profile
    spec:
      replicas: 1
      selector:
        matchLabels:
          アプリ: eci-profile
      template:
        metadata:
          labels:
            アプリ: eci-profile
        spec:
          serviceAccount: alicloud-eci-profile
          terminationGracePeriodSeconds: 60
          containers:
            -name: eci-profile
              画像: registry.cn-hangzhou.aliyuncs.com/eci/eci-profile:v1.0.0
              imagePullPolicy: Always
              command:
                - /eci-profile
              args:
                --- profileProvider
                -cm
              resources:
                requests:
                  メモリ: 30M
                  cpu: 100m 

    デフォルトでは、次のセレクタが前述のテンプレートに追加されます。

    • default-pod-selector: alibabacloud.com/eci: trueラベルを持つポッドは、自動的にVNodeにスケジュールされます。

    • default-namespace-selector: alibabacloud.com/eci: trueラベルを持つ名前空間内のポッドは、自動的にVNodeにスケジュールされます。

    さらに、eci-profileコンポーネントをVNodeにスケジュールする場合は、nodeSelectorとtolerationsをeci-profileに追加する必要があります。

    nodeSelector:
     k8s.aliyun.com/vnode: "true"
    寛容:
    -キー: k8s.aliyun.com/vnode
     演算子: "等しい"
     value: "true"
     効果: 「NoSchedule」 
  2. eci-profileコンポーネントをデプロイします。

    kubectl create -f eci-profile.yaml
  3. デプロイの結果を表示します。

    kubectl -n kube-system getポッド

    次のコマンド出力が返されると、eci-profileコンポーネントがデプロイされます。

    の名前準備ができているステータスの履歴書
    alicloud-eci-profile-568d64cf84-f7sz8 1/1ランニング0 26h 

設定の説明とサンプル設定

ECIプロファイルは、ポッドを一致させるためにeci-Profileのセレクタを読み取ります。 セレクターにラベルが含まれているポッドは、自動的にVNodesにスケジュールされるか、Elastic Container Instanceの機能を有効にするためにアノテーションとラベルが追加されます。

eci-profileのデプロイ後、次のコマンドを実行してeci-profileの設定を変更できます。

kubectl edit configmap eci-profile -n kube-system

次のコードは、セレクターを設定する方法を示しています。

セレクター: |
   [
    {
        "name":"デモ" 、  
        "namespaceSelector":{  
            "matchLabels":{  
                "eci":"true"
            }
        },
        "objectSelector":{  
            "matchLabels":{  
                "eci":"true"
            }
        },
        "effect":{  
            "annotations":{
                "k8s.aliyun.com/eci-image-cache": "true"
            },
            "labels":{
                "created-by-eci":"true"
            }
        }
    }
   ]

上記のテンプレートでは、次の機能を有効にするためにdemoという名前のセレクターが宣言されています。

ポッドが属する名前空間とポッド自体の両方にeci: trueラベルが付いている場合、ポッドは自動的にVNodeにスケジュールされます。 さらに、"k8s.aliyun.com/eci-image-cache": "true" アノテーションとcreated-by-eci: trueラベルがポッドに追加されます。

各セレクターの名前を宣言する必要があります。 ビジネス要件に基づいて次のフィールドを宣言することもできます。

  • namespaceSelector: 一致する名前空間ラベル。

  • objectSelector: 一致するポッドのラベル。

  • effect: 動的に追加される注釈とラベル。

注意

  • セレクターでは、namespaceSelector、objectSelector、またはその両方を設定する必要があります。 両方を構成する場合、namespaceSelectorとobjectSelectorの両方で指定されたすべてのラベルを持つポッドのみが自動的にVNodeにスケジュールされます。

  • クラスタのバージョンが1.16以降の場合、objectSelector機能がサポートされます。 クラスタのバージョンが1.16より前の場合は、feature-gateを使用してobjectSelector機能を有効にしてください。

サンプル設定1: 特定のポッドをelasticコンテナインスタンスにスケジュールする

シナリオ: created-by-eci: trueラベルを持ち、名前空間にtype: eciラベルを持つポッドをVNodeにスケジュールします。 次のコードは、サンプルYAMLファイルを提供します。

apiVersion: v1
kind: ConfigMap
メタデータ:
  名前: eci-profile
  名前空間: kube-system
データ:
  セレクター: |
    [
      {
        "name":"eci-selector-1" 、
        "namespaceSelector":{
          "matchLabels":{
            "type":"eci"
          }
        },
        "objectSelector":{
          "matchLabels":{
            "created-by-eci":"true"
          }
        }
      }
    ]

サンプル設定2: 特定の名前空間内のすべてのポッドをGPU高速化エラスティックコンテナインスタンスにスケジュールする

シナリオ: gpu: trueラベルを持つ名前空間内のすべてのポッドをVNodeにスケジュールします。 さらに、エラスティックコンテナインスタンスは、ECS. gn6v-c8g1.2xlarge GPUアクセラレーションインスタンスタイプのecsインスタンスに基づいて作成されます。 次のコードは、サンプルYAMLファイルを提供します。

apiVersion: v1
kind: ConfigMap
メタデータ:
  名前: eci-profile
  名前空間: kube-system
データ:
  セレクター: |
    [
      {
        "name":"gpu-namespace-selector-1" 、
        "namespaceSelector":{
          "matchLabels":{
            "gpu":"true"
          }
        },
        "effect": {
          "annotations": {
            "k8s.aliyun.com/eci-use-specs":"ecs.gn6v-c8g1.2xlarge"
          }
        }
      }
    ]

サンプル設定3: 特定のポッドをAMDベースのエラスティックコンテナインスタンスにスケジュールする

シナリオ: amd: trueラベルを持つポッドをVNodeにスケジュールします。 さらに、エラスティックコンテナインスタンスは、ECS. c6a.xlarge AMDベースのecsインスタンスタイプのECSインスタンスに基づいて作成されます。 次のコードは、サンプルYAMLファイルを提供します。

apiVersion: v1
kind: ConfigMap
メタデータ:
  名前: eci-profile
  名前空間: kube-system
データ:
  セレクター: |
    [
      {
        "name":"amd-object-selector-1" 、
        "objectSelector":{
          "matchLabels":{
            "amd":"true"
          }
        },
        "effect": {
          "annotations": {
            "k8s.aliyun.com/eci-use-specs": "ecs.c6a.xlarge"
          }
        }
      }
    ]