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

Elastic Container Instance:Podを作成するために特定のECSインスタンスファミリを指定または除外する

最終更新日:Dec 28, 2024

vCPU数とメモリサイズを指定してElastic Container Instance Podを作成する場合、特定のElastic Compute Service(ECS)インスタンスタイプが必要になる場合があります。たとえば、ecs.g6インスタンスファミリのみを使用してPodを作成したいとします。この場合、k8s.aliyun.com/eci-instance-familyアノテーションを追加して、目的のECSインスタンスファミリを指定できます。このトピックでは、Elastic Container Instance Podを作成するときに特定のECSインスタンスファミリを指定または除外する方法について説明します。

機能の説明

vCPU数とメモリサイズを指定してPodを作成する場合、システムは複数のECSインスタンスタイプを使用して作成をサポートします。システムは、vCPUとメモリの仕様要件を満たし、十分なリソースを持つECSインスタンスタイプを自動的に選択します。この場合、k8s.aliyun.com/eci-instance-familyアノテーションを追加して、特定のECSインスタンスファミリを指定または除外できます。

  • 特定のECSインスタンスファミリを指定した場合、システムは指定されたECSインスタンスファミリからのみECSインスタンスタイプを選択します。指定されたECSインスタンスファミリのリソースが不足している場合、システムはPodを作成しません。

  • 特定のECSインスタンスファミリを除外した場合、システムはElastic Container Instanceでサポートされている他のECSインスタンスファミリからインスタンスタイプを選択してPodを作成します。

説明

k8s.aliyun.com/eci-instance-generationアノテーションと共にk8s.aliyun.com/eci-instance-familyアノテーションを使用して、ECSインスタンスタイプをよりきめ細かく制御できます。k8s.aliyun.com/eci-instance-generationは、特定の世代のECSインスタンスファミリを指定または除外します。

次の表に、指定または除外できるECSインスタンスファミリを示します。

アーキテクチャ

ECSインスタンスファミリの世代

ECSインスタンスファミリ

Arm

8

g8y、c8y、およびr8y

x86

8

g8i、c8i、r8i、hfg8i、hfc8i、およびhfr8i

7

g7、c7、r7、hfg7、hfc7、hfr7、およびg7ne

6

g6e、g6、c6e、c6、r6e、r6、hfc6、およびhfg6

5

u1、g5、g5ne、c5、r5、ic5、hfc5、およびhfg5

4

sn2ne、sn1ne、se1ne、およびse1

ECSインスタンスファミリの詳細については、以下のトピックを参照してください。

注意事項

  • Podは、指定または除外されたECSインスタンスファミリに基づいて作成された場合、指定されたvCPUとメモリの仕様ではなく、実際に使用されたECSインスタンスタイプに基づいて課金されます。

    重要

    Podの作成後、kubectl describe podコマンドを実行して、PodのYAMLの詳細を表示できます。k8s.aliyun.com/eci-instance-specフィールドの値は、Podによって使用されるECSインスタンスタイプを示します。Podは、ECSインスタンスタイプに基づいて課金されます。

  • 特定のECSインスタンスファミリを指定または除外する場合、システムは、gn6iファミリなどのGPUアクセラレーテッドインスタンスタイプや、i2gファミリなどのローカルディスクを搭載したインスタンスタイプを含む、特定のインスタンスタイプを自動的に選択できません。特定のECSインスタンスタイプを使用してPodを作成する場合は、インスタンスタイプを直接指定します。詳細については、ECSインスタンスタイプを指定してPodを作成するを参照してください。

  • 特定のECSインスタンスファミリを指定または除外する機能は、vCPU数とメモリサイズを指定してPodを作成する場合にのみ有効になります。ECSインスタンスタイプを指定してPodを作成する場合、この機能は有効になりません。

  • プリエンティブルな弾性コンテナインスタンスを作成する場合、システムは、指定または除外されたインスタンスファミリに基づいて、最適なECSインスタンスタイプを選択します。選択は、インスタンスファミリのソート順とインスタンスタイプの市場価格によって決定され、市場価格はソート順よりも優先されます。ECSインスタンスファミリに厳密な要件がある場合は、1つのインスタンスファミリのみを設定することをお勧めします。

