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

Elastic Container Instance:eci-profile を構成する

最終更新日:May 27, 2025

YAML ファイルの変更を最小限に抑えるため、Elastic Container Instance は eci-profile 機能を提供します。 eci-profile を使用すると、クラスターレベルで Elastic Container Instance リソースを構成し、セレクターに基づいて Pod をオーケストレーションできます。 このトピックでは、eci-profile を構成する方法について説明します。

eci-profile の機能

Container Service for Kubernetes(ACK)で Elastic Container Instance を使用するには、Virtual Kubelet テクノロジーと統合された ack-virtual-node コンポーネントをデプロイする必要があります。 これにより、以下の問題が発生する可能性があります。

  • Elastic Container Instance で実行するように Pod をスケジューリングするには、上位層ビジネスの YAML ファイルを変更する必要があります。

  • Elastic Container Instance の特定の高度な機能を有効にするには、上位層ビジネスの YAML ファイルを変更する必要があります。

前述の問題は、O&M ジョブとビジネスジョブの境界線を曖昧にします。 これらの問題を回避するために、Elastic Container Instance は eci-profile 構成ファイルを提供します。 eci-profile は、以下の機能を提供します。

  • ECI スケジューラー

    実ノードと仮想ノードがデプロイされているシナリオでは、Pod ラベル、名前空間ラベル、および Elastic Container Instance ベースのスケジューリングを構成することにより、Kubernetes Pod を Elastic Container Instance で実行するようにスケジューリングできます。 これらの構成を実行するには、クラスター内の既存のリソースを変更する必要があります。 変更によって、システムに脆弱性が発生する可能性があります。

    この問題に対処するために、ECI スケジューラーは、mutating webhook に基づく新しいスケジューリングメカニズムを提供します。 eci-profile では、セレクターを構成できます。 次に、システムは、セレクターで指定された Pod ラベルまたは名前空間ラベルに基づいて Pod をフィルタリングします。 Pod またはその名前空間に、セレクターで指定された対応するラベルがある場合、Pod は Elastic Container Instance で実行するように自動的にスケジューリングされます。

  • ECI 効果

    Elastic Container Instance の一部の機能を有効にするには、Pod にアノテーションまたはラベルを追加する必要があります。 これらの機能の例としては、Elastic Compute Service(ECS)のインスタンスタイプの指定、イメージキャッシュの有効化、Network Time Protocol(NTP)サービスの構成などがあります。 詳細については、「ECI Pod アノテーション」をご参照ください。

    ECI 効果は、Pod にアノテーションとラベルを自動的に追加できます。 eci-profile でセレクターを構成するときに、フィルター条件と追加するアノテーションおよびラベルを指定できます。 セレクターのフィルター条件を満たす Pod は、Elastic Container Instance で実行するように自動的にスケジューリングされます。 指定されたアノテーションとラベルが Pod に追加されます。

  • ホットアップデート

    eci-profile には、クラスター IP アドレス、ハイブリッドクラウド、ログ収集、および vSwitch の構成が含まれています。 要件に基づいて構成を更新できます。

    • 構成を更新するために ack-virtual-node コンポーネントを再起動する必要はありません。

    • 更新された構成は、新しく作成された Elastic Container Instance Pod にすぐに適用されますが、既存の Elastic Container Instance Pod には、Pod でローリングリリースが実行された後にのみ適用されます。

注意事項

  • eci-profile を構成する場合は、クラスター内の ack-virtual-node コンポーネントが最新バージョンであることを確認してください。 ack-virtual-node の更新方法については、「コンポーネントの管理」をご参照ください。

  • ECI スケジューラー機能を使用する場合は、mutating webhook を有効にする必要があります。 Serverless Kubernetes クラスター 内の Pod は、Elastic Container Instance で実行するように自動的にスケジューリングされます。 Pod をスケジューリングするために ECI スケジューラーを使用する必要はありません。

構成の説明

システムが Pod を作成すると、システムは kube-system 名前空間の eci-profile 構成ファイル(eci-profile という名前の ConfigMap)を読み取ります。 次に、システムは、構成ファイルの data セクションの構成に基づいて Pod を作成します。 kubectl get cm -n kube-system eci-profile -o yaml コマンドを実行して、eci-profile の YAML ファイルを表示できます。 eci-profile の YAML ファイルテンプレート:

