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

Elastic Container Instance:x86 ベースの仮想ノードへのポッドのスケジュール

最終更新日:Dec 28, 2024

コンテナサービス Kubernetes 版(ACK)サーバーレスクラスターの場合、すべてのポッドはデフォルトの x86 ベースの仮想ノード上で実行され、スケジュールする必要はありません。Elastic Compute Service (ECS) インスタンスを実際のノードで使用し、仮想ノードでエラスティックコンテナインスタンスを使用する ACK クラスターの場合、ポッドはデフォルトで実際のノードにスケジュールされます。ビジネス要件に基づいて、ポッドを仮想ノードにスケジュールできます。このトピックでは、ACK クラスター内のポッドを x86 ベースの仮想ノードにスケジュールする方法について説明します。

スケジューリング方法の概要

次のいずれかの方法を使用して、ポッドを x86 ベースの仮想ノードにスケジュールできます。

説明

以下の方法を使用するには、既存のリソースを変更する必要があります。変更により、システムに脆弱性が発生する可能性があります。ECI スケジューラ機能を使用するために eci-profile を構成することをお勧めします。この機能を使用すると、eci-profile で一致させたい名前空間またはポッドラベルを指定できます。指定されたラベルを持つポッドは、エラスティックコンテナインスタンス上で実行するように自動的にスケジュールされます。詳細については、eci-profile の構成を参照してください。

  • ポッドラベルの構成

    少数のポッドをエラスティックコンテナインスタンスとして実行するようにスケジュールする場合は、ポッドに特定のラベルを追加できます。その後、ポッドは x86 ベースの仮想ノード上で実行されます。

  • 名前空間ラベルの構成

    あるクラスのポッドをエラスティックコンテナインスタンスとして実行するようにスケジュールする場合は、名前空間を作成し、その名前空間に特定のラベルを追加できます。その後、名前空間内のすべてのポッドは x86 ベースの仮想ノード上で実行されます。

  • (ACK Pro クラスターのみ)エラスティックコンテナインスタンスベースのエラスティックスケジューリングポリシーの構成

    Alibaba Cloud では、エラスティックコンテナインスタンスベースのエラスティックスケジューリングポリシーを構成できます。サービスをデプロイするときに、アノテーションを追加して、実際のノードまたは仮想ノードのリソースのみを使用するように指定したり、実際のノードのリソースが不足している場合に仮想ノードのリソースを自動的に使用したりするように指定できます。このポリシーは、さまざまなシナリオでのリソーススケーリング要件を満たすことができます。

  • (非推奨)その他の方法

    デフォルトでは、ラベルとテイントは x86 ベースの仮想ノード用に構成されています。ポッドの nodeSelector フィールドと tolerations フィールドを構成して、ポッドが x86 ベースの仮想ノード上で実行されるようにスケジュールできます。また、nodeName フィールドを指定して、ポッドが x86 ベースの仮想ノード上で実行されるようにスケジュールすることもできます。

方法 1: ポッドラベルの構成

alibabacloud.com/eci=true ラベルをポッドに追加して、ポッドがエラスティックコンテナインスタンス上で実行されるようにスケジュールできます。

説明

eci=true ラベルを追加することもできますが、このラベルを追加することはお勧めしません。

手順:

  1. 作成するポッドの YAML 構成ファイルを作成します。

    vim test-pod.yaml

    test-pod.yaml ファイルの例。

    apiVersion: v1
    kind: Pod
    metadata:
      name: nginx1
      labels: 
        alibabacloud.com/eci: "true"   # ラベルを追加します。
    spec:
      containers:
      - image: registry.cn-shanghai.aliyuncs.com/eci_open/nginx:1.14.2
        imagePullPolicy: Always
        name: nginx
  2. ポッドを作成します。

    kubectl create -f test-pod.yaml 

方法 2: 名前空間ラベルの構成