構成の説明

k8s.aliyun.com/eci-instance-familyアノテーションの有効な値は、ECSインスタンスファミリです。次の点に注意してください。

  • Elastic Container Instanceでサポートされている複数のECSインスタンスファミリを構成できます。

    重要

    第8世代ECSインスタンスファミリは、Armアーキテクチャのみをサポートしています。第8世代ECSインスタンスファミリを使用してPodを作成するには、nodeSelectorフィールドを指定して、PodをArmベースの仮想ノードにスケジュールする必要があります。第8世代ECSインスタンスファミリをx86アーキテクチャを使用するものと一緒に使用することはできません。第8世代ECSインスタンスファミリを個別に指定または除外する必要があります。詳細については、例5:ArmベースのECSインスタンスファミリを指定するを参照してください。

  • インスタンスファミリの前にマイナス記号(-)を追加すると、Podの作成時にインスタンスファミリが除外されます。

    たとえば、k8s.aliyun.com/eci-instance-family: "-ecs.c6, -ecs.c5"は、ecs.c6およびecs.c5インスタンスファミリが除外されることを指定します。

  • システムは、指定されたインスタンスファミリをソート順に基づいて選択します。

    たとえば、k8s.aliyun.com/eci-instance-family: "ecs.c6, ecs.c5"アノテーションは、システムが優先的にecs.c6インスタンスファミリを使用することを指定します。vCPUとメモリの仕様要件を満たすecs.c6インスタンスファミリのリソースが不足している場合は、ecs.c5インスタンスファミリが使用されます。ecs.c5インスタンスファミリのリソースも不足している場合は、Podは作成されません。

k8s.aliyun.com/eci-instance-familyアノテーションを使用する前に、次のいずれかの方法でvCPUとメモリの仕様を指定する必要があります。

  • コンテナのlimitsまたはrequestsパラメータを構成します。limitsパラメータを構成することをお勧めします。

  • k8s.aliyun.com/eci-use-specsアノテーションをPodのメタデータに追加します。

例1:特定のECSインスタンスファミリを指定する

パラメータ

効果

  • limitsパラメータを構成して、vCPUとメモリリソース(2 vCPUと4 GiBのメモリ)を定義します。

  • k8s.aliyun.com/eci-instance-family: "ecs.c6, ecs.g6"アノテーションを構成します。このアノテーションは、システムがecs.c6インスタンスファミリ、次にecs.g6インスタンスファミリを使用することを指定します。

システムは、ecs.c6.largeインスタンスタイプ、次にecs.g6.largeインスタンスタイプを使用します。

説明

このサンプル構成の効果は、k8s.aliyun.com/eci-use-specs: "ecs.c6.large,ecs.g6.large"の効果と同じです。

apiVersion: apps/v1
kind: Deployment
metadata:
  name: test
  labels:
    app: test
spec:
  replicas: 1
  selector:
    matchLabels:
      app: test
  template:
    metadata:
      name: test
      labels:
        app: test
        alibabacloud.com/eci: "true" 
      annotations:
        k8s.aliyun.com/eci-instance-family: "ecs.c6,ecs.g6"    # ecs.c6およびecs.g6インスタンスファミリを順番に使用するように指定します。
    spec:
      containers:
      - name: nginx
        image: registry.cn-shanghai.aliyuncs.com/eci_open/nginx:1.14.2
        ports:
        - containerPort: 80
        resources:
          limits:
            cpu: "2"       # 最大vCPU数を指定します。        
            memory: "4Gi"  # 最大メモリサイズを指定します。

例2:特定のECSインスタンスファミリを除外する

パラメータ

効果

  • k8s.aliyun.com/eci-use-specs: "2-4Gi"アノテーションを構成して、vCPUとメモリリソース(2 vCPU、4 GiBのメモリ)を定義します。

  • k8s.aliyun.com/eci-instance-family: "-ecs.hfg6,-ecs.hfg5"アノテーションを構成して、ecs.hfg6およびecs.hfg5インスタンスファミリを除外します。

