プリエンプティブル容量を使用したワーカー・ノードのプロビジョニング

Kubernetes Engine (OKE)を使用して作成したクラスタのノード・プールでワーカー・ノードをホストするコンピュート・インスタンスにプリエンプティブル容量を指定する方法をご紹介します。

Kubernetes Engineを使用してノード・プールの配置構成を定義する場合、ノード・プール内のワーカー・ノードをホストするコンピュート・インスタンスの容量タイプとして、プリエンプティブル容量を指定できます。プリエンプティブル容量を指定すると、短時間のみ実行する必要があるワークロードや、容量の再利用時に中断できるワークロードをプリエンプティブル・インスタンスを使用して実行することで、コストを削減できます。

プリエンプティブル・インスタンスの動作は通常のコンピュート・インスタンスと同じですが、他の場所で必要になった場合は容量が再利用され、インスタンスは終了します。ワークロードがフォルト・トレラントで、中断に耐えられる場合は、プリエンプティブル・インスタンスによってコストを削減できます。たとえば、プリエンプティブル・インスタンスを使用して、停止して後で再開できるテストなど、中断を許容できるワークロードのコストを最適化できます。詳細は、プリエンプティブル・インスタンスを参照してください。

ワーカー・ノードをホストするプリエンプティブル・インスタンスが終了すると、Kubernetesエンジンに通知されます。ノード・インスタンスが終了する前に、Kubernetes Engineは次のことを行います。

  • ワーカー・ノードをコード化して、kubeスケジューラがそのノードに新しいポッドを配置しないようにします。
  • ワーカー・ノードをドレインしてポッドを安全に削除し、ポッドのコンテナが正常に終了して必要なクリーンアップを実行するようにします

ワーカー・ノードをホストするプリエンプティブル・インスタンスが終了すると、Kubernetesエンジンは、新しいプリエンプティブル・インスタンスを置換として作成しようとします。Kubernetes Engineが、複数回の試行後に代替のプリエンプティブル・インスタンスを作成できない場合、メッセージが出力されます。

ノード・プールの容量タイプとしてプリエンプティブル容量を選択した場合:

  • Kubernetes Engineは、プリエンプティブル・インスタンスでホストされているワーカー・ノードにKubernetesラベルoci.oraclecloud.com/oke-is-preemptible=trueを自動的に追加します。ラベルをKubernetesノード・セレクタおよびノード・アフィニティ/アンチアフィニティとともに使用して、それらのワーカー・ノードでスケジュールされるポッドを制御できます。Kubernetesのドキュメントの、ノードへのポッドの割当てを参照してください。
  • Kubernetes Engineは、プリエンプティブル・インスタンスでホストされているワーカー・ノードにKubernetes taint oci.oraclecloud.com/oke-is-preemptibleを自動的に追加します。Kubernetesの許容範囲でtaintを使用して、それらのワーカー・ノードでスケジュールされるポッドを制御できます。KubernetesドキュメントのTaints and Tolerationsを参照してください。
  • インスタンスが終了した場合に、ワーカー・ノードをホストしているプリエンプティブル・インスタンスにアタッチされたブート・ボリュームを完全に削除するかどうかを指定できます。

次の点に注意してください:

  • 多くの(すべてではない)コンピュート・シェイプは、プリエンプティブル・インスタンスをサポートしています。特に、プリエンプティブル・インスタンスはベア・メタル・シェイプではサポートされないことに注意してください。ノード・プールのシェイプでプリエンプティブル・インスタンスがサポートされていない場合、容量タイプがプリエンプティブル容量のノード・プールは作成できません。同様に、ノード・プールのシェイプでプリエンプティブル・インスタンスがサポートされていない場合、ノード・プールの容量タイプをプリエンプティブル容量に変更することはできません。
  • 優先されるインスタンスには、多くの制限や制約があります。サポートおよび制限事項を参照してください。
  • ワーカー・ノード・プロパティに対する変更は、新しいワーカー・ノードにのみ適用されます。ノード・プールに関連付けられたキャパシティ・タイプを更新しても、既存のワーカー・ノードのプロパティには影響しません。

プリエンプティブル容量を使用する場合のベストプラクティス

