AKS を使用して複数のノードを構成し、ゼロへのスケーリングを有効にする

完了

Azure Kubernetes Service では、さまざまなノード プールを作成して、各ノード プールで実行されているノードに特定のワークロードを適合させることができます。 ワークロードをノードに一致させるプロセスを使うと、消費量を計算してコストを最適化することを計画できます。

会社のドローン追跡ソリューションは、多数のコンテナー化されたアプリケーションおよびサービスとして Azure Kubernetes Service (AKS) にデプロイされます。 チームでは、過酷な気象条件下での飛行経路情報を処理し、最適な飛行ルートを作成する新しい予測型モデリング サービスを開発しました。 このサービスは、GPU ベースの仮想マシン (VM) のサポートを必要とし、週の特定の曜日にのみ実行されます。

飛行経路情報の処理専用のクラスター ノード プールを構成したいと考えています。 このプロセスは 1 日に数時間だけ実行され、GPU ベースのノード プールの使用が検討されています。 しかし、ノードを使用するときにのみ、それに対する料金を支払いたいと考えています。

ノードによるプール方法と AKS によるノードの使用方法を確認してから、ノード プール内のノード数のスケーリング方法を見ていきましょう。

ノード プールとは?

ノード プールとは、同じ構成を持つノードを AKS クラスター内でグループにしたものです。 これらのノードには、基になる VM が含まれ、これらの VM でアプリケーションが実行されます。 AKS マネージド Kubernetes クラスターによって、次の 2 種類のノード プールが作成されます。

  • システム ノード プール

  • ユーザー ノード プール

システム ノード プール

システム ノード プールでは、クラスターのコントロール プレーンを構成する重要なシステム ポッドがホストされています。 システム ノード プールでは、ノード OS として Linux のみを使用でき、Linux ベースのワークロードのみが実行されます。 システム ノード プールのノードはシステム ワークロード用に予約されており、通常はカスタム ワークロードの実行には使用されません。 すべての AKS クラスターには、1 つ以上のノードで構成されるシステム ノード プールが少なくとも 1 つは含まれている必要があります。また、基になる VM のサイズをノードに対して定義する必要があります。

ユーザー ノード プール

ユーザー ノード プールでは、ワークロードがサポートされており、ノードのオペレーティング システムとして Windows または Linux を指定できます。 基になる VM のサイズをノードに対して定義したり、特定のワークロードを実行したりすることもできます。 たとえば、ドローン追跡ソリューションには、汎用 VM 用の構成を備えたノード プールにデプロイするバッチ処理サービスがあります。 新しい予測型モデリング サービスには、より高容量の GPU ベースの VM が必要です。 独立したノード プールを構成し、GPU 対応ノードを使用するようにそのプールを構成することに決めました。

ノード プールのノード数

ノード プールには最大 100 個のノードを構成できます。 ただし、何個のノードを構成するかの選択は、ノードごとに実行されるポッドの数に依存します。

たとえば、システム ノード プールでは、1 つのノードで実行するポッドの最大数を 30 に設定する必要があります。 この値により、クラスターの正常性にとって重要なシステム ポッドを実行するための十分な領域が確保されます。 ポッドの数がこの最小値を超えると、追加のワークロードをスケジュールするためにプール内に新しいノードが必要になります。 このため、システム ノード プールでは、少なくとも 1 つのノードがプールに必要です。 運用環境では、システム ノード プールの推奨ノード数は最低 3 ノードです。

ユーザー ノード プールはカスタム ワークロードを実行するように設計されており、30 ポッドの要件はありません。 ユーザー ノード プールでは、プールのノード数をゼロに設定できます。

AKS クラスターでアプリケーションの需要を管理する

AKS で Kubernetes クラスター内のコンピューティング リソースの量を増やしたり減らしたりすることを、"スケーリング" といいます。 実行する必要があるワークロード インスタンスの数、またはこれらのワークロードが実行されるノードの数をスケーリングできます。 AKS マネージド クラスター上のワークロードは、2 つの方法のいずれかでスケーリングできます。 最初のオプションは、必要に応じて手動でポッドまたはノードをスケーリングするというものです。 2 番目のオプションは自動化によるもので、水平ポッド自動スケーラーを使ってポッドをスケーリングし、クラスター自動スケーラーを使ってノードをスケーリングできます。

ノード プールを手動でスケーリングする方法

特定の既知の間隔で特定の期間にわたって実行されるワークロードを実行している場合、ノードのコストを制御する良い方法は、ノード プールのサイズを手動でスケーリングすることです。