システムは、Elastic Container Instanceでサポートされ、vCPUとメモリの仕様要件を満たすECSインスタンスファミリ(ecs.hfg6およびecs.hfg5を除く)からインスタンスタイプを選択します。

apiVersion: apps/v1
kind: Deployment
metadata:
  name: test
  labels:
    app: test
spec:
  replicas: 1
  selector:
    matchLabels:
      app: nginx
  template:
    metadata:
      name: nginx-test
      labels:
        app: nginx
        alibabacloud.com/eci: "true" 
      annotations:
        k8s.aliyun.com/eci-use-specs: "2-4Gi"                    # あいまい検索モードでvCPUとメモリの仕様を指定します。
        k8s.aliyun.com/eci-instance-family: "-ecs.hfg6,-ecs.hfg5"    # ecs.hfg6およびecs.hfg5インスタンスファミリを除外します。
    spec:
      containers:
      - name: nginx
        image: registry.cn-shanghai.aliyuncs.com/eci_open/nginx:1.14.2
        ports:
        - containerPort: 80

例3:特定の世代のECSインスタンスファミリを指定し、特定のECSインスタンスファミリを除外する

パラメータ

効果

  • k8s.aliyun.com/eci-use-specs: "2-4Gi"アノテーションを構成して、vCPUとメモリリソース(2 vCPU、4 GiBのメモリ)を定義します。

  • k8s.aliyun.com/eci-instance-generation: "6,5"アノテーションを構成します。このアノテーションは、システムが第6世代ECSインスタンスファミリ、次に第5世代ECSインスタンスファミリを使用することを指定します。

  • k8s.aliyun.com/eci-instance-family: "-ecs.hfg5"アノテーションを構成して、ecs.hfg5インスタンスファミリを除外します。

  • システムは、vCPUとメモリの仕様要件を満たす第6世代ECSインスタンスファミリから優先的にインスタンスタイプを選択します。

  • 第6世代ECSインスタンスファミリのリソースが不足している場合、システムは、Elastic Container Instanceでサポートされている第5世代ECSインスタンスファミリ(ecs.hfg5を除く)からインスタンスタイプを選択します。

apiVersion: apps/v1
kind: Deployment
metadata:
  name: test
  labels:
    app: test
spec:
  replicas: 1
  selector:
    matchLabels:
      app: nginx
  template:
    metadata:
      name: nginx-test
      labels:
        app: nginx
        alibabacloud.com/eci: "true" 
      annotations:
        k8s.aliyun.com/eci-use-specs: "2-4Gi"                   # vCPUとメモリの仕様を指定します。
        k8s.aliyun.com/eci-instance-generation: "6,5"           # 第6世代および第5世代ECSインスタンスファミリを順番に使用するように指定します。
        k8s.aliyun.com/eci-instance-family: "-ecs.hfg5"           # ecs.hfg5インスタンスファミリを除外します。
    spec:
      containers:
      - name: nginx
        image: registry.cn-shanghai.aliyuncs.com/eci_open/nginx:1.14.2
        ports:
        - containerPort: 80

例4:特定の世代のECSインスタンスファミリと特定のECSインスタンスファミリを除外する

パラメータ

効果

  • k8s.aliyun.com/eci-use-specs: "2-4Gi"アノテーションを構成して、vCPUとメモリリソース(2 vCPU、4 GiBのメモリ)を定義します。

  • k8s.aliyun.com/eci-instance-generation: "-5,-4"アノテーションを構成して、第5世代および第4世代ECSインスタンスファミリを除外します。

  • k8s.aliyun.com/eci-instance-family: "-ecs.hfg6"アノテーションを構成して、ecs.hfg6インスタンスファミリを除外します。

システムは、vCPUとメモリの仕様要件を満たす第7世代および第6世代ECSインスタンスファミリ(ecs.hfg6を除く)からインスタンスタイプを選択します。

apiVersion: apps/v1
kind: Deployment
metadata:
  name: test
  labels:
    app: test
