このページの改善にご協力ください
このユーザーガイドに貢献するには、すべてのページの右側のペインにある「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 ドキュメントの「スケジューリング