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

Container Service for Kubernetes:優先順位ベースのリソーススケジューリングの設定

最終更新日:Apr 27, 2025

優先順位ベースのリソーススケジューリングは、ポッドスケジューリングにおける弾力性の要件を満たすために Alibaba Cloud によって提供されています。ResourcePolicy は、ポッドスケジューリングのためにノードの優先順位を降順で指定します。システムがアプリケーションのポッドをデプロイまたはスケールアウトする場合、ポッドは ResourcePolicy にリストされているノードの優先順位に基づいてノードにスケジュールされます。システムがアプリケーションのポッドをスケールインする場合、ポッドはノードの優先順位に基づいて昇順でノードから削除されます。

重要

kube-scheduler v1.x.x-aliyun-6.4 以降では、ResourcePolicy の ignorePreviousPod パラメーターはデフォルトで False に設定され、ignoreTerminatingPod パラメーターはデフォルトで True に設定されます。上記の パラメーターを使用する既存の ResourcePolicy は、この変更または今後の更新の影響を受けません。

前提条件

  • Kubernetes 1.20.11 以降を実行する Container Service for Kubernetes (ACK) Pro マネージドクラスターが作成されていること。ACK クラスタの Kubernetes バージョンを更新する方法の詳細については、「ACK クラスタの Kubernetes バージョンを更新する」をご参照ください。

  • 必要なスケジューラバージョンは、クラスタの Kubernetes バージョンによって異なります。次の表は、さまざまな Kubernetes バージョンに必要なスケジューラバージョンを示しています。さまざまなスケジューラバージョンの機能の詳細については、「kube-scheduler」をご参照ください。

    Kubernetes バージョン

    スケジューラバージョン

    1.20

    1.20.4-ack-7.0 以降

    1.22

    1.22.15-ack-2.0 以降

    1.24 以降

    すべてのバージョンがサポートされています

  • ack-virtual-node がデプロイされていること (Elastic Container Instance を使用する 場合)。詳細については、「ACK クラスタで Elastic Container Instance を使用する」をご参照ください。

制限事項

  • 優先順位ベースのリソーススケジューリングは、ポッド削除コスト機能と相互排他です。ポッド削除コスト機能の詳細については、「Pod deletion cost」をご参照ください。

  • 優先順位ベースのリソーススケジューリングと Elastic Container Instance ベースのスケジューリングを同時に使用することはできません。Elastic Container Instance ベースのスケジューリングの詳細については、「Elastic Container Instance ベースのスケジューリングを使用する」をご参照ください。

  • この機能は BestEffort ポリシーを使用しており、システムがアプリケーションのポッドをスケールインする際に、ノードの優先順位に基づいて昇順でポッドがノードから削除されることは保証されません。

  • max パラメーターは、クラスタが Kubernetes 1.22 以降を実行し、クラスタにインストールされているスケジューラのバージョンが 5.0 以降の場合にのみ使用できます。

  • この機能をエラスティックノードプールと共に使用する場合、無効なノードがエラスティックノードプールに追加される可能性があります。エラスティックノードプールがユニットに含まれていることを確認してください。ユニットの max パラメーターは指定しないでください。

  • 5.0 より前のスケジューラバージョンを使用する場合、またはクラスタの Kubernetes バージョンが 1.20 以前の場合、ResourcePolicy が作成される前に既に存在するポッドは、スケールインアクティビティ中に優先されます。

  • 6.1 より前のスケジューラバージョンを使用する場合、またはクラスタの Kubernetes バージョンが 1.20 以前の場合、ResourcePolicy によって選択されたすべてのポッドが削除されるまで、ResourcePolicy を変更しないでください。

優先順位ベースのリソーススケジューリングを設定する方法

次のテンプレートを使用して ResourcePolicy を作成します。

apiVersion: scheduling.alibabacloud.com/v1alpha1
kind: ResourcePolicy
metadata:
  name: test
  namespace: default