spec:
  replicas: 1
  selector:
    matchLabels:
      app: nginx
  template:
    metadata:
      name: nginx-test
      labels:
        app: nginx
        alibabacloud.com/eci: "true" 
      annotations:
        k8s.aliyun.com/eci-use-specs: "2-4Gi"                    # あいまい検索モードでvCPUとメモリの仕様を指定します。
        k8s.aliyun.com/eci-instance-generation: "-5,-4"          # 第5世代および第4世代ECSインスタンスファミリを除外します。
        k8s.aliyun.com/eci-instance-family: "-ecs.hfg6"            # ecs.hfg6インスタンスファミリを除外します。
    spec:
      containers:
      - name: nginx
        image: registry.cn-shanghai.aliyuncs.com/eci_open/nginx:1.14.2
        ports:
        - containerPort: 80

例5:ArmベースのECSインスタンスファミリを指定する

パラメータ

効果

  • k8s.aliyun.com/eci-use-specs: "2-4Gi,4-8Gi"アノテーションを追加して、vCPUとメモリの仕様を指定します(2 vCPUと4 GiBのメモリ、および4 vCPUと8 GiBのメモリが順番に使用されます)。

  • k8s.aliyun.com/eci-instance-family: "ecs.c8y"アノテーションを追加して、ecs.c8yインスタンスファミリを指定します。

  • alibabacloud.com/eci: "true"およびkubernetes.io/arch: arm64フィールドを指定して、PodをArmベースの仮想ノードにスケジュールします。

ecs.c8y.largeおよびecs.c8y.xlargeインスタンスタイプが順番に使用されます。

apiVersion: apps/v1
kind: Deployment
metadata:
  name: test
  labels:
    app: test
spec:
  replicas: 1
  selector:
    matchLabels:
      app: nginx
  template:
    metadata:
      name: nginx-test
      labels:
        app: nginx
        alibabacloud.com/eci: "true" 
      annotations:
        k8s.aliyun.com/eci-use-specs: "2-4Gi,4-8Gi"              # 複数のvCPUとメモリの仕様を指定します。
        k8s.aliyun.com/eci-instance-family: "ecs.c8y"            # ecs.c8yインスタンスファミリを指定します。
    spec:
      containers:
      - name: nginx
        image: registry.cn-shanghai.aliyuncs.com/eci_open/nginx:1.14.2
        ports:
        - containerPort: 80
      nodeSelector:
        kubernetes.io/arch: arm64  # PodをArmベースの仮想ノードにスケジュールします。

例6:無効な設定

特定のECSインスタンスファミリを指定または除外する機能は、vCPU数とメモリサイズを指定してPodを作成する場合にのみ有効になります。ECSインスタンスタイプを指定してPodを作成する場合、この機能は有効になりません。指定されたECSインスタンスファミリが有効にならない場合は、IgnoreInstanceTypeFeaturesイベントが生成されます。

イベント名

タイプ

イベントメッセージ

イベントの説明

IgnoreInstanceTypeFeatures

警告

[eci.containergroup]指定された仕様[%s]がECSインスタンスタイプのみに対応しているため、インスタンスタイプの機能は無視されます。

k8s.aliyun.com/eci-use-specsアノテーションは、ECSインスタンスタイプを定義します。このように、ECSインスタンスファミリを指定する他のアノテーションは無視されます。

次の例では、ecs.c6インスタンスファミリを指定するアノテーションは自動的に無視され、ecs.c5.largeインスタンスタイプのみを使用してPodが作成されます。

apiVersion: apps/v1
kind: Deployment
metadata:
  name: test
  labels:
    app: test
spec:
  replicas: 1
  selector:
    matchLabels:
      app: nginx
  template:
    metadata:
      name: nginx-test
      labels:
        app: nginx
        alibabacloud.com/eci: "true" 
      annotations:
        k8s.aliyun.com/eci-use-specs: "ecs.c5.large"   # 特定のECSインスタンスタイプを指定します。
        k8s.aliyun.com/eci-instance-family: "ecs.c6"   # 特定のECSインスタンスファミリを指定します。この設定は有効になりません。
    spec:
      containers:
      - name: nginx
        image: registry.cn-shanghai.aliyuncs.com/eci_open/nginx:1.14.2
        ports:
        - containerPort: 80

次の図は、PodイベントのIgnoreInstanceTypeFeaturesイベントを示しています。

generation1