AKS を使用して複数のノードを構成し、ゼロへのスケールを有効にする
- 6 分
Azure Kubernetes Service を使用すると、特定のワークロードを各ノード プールで実行されているノードに一致させるために、異なるノード プールを作成できます。 ワークロードをノードに一致させるプロセスでは、消費を計算し、コストを最適化することを計画できます。
会社のドローン追跡ソリューションは、多数のコンテナー化されたアプリケーションおよびサービスとして Azure Kubernetes Service (AKS) にデプロイされます。 チームは、極端な気象条件でフライト パス情報を処理し、最適なフライト ルートを作成する新しい予測モデリング サービスを開発しました。 このサービスには GPU ベースの仮想マシン (VM) のサポートが必要であり、週の特定の日にのみ実行されます。
フライト パス情報の処理専用のクラスター ノード プールを構成する必要があります。 このプロセスは 1 日に数時間だけ実行され、GPU ベースのノード プールを使用する必要があります。 ただし、ノードを使用する場合にのみ、ノードの料金を支払う必要があります。
ノード プールと AKS でノードがどのように使用されるかを見てみましょう。次に、ノード プール内のノード数をスケーリングする方法について説明します。
ノード プールとは
ノード プールは、AKS クラスター内の同じ構成を持つノードのグループを表します。 これらのノードには、アプリケーションを実行する基になる VM が含まれています。 AKS で管理される Kubernetes クラスターには、次の 2 種類のノード プールを作成できます。
システム ノード プール
ユーザー ノード プール
システム ノード プール
システム ノード プールは、クラスターのコントロール プレーンを構成する重要なシステム ポッドをホストします。 システム ノード プールでは、Linux をノード OS としてのみ許可し、Linux ベースのワークロードのみを実行します。 システム ノード プール内のノードはシステム ワークロード用に予約されており、通常はカスタム ワークロードの実行には使用されません。 すべての AKS クラスターには、少なくとも 1 つのノードを含む少なくとも 1 つのシステム ノード プールが含まれている必要があり、ノードの基になる VM サイズを定義する必要があります。
ユーザー ノード プール
ユーザー ノード プールはワークロードをサポートしており、ノード オペレーティング システムとして Windows または Linux を指定できます。 また、ノードの基になる VM サイズを定義し、特定のワークロードを実行することもできます。 たとえば、ドローン追跡ソリューションには、汎用 VM の構成を使用してノード プールにデプロイするバッチ処理サービスがあります。 新しい予測モデリング サービスには、より高容量の GPU ベースの VM が必要です。 別のノード プールを構成し、GPU 対応ノードを使用するように構成します。
ノード プール内のノードの数
ノード プールには最大 100 個のノードを構成できます。 ただし、構成するノードの数は、ノードごとに実行されるポッドの数によって異なります。
たとえば、システム ノード プールでは、1 つのノードで実行されるポッドの最大数を 30 に設定することが不可欠です。 この値により、クラスターの正常性に不可欠なシステム ポッドを実行するのに十分な領域が保証されます。 ポッドの数がこの最小値を超えると、追加のワークロードをスケジュールするために、プール内に新しいノードが必要になります。 このため、システム ノード プールにはプール内に少なくとも 1 つのノードが必要です。 運用環境の場合、システム ノード プールの推奨ノード数は、少なくとも 3 つのノードです。
ユーザー ノード プールは、カスタム ワークロードを実行するように設計されており、30 ポッドの要件はありません。 ユーザー ノード プールを使用すると、プールのノード数を 0 に設定できます。
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
パラメーターが 0 に設定されていることに注意してください。 コマンドの例を次に示します。
az aks nodepool scale \
--resource-group resourceGroup \
--cluster-name aksCluster \
--name gpunodepool \
--node-count 0
クラスターを自動的にスケーリングする方法
AKS は Kubernetes クラスター オートスケーラーを使用して、ワークロードを自動的にスケーリングします。 クラスターは、次の 2 つのオプションを使用してスケーリングできます。
水平ポッド自動スケーラー
クラスター オートスケーラー
ポッドの水平オートスケーラーから始めて、各オプションを見てみましょう。
水平ポッド自動スケーラー
Kubernetes のポッドの水平オートスケーラーを使用して、クラスターのリソース需要を監視し、ワークロード レプリカの数を自動的にスケーリングします。
Kubernetes Metrics Server は、AKS クラスターで実行されるコントローラー、ノード、コンテナーからメモリとプロセッサのメトリックを収集します。 この情報にアクセスする方法の 1 つは、Metrics API を使用することです。 ポッドの水平オートスケーラーは、メトリック API を 30 秒ごとにチェックして、必要な需要を満たすためにアプリケーションにさらに多くのインスタンスが必要かどうかを判断します。
会社には、ドローンの飛行経路をスケジュールするバッチ処理サービスもあるとします。 サービスに要求が殺到し、配送が滞り、顧客に遅れや不満が生じることに気付きます。 バッチ処理サービス レプリカの数を増やすと、注文のタイムリーな処理が可能になる可能性があります。
この問題を解決するには、必要に応じサービス レプリカの数を増やすようにポッドの水平オートスケーラーを構成します。 バッチ要求の数が減ると、サービス レプリカの数が減少します。
ただし、ポッドの水平オートスケーラーは、クラスターの構成済みノード プール内の使用可能なノードでのみポッドをスケーリングします。
クラスターオートスケーラー
水平ポッド オートスケーラーがノード プール内の既存のノードで別のポッドをスケジュールできない場合、リソース制約がトリガーされます。 クラスターの自動スケーラーを使用して、クラスターのノード プール内のノード数を制約時にスケーリングする必要があります。 クラスター オートスケーラーは、定義されたメトリックをチェックし、必要なコンピューティング リソースに基づいてノードの数をスケールアップまたはスケールダウンします。
クラスター オートスケーラーは、ポッドの水平オートスケーラーと共に使用されます。
クラスター オートスケーラーは、スケールアップ イベントとスケールダウン イベントの両方を監視し、リソースの需要の変化に応じて、Kubernetes クラスターがノード プール内のノード数を変更できるようにします。
各ノード プールは、異なるスケール ルールを使用して構成します。 たとえば、自動スケールを許可するようにノード プールを 1 つだけ構成する場合や、特定の数のノードのみにスケーリングするようにノード プールを構成する場合があります。
重要
ノード プールでクラスター オートスケーラーを有効にすると、ノード数をゼロにスケーリングできなくなります。 代わりに、最小数を 0 に設定して、クラスター リソースを節約できます。