spec:
  selector:
    key1: value1
  strategy: prefer
  units:
  - nodeSelector:
      unit: first
    podLabels:
      key1: value1
    podAnnotations:
      key1: value1
    resource: ecs
  - nodeSelector:
      unit: second
    max: 10
    resource: ecs
  - resource: eci
  # オプション、詳細設定
  preemptPolicy: AfterAllUnits
  ignorePreviousPod: false
  ignoreTerminatingPod: true
  matchLabelKeys:
  - pod-template-hash
  whenTryNextUnits:
    policy: TimeoutOrExceedMax
    timeout: 1m
  • selector: 名前空間内のポッドを選択するために使用されるセレクター。ResourcePolicy は、選択されたポッドに適用されます。この例では、key1=value1ラベル を持つポッドが選択されます。selector が空の場合、ResourcePolicy は名前空間内のすべてのポッドに有効になります。

  • strategy: スケジューリングポリシー。prefer に設定します。

  • units: スケジュール可能なユニット。スケールアウトアクティビティでは、ポッドは units の下にリストされているノードの優先順位に基づいて降順でノードにスケジュールされます。スケールインアクティビティでは、ポッドはノードの優先順位に基づいて昇順でノードから削除されます。

    • resource: エラスティックリソースのタイプ。有効な値: eciecselasticacselastic は、クラスタが 1.24 以降の Kubernetes バージョンを実行し、スケジューラバージョンが 6.4.3 以降の場合に使用できます。acs は、クラスタが 1.26 以降の Kubernetes バージョンを実行し、スケジューラバージョンが 6.7.1 以降の場合に使用できます。

      説明

      elastic タイプは非推奨になっています。PodLabels で k8s.aliyun.com/resource-policy-wait-for-ecs-scaling: "true" を設定して、ノードプールの自動スケーリングを有効にすることをお勧めします。

      説明

      デフォルトでは、acs タイプは自動的に alibabacloud.com/compute-class: defaultalibabacloud.com/compute-class: general-purpose のラベルをポッドに追加します。PodLabels で異なる値を指定することで、デフォルト値をオーバーライドできます。PodAnnotation に alpha.alibabacloud.com/compute-qos-strategy が含まれている場合、alibabacloud.com/compute-class: default ラベルはデフォルトでは追加されません。

      重要

      6.8.3 より前のスケジューラバージョンでは、複数の acs ユニットを同時に使用することはサポートされていません。

    • nodeSelector: 指定された node ラベル を持つノードを選択するために使用されるセレクター。このパラメーターは、resource パラメーターが ecs に設定されている場合にのみ有効になります。

    • max (スケジューラ v5.0 以降で使用可能): 現在のユニットにスケジュールできるレプリケートされたポッドの最大数を指定します。

    • podAnnotations: データ型は map[string]string{} です。podAnnotations で設定されたキーと値のペアは、スケジューラによってポッドに適用されます。これらのキーと値のペアを持つポッドのみがこのユニットのポッド数に含まれます。

    • podLabels: データ型は map[string]string{} です。podLabels で設定されたキーと値のペアは、スケジューラによってポッドに適用されます。これらのキーと値のペアを持つポッドのみがこのユニットのポッド数に含まれます。

      説明

      ユニットの PodLabelsk8s.aliyun.com/resource-policy-wait-for-ecs-scaling: "true" が含まれており、ユニットの現在のポッド数が指定された最大値を下回っている場合、スケジューラはポッドを現在のユニットで待機させます。待機時間は whenTryNextUnits で設定できます。さらに、k8s.aliyun.com/resource-policy-wait-for-ecs-scaling: "true" はポッドには適用されません。ポッドがこのラベルを持っている必要はありません。

  • preemptPolicy (スケジューラバージョンが 6.1 以降の場合に使用可能): ResourcePolicy に複数の units が含まれている場合に使用されるプリエンプションポリシー。このポリシーは、スケジューラがユニットにポッドをスケジュールできなかった場合にノードをプリエンプションするかどうかを指定します。プリエンプションポリシーを BeforeNextUnit に設定すると、スケジューラはユニットにポッドをスケジュールできなかった場合にノードのプリエンプションを試みます。プリエンプションポリシーを AfterAllUnits に設定すると、スケジューラはすべてのユニットにポッドをスケジュールできなかった場合にのみノードのプリエンプションを試みます。デフォルトは AfterAllUnits です。

    プリエンプションを有効にするには、ACK Scheduler パラメーターを設定します。
  • ignorePreviousPod (スケジューラバージョンが 6.1 以降の場合に使用可能): このパラメーターは、units セクションの max パラメーターと共に使用する必要があります。このパラメーターが true に設定されている場合、max パラメーターの値には、ResourcePolicy が作成される前にスケジュールされたポッドは含まれません。

  • ignoreTerminatingPod (スケジューラバージョンが 6.1 以降の場合に使用可能): このパラメーターは、units セクションの max パラメーターと共に使用する必要があります。このパラメーターが true に設定されている場合、max パラメーターの値には、Terminating 状態のポッドは含まれません。

  • matchLabelKeys (スケジューラバージョンが 6.2 以降の場合に使用可能): このパラメーターは、units セクションの max パラメーターと共に使用する必要があります。このパラメーターは、max パラメーターで指定されたポッドのラベルキーと一致します。matchLabelKeys パラメーターを設定した後、指定されたラベルキーを持たないポッドはスケジュールされません。

  • whenTryNextUnits (クラスタの Kubernetes バージョンが 1.24 以降で、スケジューラバージョンが 6.4 以降の場合に使用可能): このパラメーターは、ポッドが任意の条件下で後続のユニットのリソースを使用できることを指定します。

    • policy: ポッドスケジューリングポリシー。有効な値: ExceedMaxLackResourceAndNoTerminatingTimeoutOrExceedMaxLackResourceOrExceedMax (デフォルト値)。

      • ExceedMax: 現在のユニットに Max 制限が設定されていない場合、または現在のユニットのポッド数が Max 制限を超えている場合、ポッドは次のレベルのリソースを使用できます。このポリシーは、Auto Scaling および Elastic Container Instance と共に使用して、Auto Scaling を使用してノードプールをスケーリングすることを優先できます。

        重要
        • このポリシーを実装した後、オートスケーラーがノードプールにノードを追加できない状態が長時間続くと、ポッドは pending 状態のままになる可能性があります。

        • オートスケーラーは ResourcePolicy の Max 制限を認識しません。実際に追加されるインスタンスの数は、Max 制限を超える可能性があります。この問題は、今後のバージョンで解決される予定です。

      • TimeoutOrExceedMax: 次のいずれかの条件が満たされた場合:

        • 現在のユニットに Max 制限が設定されており、ユニットのポッド数が Max 制限よりも少ない。

        • 現在のユニットに Max 制限が設定されておらず、ユニットの PodLabelsk8s.aliyun.com/resource-policy-wait-for-ecs-scaling: "true" が含まれている。

        現在のユニットにポッドスケジューリングのための十分なリソースがない場合、現在のユニットのポッドはリソースを待機します。最大待機時間は timeout の値と同じです。このポリシーは、Auto Scaling および Elastic Container Instance と共に使用して、Auto Scaling を使用してノードプールをスケーリングすることを優先し、タイムアウト期間が終了したときに Elastic Container Instance を使用できます。

      • 重要

        タイムアウト期間が終了する前に新しく追加されたノードが Ready 状態に達せず、ポッドが NotReady taint を許容するように設定されていない場合、ポッドは引き続き Elastic Container Instance にスケジュールされます。

      • LackResourceOrExceedMax: 現在のユニットのポッド数が Max 制限以上であるか、ユニットにアイドルリソースがない場合、ポッドは次のレベルのリソースを使用できます。これはデフォルトのポリシーであり、ほとんどのシナリオに適しています。

      • LackResourceAndNoTerminating: 現在のユニットのポッド数が Max 制限以上であるか、ユニットにアイドルリソースがなく、ユニットに Terminating ポッドが存在しない場合、ポッドは次のレベルのリソースを使用できます。このポリシーは、ローリングアップデートポリシーと共に使用して、現在のユニットに Terminating ポッドが存在する場合に新しいポッドが後続のユニットにスケジュールされるのを防ぐことができます。

    • timeout: timeoutOrExceedMaxPolicy ポリシーが使用される場合、このパラメーターはタイムアウト期間を指定します。このパラメーターが空の文字列に設定されている場合、タイムアウト期間は 15 分です。