apiVersion: v1
data:
  enableClusterIp: "true"
  enableHybridMode: "false"
  enableLinuxArm64Node: "false" 
  enableLogController: "false"
  enablePVCController: "false"
  enablePrivateZone: "false"
  enableReuseSSLKey: "false"
  featureGates: "WaitForFirstConsumer=false"
  securityGroupId: sg-2zeeyaaxlkq9sppl****
  selectors: ""
  slsMachineGroup: ""
  vSwitchIds: vsw-2ze23nqzig8inprou****,vsw-2ze94pjtfuj9vaymf****
  vpcId: vpc-2zeghwzptn5zii0w7****
kind: ConfigMap
metadata:
  creationTimestamp: "2023-01-11T08:28:14Z"
  name: eci-profile
  namespace: kube-system
  resourceVersion: "356"
  uid: b345fa8c-919e-41fc-a981-57864b1a****

eci-profile の data セクションの構成を変更して、セレクターを構成したり、他の必要なパラメーターを更新したりできます。

data セクションのパラメーター

説明

参照

selectors

ECI スケジューラーと ECI 効果機能を実装するために、セレクターと効果を追加できます。 セレクターには、objectSelectors と namespaceSelectors が含まれます。 要件に基づいてセレクターを構成できます。

セレクターを構成する

vpcId や vSwitchIds などの他の必要なパラメーター

クラスターレベルのパラメーター。 パラメーターでホットアップデートを実行できます。 要件に基づいてパラメーターを更新できます。

data セクションの他の必要なパラメーターを更新する

eci-profile を変更するには、次のいずれかの方法を使用できます。

  • kubectl edit コマンドを実行します。

    kubectl edit configmap eci-profile -n kube-system
  • Container Service for Kubernetes(ACK)コンソールを使用します。

    1. Container Service ACK コンソール にログインします。

    2. クラスター ページで、管理するクラスターを見つけ、クラスターの名前をクリックします。

    3. クラスター管理ページの左側のナビゲーションウィンドウで、[構成] > [ConfigMap] を選択します。

    4. 名前空間ドロップダウンリストから [kube-system] を選択します。

    5. eci-profile を見つけ、対応するアクション列の [YAML の編集] をクリックします。

セレクターを構成する

selectors パラメーターには、ECI スケジューラーと ECI 効果の構成が含まれています。 システムが Pod を作成すると、システムはセレクターに基づいて Pod を照合します。 Pod またはその名前空間にセレクターに対応するラベルがある場合、Pod は Elastic Container Instance で実行するように自動的にスケジューリングされるか、指定されたアノテーションとラベルが追加されて、Elastic Container Instance の高度な機能が有効になります。

selectors パラメーターには複数のセレクターを構成できます。 各セレクターの名前を指定する必要があります。 また、必要に応じて、各セレクターの以下の情報を指定することもできます。

  • namespaceSelector: 照合する名前空間ラベル。

  • objectSelector: 照合する Pod ラベル。

  • effect: Pod に動的に追加するアノテーションとラベル。

セレクターの構成テンプレート:

説明

ビジネスシナリオに基づいてセレクターを設計します。 セレクターを構成する場合は、コメントを削除してください。

data:
  selectors: |
    [
      {
        "name": "selector-demo1", # セレクターの名前。これは必須パラメーターです。
        "namespaceSelector": {    # 名前空間フィルター。これは、名前空間ラベルに基づくオプションのパラメーターです。
          "matchLabels": {        # 照合する名前空間ラベル。複数のラベル間の論理関係は AND です。
            "eci": "true"
          }
        },
        "objectSelector": {       # オブジェクトフィルター。これは、Pod ラベルに基づくオプションのパラメーターです。
          "matchLabels": {        # 照合する Pod ラベル。複数のラベル間の論理関係は AND です。
            "eci": "true"
          }
        },
        "effect": {               # Pod に動的に追加するアノテーションとラベル。これはオプションのパラメーターです。
          "annotations": {
            "k8s.aliyun.com/eci-use-specs": "ecs.c6.xlarge"
          },
          "labels": {
            "created-by-eci": "true"
          }
        }
      },
      {
        "name": "selector-demo2",   
        "objectSelector": {      
          "matchLabels": {     
            "eci": "test"
    	  }
        }
      }
    ]

上記のテンプレートでは、selector-demo1 という名前のセレクターが以下の機能を提供します。

