View a markdown version of this page

ワークロードが EKS Auto Mode ノードにデプロイされるかどうかを制御する - Amazon EKS

このページの改善にご協力ください

このユーザーガイドに貢献するには、すべてのページの右側のペインにある「GitHub でこのページを編集する」リンクを選択してください。

ワークロードが EKS Auto Mode ノードにデプロイされるかどうかを制御する

EKS Auto Mode を使用して EKS クラスターでワークロードを実行する場合、特定のワークロードが EKS Auto Mode ノードで実行されるか、他のコンピューティングタイプで実行されるかを制御することが必要になる場合があります。このトピックでは、ノードセレクターとアフィニティルールを使用して、ワークロードを目的のコンピューティングインフラストラクチャでスケジュールする方法について説明します。

このトピックの例では、eks.amazonaws.com/compute-type ラベルを使用して EKS Auto Mode ノードへのワークロードのデプロイを要求または禁止する方法を示します。これは、EKS Auto Mode と、セルフマネージド Karpenter プロビジョナーや EKS マネージドノードグループなどの他のコンピューティングタイプの両方を実行している混合モードクラスターで特に便利です。

EKS Auto Mode ノードでは、ラベル eks.amazonaws.com/compute-type の値が auto に設定されています。このラベルを使用して、ワークロードが EKS Auto Mode によって管理されるノードにデプロイされるかどうかを制御できます。

ワークロードを EKS Auto Mode ノードにデプロイすることを要求する

注記

この nodeSelector 値は EKS Auto Mode では必須ではありません。この nodeSelector 値は、クラスターを混合モードで実行している場合にのみ関連し、ノードタイプは EKS Auto Mode で管理されません。例えば、EKS マネージドノードグループを使用してクラスターに静的コンピューティング容量をデプロイし、EKS Auto Mode で動的計算能力を管理しているとします。

この nodeSelector をデプロイまたは他のワークロードに追加して、Kubernetes が EKS Auto Mode ノードにスケジュールするように要求できます。

apiVersion: apps/v1 kind: Deployment spec: template: spec: nodeSelector: eks.amazonaws.com/compute-type: auto

ワークロードを EKS Auto Mode ノードにデプロイしないことを要求する

この nodeAffinity をデプロイまたは他のワークロードに追加して、Kubernetes が EKS Auto Mode ノードにスケジュールしないように要求できます。

affinity: nodeAffinity: requiredDuringSchedulingIgnoredDuringExecution: nodeSelectorTerms: - matchExpressions: - key: eks.amazonaws.com/compute-type operator: NotIn values: - auto

特定の NodePool をターゲットにする

Amazon EKS Auto Mode クラスターには、複数の NodePool を含めることができます。ワークロードを特定の NodePool のノードでのみ実行したい場合があります。これを実現するには、ワークロードを次のいずれかのラベルに一致させます。

  • NodePool で定義するカスタムラベル。NodePool の spec.template.metadata.labels の下にラベルを追加すると、Amazon EKS Auto Mode はそれらのラベルを、その NodePool がプロビジョニングするすべてのノードに適用します。カスタムラベルが推奨されるアプローチです。カスタムラベルは、ワークロードを特定の NodePool 名ではなく、workload-class: gpu-inference などの機能に結び付けます。

  • 既知の karpenter.sh/nodepool ラベル。Amazon EKS Auto Mode は、プロビジョニングするすべてのノードにこのラベルを適用し、NodePool の名前を値として使用します。カスタムラベルを定義しておらず、名前で NodePool をターゲットにしたい場合は、このラベルを使用します。

カスタム NodePool ラベルをターゲットにする

まず、NodePool でラベルを定義します。

apiVersion: karpenter.sh/v1 kind: NodePool metadata: name: gpu spec: template: metadata: labels: workload-class: gpu-inference

NodePool の設定の詳細については、「EKS 自動モードl 用のノードプールを作成する」を参照してください。

次に、ワークロードからそのラベルに一致させます。

apiVersion: apps/v1 kind: Deployment metadata: name: inference spec: template: spec: nodeSelector: workload-class: gpu-inference

このデプロイのポッドは、gpu NodePool がプロビジョニングするノードにのみスケジュールされます。この nodeSelector を持たないワークロードは、引き続きデフォルトの NodePool で実行されます。

名前で NodePool をターゲットにする

NodePool 名の変更はスケジューリングに影響する

名前でワークロードを固定すると、ターゲットの NodePool の名前を変更または削除した場合に、ポッドが Pending 状態のままになる可能性があります。単一の NodePool 定義よりも長く存続すると予想されるワークロードには、カスタム機能ラベルを使用してください。

apiVersion: apps/v1 kind: Deployment spec: template: spec: nodeSelector: karpenter.sh/nodepool: <your-nodepool-name>

Karpenter がポッドを NodePool に照合する方法の詳細については、Karpenter ドキュメントの「スケジューリング」を参照してください。