例 1: ポッドを指定されたノードプールにスケジュールする

Deployment のポッドを特定のノードプール (例: ノードプール A とノードプール B) にスケジュールするとします。ノードプール A の使用を優先し、ノードプール A の計算リソースが不足している場合にのみポッドをノードプール B にスケジュールするとします。スケールインアクティビティでは、最初にノードプール B のノードからポッドを削除するとします。この例では、ノードプール A には cn-beijing.10.0.3.137cn-beijing.10.0.3.138 のノードが含まれています。ノードプール B には cn-beijing.10.0.6.47cn-beijing.10.0.6.46 のノードが含まれています。これらの各ノードには、2 vCPU と 4 GB のメモリがあります。優先順位ベースのリソーススケジューリングを設定するには、次の手順を実行します。

  1. 次のテンプレートを使用して ResourcePolicy を作成します。

    apiVersion: scheduling.alibabacloud.com/v1alpha1
    kind: ResourcePolicy
    metadata:
      name: nginx
      namespace: default
    spec:
      selector:
        app: nginx # ResourcePolicy を適用するポッドのラベルを指定する必要があります。
      strategy: prefer
      units:
      - resource: ecs
        nodeSelector:
          alibabacloud.com/nodepool-id: np7ec79f2235954e879de07b780058****
      - resource: ecs
        nodeSelector:
          alibabacloud.com/nodepool-id: npab2df797738644e3a7b7cbf532bb****
    説明

    ノードプールの ID を表示するには、ACK コンソールのクラスタの詳細ページで [ノード] > [ノードプール] を選択します。詳細については、「ノードプールを作成する」をご参照ください。

  2. 次のテンプレートを使用して、2 つのポッドをプロビジョニングする Deployment を作成します。

    apiVersion: apps/v1
    kind: Deployment
    metadata:
      name: nginx
      labels:
        app: nginx
    spec:
      replicas: 2
      selector:
        matchLabels:
          app: nginx
      template:
        metadata:
          name: nginx
          labels:
            app: nginx # ポッドラベルは、ResourcePolicy の selector に指定したものと同じである必要があります。
        spec:
          containers:
          - name: nginx
            image: nginx
            resources:
              limits:
                cpu: 2
              requests:
                cpu: 2
  3. NGINX アプリケーションをデプロイし、ポッドをクエリします。

    1. 次のコマンドを実行して、NGINX アプリケーションをデプロイします。

      kubectl apply -f nginx.yaml

      予期される出力:

      deployment.apps/nginx created
    2. 次のコマンドを実行して、ポッドをクエリします。

      kubectl get pods -o wide

      予期される出力:

      NAME                    READY   STATUS    RESTARTS   AGE   IP               NODE                    NOMINATED NODE   READINESS GATES
      nginx-9cdf7bbf9-b****   1/1     Running   0          17s   172.29.112.216   cn-beijing.10.0.3.137   <none>           <none>
      nginx-9cdf7bbf9-k****   1/1     Running   0          17s   172.29.113.24    cn-beijing.10.0.3.138   <none>           <none>

      出力は、2 つのポッドがノードプール A にスケジュールされていることを示しています。

  4. NGINX アプリケーションのポッドをスケールアウトします。

    1. 次のコマンドを実行して、ポッドの数を 4 に増やします。

      kubectl scale deployment nginx --replicas 4

      予期される出力:

      deployment.apps/nginx scaled
    2. 次のコマンドを実行して、ポッドのステータスをクエリします。

      kubectl get pods -o wide

      予期される出力:

      NAME                    READY   STATUS    RESTARTS   AGE    IP               NODE                    NOMINATED NODE   READINESS GATES
      nginx-9cdf7bbf9-b****   1/1     Running   0          101s   172.29.112.216   cn-beijing.10.0.3.137   <none>           <none>
      nginx-9cdf7bbf9-k****   1/1     Running   0          101s   172.29.113.24    cn-beijing.10.0.3.138   <none>           <none>
      nginx-9cdf7bbf9-m****   1/1     Running   0          18s    172.29.113.156   cn-beijing.10.0.6.47    <none>           <none>
      nginx-9cdf7bbf9-x****   1/1     Running   0          18s    172.29.113.89    cn-beijing.10.0.6.46    <none>           <none>

      出力は、ノードプール A の計算リソースが不足しているため、新しいポッドがノードプール B にスケジュールされていることを示しています。

  5. NGINX アプリケーションのポッドをスケールインします。

    1. 次のコマンドを実行して、ポッドの数を 2 に減らします。

      kubectl scale deployment nginx --replicas 2

      予期される出力:

      deployment.apps/nginx scaled
    2. 次のコマンドを実行して、ポッドのステータスをクエリします。

      kubectl get pods -o wide

      予期される出力:

      NAME                    READY   STATUS        RESTARTS   AGE     IP               NODE                    NOMINATED NODE   READINESS GATES
      nginx-9cdf7bbf9-b****   1/1     Running       0          2m41s   172.29.112.216   cn-beijing.10.0.3.137   <none>           <none>
      nginx-9cdf7bbf9-k****   1/1     Running       0          2m41s   172.29.113.24    cn-beijing.10.0.3.138   <none>           <none>
      nginx-9cdf7bbf9-m****   0/1     Terminating   0          78s     172.29.113.156   cn-beijing.10.0.6.47    <none>           <none>
      nginx-9cdf7bbf9-x****   0/1     Terminating   0          78s     172.29.113.89    cn-beijing.10.0.6.46    <none>           <none>

      出力は、ノードプール B のノードで実行されているポッドが削除されていることを示しています。