Pod とその名前空間の両方に eci: true ラベルがある場合、Pod は Elastic Container Instance で実行するように自動的にスケジューリングされます。 "k8s.aliyun.com/eci-use-specs": "ecs.c6.xlarge" アノテーションと ラベルが Pod に追加されます。

重要
  • セレクターごとに namespaceSelector と objectSelector パラメーターの少なくともいずれかを構成することをお勧めします。 namespaceSelector と objectSelector の両方が構成されている場合、Pod は両方のパラメーターの値と一致する必要があります。 いずれも構成されていないが、effect パラメーターが構成されている場合、effect 設定は、Elastic Container Instance で実行するようにスケジューリングされているすべての Pod に適用されます。

  • 複数のセレクターを構成した場合、セレクターは順番に照合されます。 Pod が照合されると、effect 設定で指定されたアノテーションとラベルが Pod に自動的に追加されます。 これらのアノテーションとラベルは、Pod の既存のアノテーションとラベルを上書きしません。 重複するアノテーションまたはラベルが存在する場合、優先順位の高いアノテーションまたはラベルが使用されます。 Pod の既存のアノテーションとラベルは、照合されたセレクターの effect 設定で指定されたアノテーションとラベルよりも優先順位が高くなります。 セレクターの effect 設定のアノテーションまたはラベルには、セレクターが照合される順序で降順の優先順位が割り当てられます。

セレクターを構成した後、次のコマンドを実行して、セレクターが有効になっているかどうかを確認できます。 返された YAML ファイルに構成されたセレクターが含まれている場合、セレクターは有効になります。 返された YAML ファイルに構成されたセレクターが含まれていない場合は、セレクターの形式が正しいかどうかを確認してください。

kubectl get mutatingwebhookconfigurations -o yaml vk-webhook

構成例 1: 特定の Pod を Elastic Container Instance で実行するようにスケジューリングする

次のコードでは、namespaceSelector と objectSelector が構成されており、以下の機能を提供します。

Pod に created-by-eci: true ラベルがあり、Pod の名前空間に type: eci ラベルがある場合、Pod は Elastic Container Instance で実行するようにスケジューリングされます。

data:
  selectors: |
    [
      {
        "name":"eci-selector",
        "namespaceSelector":{
          "matchLabels":{
            "type":"eci"
          }
        },
        "objectSelector":{
          "matchLabels":{
            "created-by-eci":"true"
          }
        }
      }
    ]

構成例 2: 特定の Pod を Elastic Container Instance にスケジューリングし、GPU アクセラレーション ECS インスタンスタイプを使用して Elastic Container Instance Pod を作成する

次のコードでは、namespaceSelector と effect が構成されており、以下の機能を提供します。

Pod が属する名前空間に gpu: true ラベルがある場合、Pod は Elastic Container Instance で実行するようにスケジューリングされます。 Elastic Container Instance Pod は、ecs.gn6v-c8g1.2xlarge GPU アクセラレーション ECS インスタンスタイプに基づいて作成され、gpu: test ラベルが追加されます。

data:
  selectors: |
    [
      {
        "name":"gpu-namespace-selector",
        "namespaceSelector":{
          "matchLabels":{
            "gpu":"true"
          }
        },
        "effect": {
          "annotations": {
            "k8s.aliyun.com/eci-use-specs":"ecs.gn6v-c8g1.2xlarge"
          },        
          "labels":{
            "gpu":"test"
          }
        }
      }
    ]

構成例 3: 特定の Pod を Elastic Container Instance にスケジューリングし、イメージキャッシュの自動照合を有効にする

次のコードでは、objectSelector と effect が構成されており、以下の機能を提供します。

Pod に imc: auto ラベルがある場合、Pod は Elastic Container Instance で実行するようにスケジューリングされます。 イメージキャッシュの自動照合機能が有効になって、Pod が作成されます。

data:
  selectors: |
    [
      {
        "name":"autoimc-object-selector",
        "objectSelector":{
          "matchLabels":{
            "imc":"auto"
          }
        },
        "effect": {
          "annotations": {
            "k8s.aliyun.com/eci-auto-imc": "true"
          }
        }
      }
    ]

data セクションの他の必要なパラメーターを更新する

data セクションに含まれる他の必要なパラメーターは、Pod の作成に必要な情報を指定します。 たとえば、vpcId パラメーターは、Pod が属する virtual private cloud(VPC)を指定します。 vSwitchIds パラメーターは、Pod に関連付けられている vSwitch を指定します。 必要に応じて、必要なパラメーターを更新できます。 更新された構成は、ack-virtual-node コンポーネントを再起動しなくてもすぐに有効になります。 以下の必要なパラメーターを更新できます。

