マネージド型ノードグループ - Amazon EKS

マネージド型ノードグループ

Amazon EKS マネージド型ノードグループは、Amazon EKS Kubernetes クラスターのノード (Amazon EC2 インスタンス) のプロビジョニングとライフサイクル管理を自動化します。

Amazon EKS マネージド型ノードグループでは、Kubernetes アプリケーションを実行するためのコンピューティング性能を提供する Amazon EC2 インスタンスを個別にプロビジョニングまたは登録する必要はありません。1 回の操作で、クラスターのノードを作成、自動的に更新、または終了できます。AWS アカウントのAmazon EKS に最適化された、最新の AMI を使用してノードが実行されます。ノードを更新し、終了させることで、ノードを自動的かつ適切にドレーンし、アプリケーションを利用できる状態にしておきます。

すべてのマネージド型ノードは、Amazon EKS によって管理される Amazon EC2 Auto Scaling グループの一部としてプロビジョニングされます。インスタンスや Auto Scaling グループを含むすべてのリソースは、AWS アカウント内で実行されます。各ノードグループは、定義された複数のアベイラビリティーゾーンで実行できます。

Amazon EKS コンソール、eksctl、AWS CLI、AWS API、または AWS CloudFormation を含む Infrastructure as Code ツールを使用し、新規または既存のクラスターにマネージド型ノードグループを追加できます。マネージド型ノードグループの一部として起動されたノードは、自動的に Kubernetes Cluster Autoscaler によって自動検出用にタグ付けされます。ノードグループを使用して、Kubernetes ラベルをノードに適用し、いつでも更新できます。

Amazon EKS マネージド型ノードグループの使用に追加料金はかかりません。お支払いいただくのはプロビジョニングした AWS リソースの分だけです。これには、Amazon EC2 インスタンス、Amazon EBS ボリューム、Amazon EKS クラスター時間、その他の AWS インフラストラクチャが含まれます。最低料金や前払いの義務は発生しません。

新しい Amazon EKS クラスターおよびマネージド型ノードグループの使用を開始するには、「Amazon EKS の使用開始 – AWS マネジメントコンソールと AWS CLI」を参照してください。

既存のクラスターにマネージド型ノードグループを追加するには、「マネージド型ノードグループの作成」を参照してください。

マネージド型ノードグループの概念

  • Amazon EKS マネージド型ノードグループは、Amazon EC2 インスタンスを作成し、管理します。

  • すべてのマネージド型ノードは、Amazon EKS によって管理される Amazon EC2 Auto Scaling グループの一部としてプロビジョニングされます。さらに、Amazon EC2 インスタンスや Auto Scaling グループを含むすべてのリソースは、AWS アカウント内で実行されます。

  • マネージド型ノードグループの Auto Scaling グループは、グループの作成時に指定するすべてのサブネットにまたがります。

  • Amazon EKS は、Kubernetes Cluster Autoscaler を使用するように設定されるようにマネージド型ノードグループリソースをタグ付けします。

    重要

    Amazon EBS ボリュームによってバックアップされ、Kubernetes Cluster Autoscaler を使用する複数のアベイラビリティーゾーンにわたってステートフルアプリケーションを実行している場合、それぞれが単一のアベイラビリティーゾーンにスコープされる複数のノードグループを設定する必要があります。また、--balance-similar-node-groups 機能を有効にする必要があります。

  • デフォルトでは、マネージド型ノードグループのインスタンスは、Amazon EKS 最適化 Amazon Linux 2 AMI の最新バージョンを使用します。Amazon EKS 最適化 Amazon Linux 2 AMI の標準バリアントおよび GPU バリアントを選択できます。起動テンプレートを使用してデプロイする場合は、カスタムの AMI を使用することもできます。詳細については、「起動テンプレートのサポート」を参照してください。

  • Amazon EKS は、マネージド型ノードグループで CVE およびセキュリティパッチの責任共有モデルに従います。マネージド型ノードが Amazon EKS 最適化 AMI を実行する場合、バグや問題が報告されると、Amazon EKS が AMI のパッチ適用バージョンの構築を担当します。修正を公開できます。ただし、これらのパッチが適用された AMI バージョンのマネージド型ノードグループへのデプロイはユーザーが担当します。マネージド型ノードでカスタム AMI を実行する場合、バグや問題が報告され、AMI をデプロイする場合は、ユーザーがパッチ適用バージョンの構築を担当します。詳細については、「マネージド型ノードグループの更新」を参照してください。

  • Amazon EKS マネージド型ノードグループは、パブリックサブネットとプライベートサブネットの両方で起動できます。2020 年 4月 22 日 以降にパブリックサブネットでマネージド型ノードグループを起動した場合、インスタンスがクラスターに正常に参加するには、サブネットで MapPublicIpOnLaunch を true に設定する必要があります。パブリックサブネットが eksctl を使用して作成されたか、2020 年 3 月 26 日以降に Amazon EKS が AWS CloudFormation テンプレートを販売した場合は、この設定はすでに true に設定されています。パブリックサブネットが 2020 年 3 月 26 日 より前に作成されている場合は、設定を手動で変更する必要があります。詳細については、「サブネットの IPv4 アドレス指定属性の変更」を参照してください。

  • プライベートサブネットで VPC エンドポイントを使用する場合は、com.amazonaws.region.ecr.apicom.amazonaws.region.ecr.dkr のエンドポイントおよび Amazon S3 のゲートウェイエンドポイントを作成する必要があります。詳細については、「Amazon ECR インターフェイス VPC エンドポイント (AWS PrivateLink)」をご参照ください。

  • マネージド型ノードグループは、AWS Outposts、AWS Wavelength または AWS Local Zones にはデプロイできません。

  • 1 つのクラスター内に複数のマネージド型ノードグループを作成できます。例えば、一部のワークロード用に、標準 Amazon EKS 最適化 Amazon Linux 2 AMI を使用するノードグループを作成し、GPU サポートを必要とするワークロード用に GPU バリアントを使用する別のノードグループを作成できます。

  • マネージド型ノードグループで正常性の問題が発生した場合は、Amazon EKS から問題の診断に役立つエラーメッセージが返されます。詳細については、「マネージド型ノードグループのエラー」を参照してください。

  • Amazon EKS は、マネージド型ノードグループインスタンスに Kubernetes ラベルを追加します。これらの Amazon EKS 提供のラベルには、プレフィックス eks.amazonaws.com が付きます。

  • Amazon EKS は、終了または更新時に Kubernetes API を使用してノードを自動的にドレーンします。更新は、ポッドに設定したポッド中断予算を優先します。

  • Amazon EKS マネージド型ノードグループの使用に、追加料金はかかりません。プロビジョニングした AWS リソースに対してのみ料金が発生します。

  • ノードの Amazon EBS ボリュームを暗号化する場合は、起動テンプレートを使用してノードをデプロイできます。起動テンプレートを使用せずに、暗号化された Amazon EBS ボリュームを持つマネージド型ノードをデプロイするには、アカウントにデフォルトで作成された新しい Amazon EBS ボリュームをすべて暗号化する必要があります。詳細については、Linux インスタンス用の Amazon EC2 ユーザーガイドの「デフォルトで暗号化」を参照してください。

