クラスターのスケーラビリティの概念
ノード不足
ポッド YAML ファイルの spec.containers.resources
キーで、ポッドに必要なリソースの数を定義します。 ノード内に新しいポッドを作成すると、必要な電力量で実行されるように、Kubernetes によって、指定された数のリソースがポッドに自動的に割り当てられます。
1 つのノードは、ポッドで使用できる CPU や RAM などの限られた量のリソースを持つ単一の VM です。 ノード内で無限の数のポッドを起動することはできません。 ノードがポッドのリソースに必要な要件を満たしていない場合、ポッドは、ノードのリソースを得るために、指定されたリソースと競合し、"ノードの枯渇" につながります。 ポッドは "保留中" 状態のままで、十分なリソースが使用可能になるまで、どのノードにもスケジュールされません。
クラスターのスケーラビリティ
ノードの枯渇を回避するには、オペレーターは、クラスターをスケールアウトし、より多くの VM をノード プールに追加する必要があります。 Azure CLI コマンド az aks scale
を使用すると、手動による "クラスター スケーリング" を実行できます。 また、Azure portal を使用して、クラスターを手動でスケーリングすることもできます。 ポータルに移動し、AKS クラスターを選択します。 [設定] で、[ノード プール] を選択します。 スケーリングするノード プールを選択し、[ノード プールのスケーリング] を選択します。
手動によるスケーリングは、需要に一貫性がなく流動的であるクラスターの場合は特に、膨大な作業になる可能性があります。 ポッドの数が常に変動する場合は、スケジュールされていないポッドを常時監視し、必要な調整をリアルタイムで行う必要があります。
クラスター自動スケーラー
AKS のクラスター自動スケーラーは、クラスター スケーリング プロセスを自動化するツールです。 AKS クラスターでこれを有効にすると、リソースに制限があるスケジュールされていないポッドを監視し、要件を満たすようにノードの数を自動的に増加します。
また、クラスター自動スケーラーを使用すると、指定された時間未使用のクラスター容量がある場合、クラスター内のノードの数を減らすこともできます。 この条件が満たされると、自動スケーラーによってノードが cordon および drain されるため、そのノードでスケジュールされているすべてのポッドが他のノードに安全に移動されます。 さらに、このプロセス中、他のポッドはスケジュールされないことも保証されます。 この後、ノードはプールから削除されます。
ポッドをノードから移動できないために、クラスター自動スケーラーでそのノードを削除できない場合もあります。 これらの状況を次に示します。
- ポッドが、YAML ファイルを使用して直接作成され、Deployments や ReplicaSet などのコントローラーにバインドされない。
- "ポッド中断予算" (PDB) が非常に厳しく、ポッド数が特定のしきい値を下回ることが許されていない場合。
- ポッドに、その特定のノードに対するノード セレクターがある、またはノードを他の場所に移動できないようにするノード アフィニティがある。
自動スケーリングが有効な場合、手動によるクラスター スケーリングは無効になります。