例 2: ポッドを ECS インスタンスと Elastic Container Instance にスケジュールする

Deployment のポッドを、サブスクリプション Elastic Compute Service (ECS) インスタンス、従量課金 ECS インスタンス、Elastic Container Instance など、複数のタイプのリソースにスケジュールするとします。リソースコストを削減するために、サブスクリプション ECS インスタンス > 従量課金 ECS インスタンス > Elastic Container Instance の優先順位に基づいてポッドをリソースにスケジュールするとします。スケールインアクティビティでは、Elastic Container Instance、従量課金 ECS インスタンス、サブスクリプション ECS インスタンスの順序でこれらのリソースからポッドを削除するとします。この例では、各 ECS インスタンスには 2 vCPU と 4 GB のメモリがあります。優先順位ベースのリソーススケジューリングを設定するには、次の手順を実行します。

  1. 次のコマンドを実行して、ノードに異なる課金方法を示す labels を追加します。ノードプールを使用して、ノードに labels を自動的に追加することもできます。

    kubectl label node cn-beijing.10.0.3.137 paidtype=subscription
    kubectl label node cn-beijing.10.0.3.138 paidtype=subscription
    kubectl label node cn-beijing.10.0.6.46 paidtype=pay-as-you-go
    kubectl label node cn-beijing.10.0.6.47 paidtype=pay-as-you-go
  2. 次のテンプレートを使用して ResourcePolicy を作成します。

    apiVersion: scheduling.alibabacloud.com/v1alpha1
    kind: ResourcePolicy
    metadata:
      name: nginx
      namespace: default
    spec:
      selector:
        app: nginx # ResourcePolicy を適用するポッドのラベルを指定する必要があります。
      strategy: prefer
      units:
      - resource: ecs
        nodeSelector:
          paidtype: subscription
      - resource: ecs
        nodeSelector:
          paidtype: pay-as-you-go
      - resource: eci
  3. 次のテンプレートを使用して、2 つのポッドをプロビジョニングするデプロイメントを作成します。

    apiVersion: apps/v1
    kind: Deployment
    metadata:
      name: nginx
      labels:
        app: nginx
    spec:
      replicas: 2
      selector:
        matchLabels:
          app: nginx
      template:
        metadata:
          name: nginx
          labels:
            app: nginx # ポッドラベルは、ResourcePolicy のセレクターに指定したものと同じである必要があります。
        spec:
          containers:
          - name: nginx
            image: nginx
            resources:
              limits:
                cpu: 2
              requests:
                cpu: 2
  4. NGINX アプリケーションをデプロイし、ポッドをクエリします。

    1. 次のコマンドを実行して、NGINX アプリケーションをデプロイします。

      kubectl apply -f nginx.yaml

      予期される出力:

      deployment.apps/nginx created
    2. 次のコマンドを実行して、ポッドをクエリします。

      kubectl get pods -o wide

      予期される出力:

      NAME                    READY   STATUS    RESTARTS   AGE   IP               NODE                    NOMINATED NODE   READINESS GATES
      nginx-9cdf7bbf9-b****   1/1     Running   0          66s   172.29.112.215   cn-beijing.10.0.3.137   <none>           <none>
      nginx-9cdf7bbf9-r****   1/1     Running   0          66s   172.29.113.23    cn-beijing.10.0.3.138   <none>           <none>

      出力は、paidtype=subscription ラベルを持つノードに 2 つのポッドがスケジュールされていることを示しています。

  5. NGINX アプリケーションのポッドをスケールアウトします。

    1. 次のコマンドを実行して、ポッドの数を 4 つに増やします。

      kubectl scale deployment nginx --replicas 4

      予期される出力:

      deployment.apps/nginx scaled
    2. 次のコマンドを実行して、ポッドのステータスをクエリします。

      kubectl get pods -o wide

      予期される出力:

      NAME                    READY   STATUS    RESTARTS   AGE     IP               NODE                    NOMINATED NODE   READINESS GATES
      nginx-9cdf7bbf9-4****   1/1     Running   0          16s     172.29.113.155   cn-beijing.10.0.6.47    <none>           <none>
      nginx-9cdf7bbf9-b****   1/1     Running   0          3m48s   172.29.112.215   cn-beijing.10.0.3.137   <none>           <none>
      nginx-9cdf7bbf9-f****   1/1     Running   0          16s     172.29.113.88    cn-beijing.10.0.6.46    <none>           <none>
      nginx-9cdf7bbf9-r****   1/1     Running   0          3m48s   172.29.113.23    cn-beijing.10.0.3.138   <none>           <none>

      paidtype=subscription ラベルを持つノードが不足しているため、paidtype=pay-as-you-go ラベルを持つノードに新しいポッドがスケジュールされていることが出力に示されています。

    3. 次のコマンドを実行して、ポッドの数を 6 つに増やします。

      kubectl scale deployment nginx --replicas 6

      予期される出力:

      deployment.apps/nginx scaled
    4. 次のコマンドを実行して、ポッドのステータスをクエリします。

      kubectl get pods -o wide

      予期される出力:

      NAME                    READY   STATUS    RESTARTS   AGE     IP               NODE                           NOMINATED NODE   READINESS GATES
      nginx-9cdf7bbf9-4****   1/1     Running   0          3m10s   172.29.113.155   cn-beijing.10.0.6.47           <none>           <none>
      nginx-9cdf7bbf9-b****   1/1     Running   0          6m42s   172.29.112.215   cn-beijing.10.0.3.137          <none>           <none>
      nginx-9cdf7bbf9-f****   1/1     Running   0          3m10s   172.29.113.88    cn-beijing.10.0.6.46           <none>           <none>
      nginx-9cdf7bbf9-r****   1/1     Running   0          6m42s   172.29.113.23    cn-beijing.10.0.3.138          <none>           <none>
      nginx-9cdf7bbf9-s****   1/1     Running   0          36s     10.0.6.68        virtual-kubelet-cn-beijing-j   <none>           <none>
      nginx-9cdf7bbf9-v****   1/1     Running   0          36s     10.0.6.67        virtual-kubelet-cn-beijing-j   <none>           <none>

      ECS ノードが不足しているため、新しいポッドがエラスティックコンテナインスタンスにスケジュールされていることが出力に示されています。

  6. NGINX アプリケーションのポッドをスケールインします。

    1. 次のコマンドを実行して、ポッドの数を 4 つに減らします。

      kubectl scale deployment nginx --replicas 4

      予期される出力:

      deployment.apps/nginx scaled
    2. 次のコマンドを実行して、ポッドのステータスをクエリします。

      kubectl get pods -o wide

      予期される出力:

      NAME                    READY   STATUS        RESTARTS   AGE     IP               NODE                           NOMINATED NODE   READINESS GATES
      nginx-9cdf7bbf9-4****   1/1     Running       0          4m59s   172.29.113.155   cn-beijing.10.0.6.47           <none>           <none>
      nginx-9cdf7bbf9-b****   1/1     Running       0          8m31s   172.29.112.215   cn-beijing.10.0.3.137          <none>           <none>
      nginx-9cdf7bbf9-f****   1/1     Running       0          4m59s   172.29.113.88    cn-beijing.10.0.6.46           <none>           <none>
      nginx-9cdf7bbf9-r****   1/1     Running       0          8m31s   172.29.113.23    cn-beijing.10.0.3.138          <none>           <none>
      nginx-9cdf7bbf9-s****   1/1     Terminating   0          2m25s   10.0.6.68        virtual-kubelet-cn-beijing-j   <none>           <none>
      nginx-9cdf7bbf9-v****   1/1     Terminating   0          2m25s   10.0.6.67        virtual-kubelet-cn-beijing-j   <none>           <none>

      出力は、エラスティックコンテナインスタンスで実行されているポッドが削除されたことを示しています。

    3. 次のコマンドを実行して、ポッドの数を 2 つに減らします。

      kubectl scale deployment nginx --replicas 2

      予期される出力:

      deployment.apps/nginx scaled
    4. 次のコマンドを実行して、ポッドのステータスをクエリします。

      kubectl get pods -o wide

      予期される出力:

      NAME                    READY   STATUS        RESTARTS   AGE     IP               NODE                    NOMINATED NODE   READINESS GATES
      nginx-9cdf7bbf9-4****   0/1     Terminating   0          6m43s   172.29.113.155   cn-beijing.10.0.6.47    <none>           <none>
      nginx-9cdf7bbf9-b****   1/1     Running       0          10m     172.29.112.215   cn-beijing.10.0.3.137   <none>           <none>
      nginx-9cdf7bbf9-f****   0/1     Terminating   0          6m43s   172.29.113.88    cn-beijing.10.0.6.46    <none>           <none>
      nginx-9cdf7bbf9-r****   1/1     Running       0          10m     172.29.113.23    cn-beijing.10.0.3.138   <none>           <none>

      出力は、paidtype=pay-as-you-go ラベルを持つノード上のポッドが削除されたことを示しています。

    5. 次のコマンドを実行して、ポッドのステータスをクエリします。

      kubectl get pods -o wide

      予期される出力:

      NAME                    READY   STATUS    RESTARTS   AGE   IP               NODE                    NOMINATED NODE   READINESS GATES
      nginx-9cdf7bbf9-b****   1/1     Running   0          11m   172.29.112.215   cn-beijing.10.0.3.137   <none>           <none>
      nginx-9cdf7bbf9-r****   1/1     Running   0          11m   172.29.113.23    cn-beijing.10.0.3.138   <none>           <none>

      出力は、paidtype=subscription ラベルを持つノード上でのみポッドが実行されていることを示しています。

関連トピック

  • ACK クラスターにサービスをデプロイする際に、許容とノードアフィニティを設定して、スケジューラが Elastic Compute Service (ECS) インスタンスまたは Elastic Container Instance のみを使用するようにするか、ECS インスタンスが不足している場合にスケジューラが Elastic Container Instance を自動的に適用するようにすることができます。さまざまなスケジューリングポリシーを設定して、さまざまなシナリオでリソースをスケーリングできます。詳細については、「Elastic Container Instance ベースのスケジューリングを設定する」をご参照ください。

  • 高可用性と高パフォーマンスは、分散ジョブにとって不可欠です。ACK Pro マネージドクラスターでは、Kubernetes ネイティブのスケジューリングセマンティクスを使用して、高可用性を実現するためにゾーン全体に分散ジョブを分散させることができます。また、Kubernetes ネイティブのスケジューリングセマンティクスを使用して、高パフォーマンスを実現するためにアフィニティ設定に基づいて特定のゾーンに分散ジョブをデプロイすることもできます。詳細については、「Elastic Container Instance ベースのポッドをゾーン全体に分散し、アフィニティを設定する」をご参照ください。