名前空間を作成し、alibabacloud.com/eci=true ラベルを名前空間に追加できます。その後、名前空間内のすべてのポッドはエラスティックコンテナインスタンス上で実行されるようにスケジュールされます。

説明

virtual-node-affinity-injection=enabled ラベルを追加することもできますが、このラベルを追加することはお勧めしません。

手順:

  1. 名前空間を作成します。

    kubectl create ns vk
  2. 名前空間にラベルを追加します。

    kubectl label namespace vk alibabacloud.com/eci=true
  3. 作成するポッドの YAML 構成ファイルを作成します。

    vim test-pod.yaml

    test-pod.yaml ファイルの例。

    apiVersion: v1
    kind: Pod
    metadata:
      name: nginx
      namespace: vk  # 手順 2 でラベルを追加した名前空間を指定します。
    spec:
      containers:
      - image: registry.cn-shanghai.aliyuncs.com/eci_open/nginx:1.14.2
        imagePullPolicy: Always
        name: nginx
  4. ポッドを作成します。

    kubectl create -f test-pod.yaml 

方法 3: エラスティックコンテナインスタンスベースのエラスティックスケジューリングポリシーの構成

ポッドの構成ファイルのメタデータに alibabacloud.com/burst-resource アノテーションを追加して、エラスティックスケジューリングで使用するリソースのタイプを指定できます。アノテーションの有効な値:

  • eci: クラスターの実際のノードのリソースが不足している場合に、エラスティックコンテナインスタンスが使用されます。

  • eci_only: エラスティックコンテナインスタンスのみが使用されます。

重要

この方法は、Kubernetes 1.18 以降を実行する ACK Pro クラスターでのみ使用できます。詳細については、エラスティックコンテナインスタンスベースのスケジューリングの使用を参照してください。

手順:

  1. 作成するデプロイメントの YAML 構成ファイルを作成します。

    vim test-deployment.yaml

    test-deployment.yaml ファイルの例。

    apiVersion: apps/v1
    kind: Deployment
    metadata:
      name: nginx
      labels:
        app: nginx
    spec:
      replicas: 2
      selector:
        matchLabels:
          app: nginx
      template:
        metadata:
          name: nginx
          annotations:
            alibabacloud.com/burst-resource: eci  # エラスティックスケジューリングで使用するリソースのタイプを指定します。
          labels:
            app: nginx
        spec:
          containers:
          - name: nginx
            image: registry.cn-shanghai.aliyuncs.com/eci_open/nginx:1.14.2
            resources:
              limits:
                cpu: 2
              requests:
                cpu: 2
  2. デプロイメントを作成します。

    kubectl create -f test-deployment.yaml 

(非推奨) その他の方法

nodeSelector フィールドと tolerations フィールドを構成したり、nodeName フィールドを指定したりするなど、他の方法を使用して、ポッドがエラスティックコンテナインスタンス上で実行されるようにスケジュールできます。

手順:

  1. 作成するポッドの YAML 構成ファイルを作成します。

    vim test-pod.yaml

    test-pod.yaml ファイルの例

    • nodeSelector フィールドと tolerations フィールドを構成します。

      apiVersion: v1
      kind: Pod
      metadata:
        name: nginx
      spec:
        containers:
        - image: registry.cn-shanghai.aliyuncs.com/eci_open/nginx:1.14.2
          imagePullPolicy: Always
          name: nginx
        nodeSelector:     # nodeSelector を構成します。
          type: virtual-kubelet
        tolerations:      # tolerations を構成します。
        - key: virtual-kubelet.io/provider
          operator: Exists
    • nodeName フィールドを指定します。

      apiVersion: v1
      kind: Pod
      metadata:
        name: nginx
      spec:
        containers:
        - image: registry.cn-shanghai.aliyuncs.com/eci_open/nginx:1.14.2
          imagePullPolicy: Always
          name: nginx
        nodeName: virtual-kubelet-cn-beijing-g # ノード名を指定します。
  2. ポッドを作成します。

    kubectl create -f test-pod.yaml