説明

以下のパラメーターはクラスターレベルのパラメーターです。 Elastic Container Instance Pod を作成するときにパラメーターを構成しない場合、eci-profile の構成がパラメーターに使用されます。

パラメーター

説明

enableClusterIp

"true"

クラスターの IP アドレスをサポートするかどうかを指定します。

enableLinuxArm64Node

"false"

ARM ベースのノードを有効にするかどうかを指定します。 詳細については、「ARM ベースの仮想ノードに Pod をスケジューリングする」をご参照ください。

enableLogController

"false"

詳細については、「言語の選択」をご参照ください。

Simple Log Service の Custom Resource Definition(CRD)を使用して Pod のログを収集するかどうかを指定します。 このパラメーターを true に設定する場合は、slsMachineGroup パラメーターも構成する必要があります。

enablePVCController

"false"

オンラインディスク拡張を有効にするかどうかを指定します。 このパラメーターを true に設定すると、システムは、ディスクにバインドされている PersistentVolumeClaim(PVC)でホット拡張を実行できます。

enablePrivateZone

"false"

PrivateZone を使用してドメイン名を解決するかどうかを指定します。

enableReuseSSLKey

"false"

SSL キーの再利用を有効にするかどうかを指定します。 このパラメーターを true に設定すると、Elastic Container Instance Pod を作成するときに SSL キーが再利用されます。 これにより、Pod の作成効率が向上します。

重要

デフォルトでは、Elastic Container Instance Pod を作成すると、ack-virtual-node は各 Pod に一意の SSL 証明書を発行します。 多数の Pod を作成する場合、この動作は Pod の作成効率に大きく影響します。 SSL キーの再利用を有効にすると、ack-virtual-node はすべての Pod に同じ SSL 証明書を発行します。 これにより、セキュリティを犠牲にして効率が向上します。

featureGates

"WaitForFirstConsumer=false"

カナリア機能を指定します。 WaitForFirstConsumer のみを構成できます。

WaitForFirstConsumer を true に設定すると、ack-virtual-node がクラスターにデプロイされるときに、StorageClass は WaitForFirstConsumer モードを使用します。

  • WaitForFirstConsumer を true に設定する前に、csi-provisioner コンポーネントが最新バージョンに更新されていることを確認してください。

  • WaitForFirstConsumer を true に設定した後、PVC が Pod によって使用されるとき、PersistentVolume(PV)の作成とバックエンドストレージがトリガーされる前に Pod をスケジューリングする必要があります。 PV とバックエンドストレージが作成されると、PVC は PV にバインドされます。 この場合、StorageClass で指定されたゾーンとリージョンは有効ではなくなります。 代わりに、Pod がスケジューリングされているノードのゾーンとリージョンがストレージリソースの作成に使用されます。 これにより、計算リソースが優先的にスケジューリングされます。

詳細については、「ボリュームバインディングモード」をご参照ください。

securityGroupId

sg-2ze0b9o8pjjzts4h****

Elastic Container Instance Pod が属するセキュリティグループ。

slsMachineGroup

"test-mg"

Elastic Container Instance Pod が属するマシングループ。 enableLogController パラメーターを true に設定する場合は、このパラメーターを指定する必要があります。

vSwitchIds

vsw-2zeet2ksvw7f14ryz****

Elastic Container Instance Pod が関連付けられている vSwitch の ID。 vSwitch ID はカンマ(,)で区切ります。

vpcId

vpc-2zeghwzptn5zii0w7****

Elastic Container Instance Pod がデプロイされている VPC の ID。

次のサンプルコードは、data セクションを構成する方法を示しています。

data:
  enableClusterIp: "true"
  enableHybridMode: "false"
  enableLinuxArm64Node: "false" 
  enableLogController: "false"
  enablePVCController: "false"
  enablePrivateZone: "false"
  enableReuseSSLKey: "false"
  securityGroupId: sg-2zeeyaaxlkq9sppl****
  selectors: ""
  slsMachineGroup: ""
  vSwitchIds: vsw-2ze23nqzig8inprou****,vsw-2ze94pjtfuj9vaymf****
  vpcId: vpc-2zeghwzptn5zii0w7****