GPU ベースのノード プールが必要で、毎日正午に 1 時間実行される予測型モデリング サービスがあるとします。 クラスターを使用していない場合は、特定の GPU ベースのノードでノード プールを構成し、ノード プールをゼロ ノードにスケーリングすることができます。

ノード プールの作成に使用できる az aks node pool add コマンドの例を次に示します。 --node-vm-size パラメーターに注目してください。プール内のノードに対し、GPU ベースの VM サイズである Standard_NC6 を指定しています。

az aks nodepool add \
    --resource-group resourceGroup \
    --cluster-name aksCluster \
    --name gpunodepool \
    --node-count 1 \
    --node-vm-size Standard_NC6 \
    --no-wait

プールの準備ができたら、az aks nodepool scale コマンドを使用してノード プールをゼロ ノードにスケーリングできます。 --node-count パラメーターがゼロに設定されていることに注目してください。 このコマンドの例を次に示します。

az aks nodepool scale \
    --resource-group resourceGroup \
    --cluster-name aksCluster \
    --name gpunodepool \
    --node-count 0

クラスターを自動的にスケーリングする方法

Diagram that shows how the cluster autoscaler adds nodes and how the horizontal pod autoscaler adds pods.

AKS によっては、Kubernetes クラスター自動スケーラーを使用してワークロードが自動的にスケーリングされます。 クラスターは、次の 2 つのオプションを使用してスケーリングできます。

  • 水平ポッド自動スケーラー

  • クラスター自動スケーラー

水平ポッド自動スケーラーから順に、それぞれのオプションを見ていきましょう。

水平ポッド自動スケーラー

Kubernetes 水平ポッド自動スケーラーは、クラスターのリソース需要を監視してワークロード レプリカの数を自動的にスケーリングするために使用します。

Kubernetes Metrics Server により、AKS クラスターで実行されるコントローラー、ノード、コンテナーからメモリおよびプロセッサのメトリックが収集されます。 この情報にアクセスする方法の 1 つは、メトリック API を使用することです。 水平ポッド自動スケーラーによって、30 秒おきにメトリック API が確認され、必要な需要に応えるために追加のインスタンスがアプリケーションに必要かどうかが判断されます。

あなたの会社で、ドローンの飛行経路をスケジュールするバッチ処理サービスも運用しているとします。 そのサービスに要求が殺到し、配送のバックログが増加して、遅延が発生したため、顧客が不満を抱いていることがわかっています。 バッチ処理サービスのレプリカの数を増やすと、注文をタイムリーに処理できるようになります。

この問題を解決するには、必要に応じてサービスのレプリカの数を増やすように、水平ポッド オートスケーラーを構成します。 バッチ要求の数が減ると、サービス レプリカの数が減少します。

ただし、水平ポッド自動スケーラーによるポッドのスケーリングは、クラスターの構成済みノード プールで利用可能なノードでのみ行われます。

クラスター自動スケーラー

リソース制約が引き起こされるのは、水平ポッド自動スケーラーで、ノード プールの既存のノードに別のポッドをスケジュールできない場合です。 制約がある場合にクラスターのノード プール内のノードの数をスケーリングするには、クラスター自動スケーラーを使う必要があります。 クラスター自動スケーラーによって、定義済みのメトリックがチェックされ、必要なコンピューティング リソースに応じてノード数がスケールアップまたはスケールダウンされます。

クラスター自動スケーラーは水平ポッド自動スケーラーと並行して使用されます。

クラスター自動スケーラーを使用すると、スケールアップとスケールダウンの両方のイベントを監視し、リソースの需要に変化があれば Kubernetes クラスターがノード プールのノード数を変更できるようになります。

さまざまなスケール規則を使用して個々のノード プールを構成します。 たとえば、1 つのノード プールだけで自動スケーリングが許可されるように構成したり、特定のノード数までだけスケーリングするようにノード プールを構成したりできます。

重要

ノード プールでクラスター自動スケーラーを有効にすると、ノード数をゼロにスケーリングできなくなります。 代わりに、最小数を 0 に設定して、クラスター リソースを節約できます。

知識を確認

1.

ソフトウェア ソリューションに 3 つの重要なコンポーネントがあるとします。 最初のコンポーネントは Web アプリケーションです。 2 つ目は、オンライン注文を処理するサービスです。 3 つ目は、必要なときにのみ実行され、GPU ベースの VM を必要とするビデオレンダリングおよび分析サービスです。 コストを最適化するために、ソリューションを管理するにはノード プールを Azure Kubernetes Service (AKS) クラスターにいくつデプロイすればよいですか?

2.

次の文を完成させてください。 Kubernetes クラスター自動スケーラーによって、スケーリングされるのは...