自動スケーリングが有効になっているワーカー・プールへのアプリのデプロイ
ポッドのデプロイメントを、クラスター自動スケーリング機能によって管理されている特定のワーカー・プールに制限するには、ラベルと 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 クラスター・オートスケーラーに関するよくある質問 」で説明されているように、クラスタ・オートスケーラーは、ワークロードのリクエストされたリソースと、ワーカープールの利用可能なリソースとを照らし合わせて、ワーカープールをスケールアップします。 しかし、ワーカー・プールのリソースが不足する前に、クラスター自動スケーリング機能でワーカー・ノードをスケールアップしたい場合があります。 そうすれば、ワーカー・プールは既にリソース要求を満たすようにスケールアップされているので、ワーカー・ノードがプロビジョンされるまでワークロードが待つ必要はありません。
クラスター自動スケーリング機能は、ワーカー・プールの早期スケーリング (オーバープロビジョン) をサポートしません。 ただし、他の Kubernetes リソースをクラスター自動スケーリング機能と連携して早期スケーリングを実行するように構成することができます。
一時停止ポッド
特定のリソース要求を持つポッドに「pause」コンテナをデプロイするデプロイメントを作成し、そのデプロイメントに低いポッド優先度を割り当てることができます。 それらのリソースが高優先度のワークロードで必要になると、その一時停止ポッドは先行停止 (preempt) され、保留ポッドになります。 このイベントにより、クラスター自動スケーリング機能のスケールアップがトリガーされます。
ポーズ・ポッドの導入設定に関する詳細については、『 Kubernetes よくあるよくある質問 』を参照してください。 このオーバープロビジョニング設定ファイルの例を使用して、優先度クラス、サービスアカウント、およびデプロイメントを作成できます。
この方法を使用する場合は、ポッドの優先度がどのように機能するか、およびデプロイメントに合わせたポッドの優先度の設定方法について必ず理解してください。 例えば、一時停止ポッドに、優先度の高いポッドに使用できるリソースが十分にない場合、そのポッドは先行停止されません。 優先度の高いワークロードが保留中のままになり、クラスター自動スケーリング機能のスケールアップがトリガーされます。
ただし、この場合、実行するワークロードはリソース不足のためにスケジュールできないので、スケールアップ・アクションは早期になりません。 一時停止ポッドの nodeAffinity または nodeSelector および容認は、ワーカー・プールに設定したものと一致している必要があります。
水平ポッド自動スケーリング (HPA)
水平ポッドの自動スケーリングはポッドの平均 CPU 使用率に基づいて行われるので、設定した CPU 使用限度には、ワーカー・プールがリソースを使い果たす前に達します。
さらにポッドが要求されると、クラスター自動スケーリング機能のワーカー・プールのスケールアップがトリガーされます。 HPAの設定に関する詳細については、『 Kubernetes 』のドキュメントを参照してください。