マネージド型ノードグループのキャパシティータイプ

マネージド型ノードグループを作成する場合、キャパシティータイプをオンデマンドまたはスポットのいずれかから選択できます。Amazon EKS は、Amazon EC2 Auto Scaling グループを使用して、マネージド型ノードグループをデプロイします。マネージド型ノードグループはオンデマンドのみか、Amazon EC2 スポットインスタンスのみが含まれます。単一の Kubernetes クラスター内で、耐障害性のあるアプリケーションのポッドをスポットのマネージド型ノードグループに、フォールトイントレラントなアプリケーションのポッドをオンデマンドのノードグループに、それぞれスケジュールできます。デフォルトでは、マネージド型ノードグループはオンデマンド Amazon EC2 インスタンスをデプロイします。

オンデマンド

オンデマンドインスタンスでは、長期契約なしで、コンピューティング性能に対して秒単位で支払います。

仕組み

デフォルトでは、キャパシティータイプ を指定しない場合、マネージド型ノードグループはオンデマンドインスタンスでプロビジョニングされます。マネージド型ノードグループは、ユーザーの代わりに Amazon EC2 Auto Scaling グループを次のように設定します。

  • オンデマンドキャパシティーをプロビジョニングするための配分戦略は、prioritized に設定されます。マネージド型ノードグループは、API 内部で渡されたインスタンスタイプの優先度を使用して、オンデマンドキャパシティーを満たすときに最初に使用するインスタンスタイプを決定します。例えば、3 つのインスタンスタイプをc5.largec4.largec3.largeの順序で指定できます。オンデマンドインスタンスが起動されると、マネージド型ノードグループは c5.largec4.largec3.large の順でオンデマンドキャパシティーを満たします。Amazon EC2 Auto Scaling の詳細については、Amazon EC2 Auto Scaling ユーザーガイドの「Amazon EC2 Auto Scaling グループ」を参照してください。

  • Amazon EKS は、キャパシティータイプを eks.amazonaws.com/capacityType: ON_DEMAND に指定しているマネージド型ノードグループ内のすべてのノードに、次の Kubernetes ラベルを追加します。このラベルを使用すると、オンデマンドノードで、ステートフルまたは耐障害性のあるアプリケーションをスケジュールできます。

Spot

Amazon EC2 スポットインスタンスは、オンデマンドの料金から大きな割引で提供される、Amazon EC2 の予備容量です。Amazon EC2 スポットインスタンスは、EC2 から容量の返却を求められると 2 分間の中断通知をもって中断されることがあります。詳細については、Linux インスタンス用 Amazon EC2 ユーザーガイドの「スポットインスタンス」を参照してください。Amazon EC2 スポットインスタンスを使用してマネージド型ノードグループを構成し、Amazon EKS クラスターで実行されているコンピューティングノードのコストを最適化できます。