ノード・プールの容量タイプとしてプリエンプティブル容量を選択する場合は、次のベスト・プラクティスを考慮してください。

  • プリエンプティブル・インスタンスは、フォルト・トレラントなコンテナ化されたワークロードに最適です。プリエンプティブル・インスタンスで実行される可能性のあるアプリケーションを設計する場合は、プリエンプティブル容量をいつでも再利用(およびプリエンプティブル・インスタンスが終了)できるものとします。
  • Kubernetesノード・セレクタとノード・アフィニティ/アンチアフィニティを、Kubernetesのタイントと許容範囲とともに使用して、フォルト・トレラントなワークロードのみがプリエンプティブル・インスタンスで実行されるようにスケジュールされるようにします。Kubernetesのドキュメントの、ノードへのポッドの割当てを参照してください。
  • Oracleでは、クラスタ内のプライマリ・ノード・プールの容量タイプとしてプリエンプティブル容量を指定しないことをお薦めします。かわりに、クラスタのプライマリ・ノード・プールを補完する追加のノード・プールにプリエンプティブル容量のみを指定します。
  • Oracleでは、ノード・プールに容量タイプが混在する状況を回避することをお薦めします。同じノード・プール内の複数の容量タイプがサポートされていますが、Oracleでは、ノード・プールの管理を容易にするために、ノード・プール内のすべてのワーカー・ノードに同じ容量タイプを使用することをお薦めします。たとえば、Oracleでは次のことをお薦めします。
    • 1つの可用性ドメインにオンデマンド容量、2番目の可用性ドメインにプリエンプティブル容量を指定しない
    • ノード・プールをスケール・アップしてノードを追加するときに、キャパシティ・タイプをオンデマンド容量からプリエンプティブル容量に変更しないようにします。

コンソールの使用

クラスタの作成とプリエンプティブル容量の指定

  1. 「カスタム作成」ワークフローを使用してクラスタを作成する手順に従います。コンソールを使用した、カスタム作成ワークフローでの明示的に定義された設定によるクラスタの作成を参照してください。
  2. クラスタ内のノード・プールの配置構成を指定する場合:
    1. 最初の可用性ドメインおよびサブネットを指定します:
      • 可用性ドメインの:ワーカー・ノードを配置する可用性ドメインの1つを選択します。
      • フォルト・ドメイン: (オプション)ワーカー・ノードを配置する可用性ドメイン内の1つ以上のフォルト・ドメイン。
      • サブネット:ワーカー・ノードをホストするように構成されたサブネットを選択します。
    2. 「拡張オプションの表示」を選択し、プリエンプティブル・インスタンスを使用してノード・プール内のワーカー・ノードをプロビジョニングすることを指定します:

      • 容量のタイプ: 「プリエンプティブル容量」を選択します、
      • 再要求された場合、アタッチされたブート・ボリュームを完全に削除:容量の再要求時にアタッチされたブート・ボリュームを完全に削除するかどうかを選択します。
    3. オプションで、「別の行」を選択して、配置構成に可用性ドメイン、サブネットおよび容量タイプを追加します。ノード・プールの配置構成で複数の可用性ドメインを指定する場合は、可用性ドメインごとに異なる容量タイプを指定できます。ただし、Oracleでは、ノード・プールの管理を容易にするために、ノード・プール内のすべてのワーカー・ノードに同じ容量タイプを使用することをお薦めします。

ノード・プールの作成とプリエンプティブル容量の指定

  1. 「クラスタ」リスト・ページで、新しいノード・プールを作成するクラスタの名前を選択します。リスト・ページまたはクラスタの検索に関するヘルプが必要な場合は、クラスタのリストを参照してください。
  2. 「リソース」で、「ノード・プール」を選択し、「ノード・プールの追加」を選択して新しいノード・プールを作成し、そのワーカー・ノードに必要なプロパティを指定します。
  3. クラスタ内のノード・プールの配置構成を指定する場合:
    1. 最初の可用性ドメインおよびサブネットを指定します:
      • 可用性ドメインの:ワーカー・ノードを配置する可用性ドメインの1つを選択します。
      • フォルト・ドメイン: (オプション)ワーカー・ノードを配置する可用性ドメイン内の1つ以上のフォルト・ドメイン。
      • サブネット:ワーカー・ノードをホストするように構成されたサブネットを選択します。
    2. 「拡張オプションの表示」を選択し、プリエンプティブル・インスタンスを使用してノード・プール内のワーカー・ノードをプロビジョニングすることを指定します:

      • 容量のタイプ: 「プリエンプティブル容量」を選択します、
      • 再要求された場合、アタッチされたブート・ボリュームを完全に削除:容量の再要求時にアタッチされたブート・ボリュームを完全に削除するかどうかを選択します。
    3. オプションで、「別の行」を選択して、配置構成に可用性ドメイン、サブネットおよび容量タイプを追加します。ノード・プールの配置構成で複数の可用性ドメインを指定する場合は、可用性ドメインごとに異なる容量タイプを指定できます。ただし、Oracleでは、ノード・プールの管理を容易にするために、ノード・プール内のすべてのワーカー・ノードに同じ容量タイプを使用することをお薦めします。

