自動スケーリングが有効になっているワーカー・プールへのアプリのデプロイ
ポッドのデプロイメントを、クラスター自動スケーリング機能によって管理されている特定のワーカー・プールに制限するには、ラベルと nodeSelector
または nodeAffinity
の組み合わせを使用して、自動スケーリングされたワーカー・プールにのみアプリがデプロイされるようにします。 nodeAffinity
を使用すると、ポッドをワーカー・ノードに照合するためにスケジューリング動作がどのように機能するのかをより細かく制御できます。
その後、テイントと容認を使用して、これらのアプリのみを自動スケーリングされたワーカー・プールで実行できるようにします。
詳しくは、以下の Kubernetes 資料を参照してください。
始める前に:
特定の自動スケーリングされるワーカー・プールで実行するようにポッドを制限するには:
-
自動スケーリングされたワーカー・プールに、クラスターで自動スケーリング機能を使用する準備をするの説明にあるように、ラベルが追加され、テイントが適用されていることを確認します。
-
ポッド仕様テンプレートで、
nodeSelector
またはnodeAffinity
をワーカー・プールで使用したラベルと一致させます。nodeSelector
の例:... spec: containers: - name: nginx image: nginx imagePullPolicy: IfNotPresent nodeSelector: app: nginx ...
nodeAffinity
の例:spec: containers: - name: nginx image: nginx imagePullPolicy: IfNotPresent affinity: nodeAffinity: requiredDuringSchedulingIgnoredDuringExecution: nodeSelectorTerms: - matchExpressions: - key: use operator: In values: - autoscale
-
ポッド仕様テンプレートで、
toleration
をワーカー・プールに適用したテイントと一致させます。NoExecute
容認のサンプル:tolerations: - key: use operator: "Exists" effect: "NoExecute"
-
ポッドをデプロイします。 ラベルが一致しているため、ポッドはラベルが付いたワーカー・プール内のワーカー・ノードにスケジュールされます。 容認が一致しているため、ポッドをテイントが適用されたワーカー・プールで実行できます。
oc apply -f pod.yaml
ワーカー・プールのリソースが不足する前にワーカー・ノードを増やす
「クラスタオートスケーラーの動作の理解」トピック および 「 Kubernetes クラスタオートスケーラーFAQ」 で説明されているように、クラスタオートスケーラーは、ワーカープールの利用可能なリソースに対して、ワークロードのリソース要求に応じてワーカープールのスケールアップを行います。 しかし、ワーカー・プールのリソースが不足する前に、クラスター自動スケーリング機能でワーカー・ノードをスケールアップしたい場合があります。 そうすれば、ワーカー・プールは既にリソース要求を満たすようにスケールアップされているので、ワーカー・ノードがプロビジョンされるまでワークロードが待つ必要はありません。
クラスター自動スケーリング機能は、ワーカー・プールの早期スケーリング (オーバープロビジョン) をサポートしません。 ただし、他の Kubernetes リソースをクラスター自動スケーリング機能と連携して早期スケーリングを実行するように構成することができます。
一時停止ポッド
特定のリソース要求を持つポッドに ポーズコンテナをデプロイするデプロイを作成し、デプロイに低いポッド優先度を割り当てることができます。 それらのリソースが高優先度のワークロードで必要になると、その一時停止ポッドは先行停止 (preempt) され、保留ポッドになります。 このイベントにより、クラスター自動スケーリング機能のスケールアップがトリガーされます。
ポーズポッドの展開設定に関する詳細については 、 Kubernetes のFAQ をご覧ください。 この過剰プロビジョニング構成ファイルの例を参考にして、優先クラス、サービスアカウント、およびデプロイメントを作成することができます。
この方法を使用する場合は、ポッドの優先度がどのように機能するか、およびデプロイメントに合わせたポッドの優先度の設定方法について必ず理解してください。 例えば、一時停止ポッドに、優先度の高いポッドに使用できるリソースが十分にない場合、そのポッドは先行停止されません。 優先度の高いワークロードが保留中のままになり、クラスター自動スケーリング機能のスケールアップがトリガーされます。
ただし、この場合、実行するワークロードはリソース不足のためにスケジュールできないので、スケールアップ・アクションは早期になりません。 一時停止ポッドの nodeAffinity
または nodeSelector
および容認は、ワーカー・プールに設定したものと一致している必要があります。
水平ポッド自動スケーリング (HPA)
水平ポッドの自動スケーリングはポッドの平均 CPU 使用率に基づいて行われるので、設定した CPU 使用限度には、ワーカー・プールがリソースを使い果たす前に達します。
さらにポッドが要求されると、クラスター自動スケーリング機能のワーカー・プールのスケールアップがトリガーされます。 HPAの設定に関する詳細は 、 Kubernetes docs をご覧ください。