クラスターのスケーラビリティの概念

完了

ノード不足

ポッド YAML ファイルの spec.containers.resources キーで、ポッドに必要なリソースの数を定義します。 ノード内に新しいポッドを作成すると、必要な電力量で実行されるように、Kubernetes によって、指定された数のリソースがポッドに自動的に割り当てられます。

1 つのノードは、ポッドで使用できる CPU や RAM などの限られた量のリソースを持つ単一の VM です。 ノード内で無限の数のポッドを起動することはできません。 ノードがポッドのリソースに必要な要件を満たしていない場合、ポッドは、ノードのリソースを得るために、指定されたリソースと競合し、"ノードの枯渇" につながります。 ポッドは "保留中" 状態のままで、十分なリソースが使用可能になるまで、どのノードにもスケジュールされません。

クラスターのスケーラビリティ

ノードの枯渇を回避するには、オペレーターは、クラスターをスケールアウトし、より多くの VM をノード プールに追加する必要があります。 Azure CLI コマンド az aks scale を使用すると、手動による "クラスター スケーリング" を実行できます。 また、Azure portal を使用して、クラスターを手動でスケーリングすることもできます。 ポータルに移動し、AKS クラスターを選択します。 [設定] で、[ノード プール] を選択します。 スケーリングするノード プールを選択し、[ノード プールのスケーリング] を選択します。

手動によるスケーリングは、需要に一貫性がなく流動的であるクラスターの場合は特に、膨大な作業になる可能性があります。 ポッドの数が常に変動する場合は、スケジュールされていないポッドを常時監視し、必要な調整をリアルタイムで行う必要があります。

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

AKS のクラスター自動スケーラーは、クラスター スケーリング プロセスを自動化するツールです。 AKS クラスターでこれを有効にすると、リソースに制限があるスケジュールされていないポッドを監視し、要件を満たすようにノードの数を自動的に増加します。

Diagram that shows how the cluster autoscaler works.

また、クラスター自動スケーラーを使用すると、指定された時間未使用のクラスター容量がある場合、クラスター内のノードの数を減らすこともできます。 この条件が満たされると、自動スケーラーによってノードが cordon および drain されるため、そのノードでスケジュールされているすべてのポッドが他のノードに安全に移動されます。 さらに、このプロセス中、他のポッドはスケジュールされないことも保証されます。 この後、ノードはプールから削除されます。

ポッドをノードから移動できないために、クラスター自動スケーラーでそのノードを削除できない場合もあります。 これらの状況を次に示します。

  • ポッドが、YAML ファイルを使用して直接作成され、Deployments や ReplicaSet などのコントローラーにバインドされない。
  • "ポッド中断予算" (PDB) が非常に厳しく、ポッド数が特定のしきい値を下回ることが許されていない場合。
  • ポッドに、その特定のノードに対するノード セレクターがある、またはノードを他の場所に移動できないようにするノード アフィニティがある。

自動スケーリングが有効な場合、手動によるクラスター スケーリングは無効になります。

自分の知識をチェックする

1.

クラスター自動スケーラーと HPA はどのように異なりますか?

2.

運用環境でクラスター自動スケーラーが必要なのはなぜですか?

3.

クラスターでノードの削除に失敗するのは、次のどの状況ですか?