ノード・プールの更新およびプリエンプティブル容量の指定

  1. 「クラスタ」リスト・ページで、変更するクラスタの名前を選択します。リスト・ページまたはクラスタの検索に関するヘルプが必要な場合は、クラスタのリストを参照してください。
  2. 「リソース」で、「ノード・プール」を選択し、変更するノード・プールの名前を選択します。
  3. 「ノード・プール詳細」ページで、「編集」を選択します。
  4. クラスタ内のノード・プールの配置構成を指定する場合:
    1. 最初の可用性ドメインおよびサブネットを指定します:
      • 可用性ドメインの:ワーカー・ノードを配置する可用性ドメインの1つを選択します。
      • フォルト・ドメイン: (オプション)ワーカー・ノードを配置する可用性ドメイン内の1つ以上のフォルト・ドメイン。
      • サブネット:ワーカー・ノードをホストするように構成されたサブネットを選択します。
    2. 「拡張オプションの表示」を選択し、プリエンプティブル・インスタンスを使用してノード・プール内のワーカー・ノードをプロビジョニングすることを指定します:

      • 容量のタイプ: 「プリエンプティブル容量」を選択します、
      • 再要求された場合、アタッチされたブート・ボリュームを完全に削除:容量の再要求時にアタッチされたブート・ボリュームを完全に削除するかどうかを選択します。
    3. オプションで、「別の行」を選択して、配置構成に可用性ドメイン、サブネットおよび容量タイプを追加します。ノード・プールの配置構成で複数の可用性ドメインを指定する場合は、可用性ドメインごとに異なる容量タイプを指定できます。ただし、Oracleでは、ノード・プールの管理を容易にするために、ノード・プール内のすべてのワーカー・ノードに同じ容量タイプを使用することをお薦めします。
  5. 変更内容を保存します。

CLIの使用

CLIの使用の詳細は、コマンド・ライン・インタフェース(CLI)を参照してください。CLIコマンドで使用できるフラグおよびオプションの完全なリストは、コマンドライン・リファレンスを参照してください。

ノード・プールの作成とプリエンプティブル容量の指定

CLIを使用して、プリエンプティブル容量を使用してワーカー・ノードをプロビジョニングするノード・プールを作成するには、--placement-configsパラメータにpreemptibleNodeConfig引数を含めます。

例:

oci ce node-pool create \
--cluster-id ocid1.cluster.oc1.iad.aaaaaaaaaf______jrd \
--name test-node \
--node-image-id ocid1.image.oc1.iad.aaaaaaaa6______nha \
--compartment-id oocid1.compartment.oc1..aaaaaaaay______t6q \
--kubernetes-version v1.21.5 \
--node-shape VM.Standard2.1 \
--placement-configs "[{\"availability-domain\":\"IqDk:US-ASHBURN-AD-2\", \"preemptibleNodeConfig\": {\"preemptionAction\":{\"isPreserveBootVolume\":false, \"type\":\"TERMINATE\"}}, \"subnet-id\":\"ocid1.subnet.oc1.iad.aaaaaaaa2xpk______zva\", \"faultDomains\":[\"FAULT-DOMAIN-3\", \"FAULT-DOMAIN-1\"]}, {\"availability-domain\":\"IqDk:US-ASHBURN-AD-1\", \"preemptibleNodeConfig\": {\"preemptionAction\":{\"isPreserveBootVolume\":false, \"type\":\"TERMINATE\"}}, \"subnet-id\":\"ocid1.subnet.oc1.iad.aaaaaaaauhls______bpq\", \"faultDomains\": [\"FAULT-DOMAIN-1\", \"FAULT-DOMAIN-2\"]}]" \
--size 1 \
--region=us-ashburn-1 \

ノード・プールの配置構成で複数の可用性ドメインを指定する場合は、可用性ドメインごとに異なる容量タイプを指定できます。ただし、Oracleでは、ノード・プールの管理を容易にするために、ノード・プール内のすべてのワーカー・ノードに同じ容量タイプを使用することをお薦めします。

APIの使用

APIの使用およびリクエストの署名の詳細は、REST APIのドキュメントおよびセキュリティ資格証明を参照してください。SDKの詳細は、SDKおよびCLIを参照してください。

ノード・プールの作成または更新時に容量タイプを指定するには、nodeConfigDetailsオブジェクトのplacementConfigs属性を使用します。

ノード・プールの配置構成で複数の可用性ドメインを指定する場合は、可用性ドメインごとに異なる容量タイプを指定できます。ただし、Oracleでは、ノード・プールの管理を容易にするために、ノード・プール内のすべてのワーカー・ノードに同じ容量タイプを使用することをお薦めします。