仕組み

マネージド型ノードグループ内でスポットインスタンスを使用するには、キャパシティータイプを spot に設定してマネージド型ノードグループを作成する必要があります。。マネージド型ノードグループは、ユーザーの代わりに Amazon EC2 Auto Scaling グループを設定し、次のようなスポットベストプラクティスを適用します。

  • スポットキャパシティーをプロビジョニングするための配分戦略として capacity-optimized を使用して、スポットノードが最適なスポットキャパシティープールにプロビジョニングされるようにします。容量を割り当てられるスポットキャパシティープールの数を増やすには、複数のインスタンスタイプを使用するようにマネージド型ノードグループを設定することをお勧めします。

  • スポットノードが中断するリスクが高い場合に、Amazon EKS がスポットノードを適切にドレーンおよび再調整して、アプリケーションの中断を最小限に抑えられるように、Amazon EC2 Spot Capacity Rebalancing が有効化されています。詳細については、Amazon EC2 Auto Scaling ユーザーガイドの「Amazon EC2 Auto Scaling キャパシティーの再分散」を参照してください。

    • スポットノードが再調整に関する推奨事項を受信すると、Amazon EKS は自動的に新しい代替スポットノードの起動を試み、クラスターへの加入が完了するまで待機します。

    • 代替スポットノードがブートストラップされ、Kubernetes 上で Ready 状態になると、Amazon EKS は再調整に関する推奨事項を受信したスポットノードを遮断し、ドレーンします。スポットノードを遮断すると、サービスコントローラーがこのスポットノードに新しいリクエストを送信しないようにします。正常でアクティブなスポットノードのリストからも削除されます。スポットノードをドレーンすると、実行中のポッドが適切に削除されます。

    • 代替スポットノードが Ready 状態になる前にスポットの 2 分間の中断通知が到着すると、Amazon EKS は再調整に関する推奨事項を受け取ったスポットノードのドレーンを開始します。

  • Amazon EKS は、キャパシティータイプを eks.amazonaws.com/capacityType: SPOT に指定しているマネージド型ノードグループ内のすべてのノードに、次の Kubernetes ラベルを追加します。このラベルを使用して、スポットノードで耐障害性のあるアプリケーションをスケジュールできます。

キャパシティータイプを選択する際の考慮事項

オンデマンドキャパシティーとスポットキャパシティーのどちらでノードグループをデプロイするかを決定するときは、次の条件を考慮する必要があります。

  • スポットインスタンスは、バッチや機械学習トレーニングワークロード、Apache Spark などのビッグデータ ETL、キュー処理アプリケーション、ステートレス API エンドポイントなど、ステートレスかつ耐障害性があり、柔軟なアプリケーションに適しています。スポットは Amazon EC2 の予備容量であり、時間の経過とともに変化する可能性があるため、必要な容量が使用できない期間があることに耐えられるような、中断されても問題ないワークロードには、スポットキャパシティーを使用することをお勧めします。

  • 監視ツールや運用ツールなどのクラスター管理ツールのように、耐障害性のあるアプリケーションや、データベースのように StatefulSets が必要な、ステートフルなアプリケーションのデプロイには、オンデマンドを使用することをお勧めします。

  • スポットインスタンスの使用中にアプリケーションの可用性を最大化するには、スポットのマネージド型ノードグループが複数のインスタンスタイプを使用するように構成することをお勧めします。複数のインスタンスタイプを使用する場合は、次のルールを適用することをお勧めします。

    • マネージド型ノードグループ内で Cluster Autoscaler を使用している場合、クラスター内のノードを期待通りにスケールできるように、同じサイズの vCPU とメモリリソースを持つインスタンスタイプを柔軟に組み合わせて使用することをお勧めします。例えば、4 つの vCPUs と 8 GiB のメモリが必要な場合は、c3.xlargec4.xlargec5.xlargec5d.xlargec5a.xlarge、c5n.xlarge、またはその他の同等なインスタンスタイプを使用することをお勧めします。

    • アプリケーションの可用性を高めるために、複数のスポットマネージド型ノードグループをデプロイすることをお勧めします。各グループには、同じ vCPU リソースとメモリリソースを持つ、柔軟なインスタンスタイプのセットを使用します。例えば、4 つの vCPUs と 8 GiB のメモリが必要な場合は、c3.xlargec4.xlargec5.xlargec5d.xlargec5a.xlargec5n.xlarge、または他の同等なインスタンスタイプのマネージド型ノードグループと、m3.xlargem4.xlargem5.xlargem5d.xlargem5a.xlargem5n.xlarge、または他の同等なインスタンスタイプの、別のマネージド型ノードグループを作成することをお勧めします。

    • カスタム起動テンプレートを使用しているスポットキャパシティータイプでノードグループをデプロイする場合、起動テンプレート経由で単一のインスタンスタイプを渡す代わりに、API を使用して複数のインスタンスタイプを渡します。起動テンプレートを使用したノードグループのデプロイの詳細については、「起動テンプレートのサポート」をご覧ください。