大規模な AKS クラスターを実行またはスケーリングするときの一般的な問題に関する FAQ
この記事では、Microsoft Azure Kubernetes Service (AKS) で大規模なクラスターを実行またはスケーリングするときに発生する可能性がある一般的な問題に関してよく寄せられる質問に回答します。 大規模なクラスターとは、500 ノードを超えるスケールで実行される任意のクラスターです。
作成、スケールアップ、またはアップグレード中に "クォータ超過" エラーが発生する
この問題を解決するには、作成、スケーリング、またはアップグレードしようとしているサブスクリプションでサポート要求を作成し、対応するリソースの種類のクォータを要求します。 詳細については、「 リージョンのコンピューティング クォータ」を参照してください。
高度なネットワークを使用する AKS クラスターをデプロイすると、"insufficientSubnetSize" エラーが発生する
このエラーは、クラスターで使用されているサブネットに、リソースの割り当てを成功させるために CIDR 内で使用可能な IP がなくなったことを示します。 この問題は、アップグレード、スケールアウト、またはノード プールの作成時に発生する可能性があります。 この問題は、サブネット内の空き IP の数が次の式の結果より少ないために発生します。
要求されたノードの数 * ノード プールの
--max-pod
値
前提条件
400 ノードを超えてスケーリングするには、 Azure CNI ネットワーク プラグインを使用する必要があります。
デプロイするノードとポッドの数に対応するように仮想ネットワークとサブネットを計画するには、クラスターの IP アドレス 計画する方法に関するページを参照してください。 IP 枯渇のために行うサブネット計画またはクラスターの再作成のオーバーヘッドを減らすには、 動的 IP 割り当てを参照してください。
ソリューション
既存のサブネットの CIDR 範囲を更新できないため、この問題を解決するには、新しいサブネットを作成するアクセス許可が必要です。 次のステップを実行します。
操作の目標に十分な CIDR 範囲が大きい新しいサブネットを再構築します。
重複しない新しい範囲を持つ新しいサブネットを作成します。
新しいサブネットに新しいノード プールを作成します。
置き換えられる古いサブネットに存在する古いノード プールからポッドをドレインします。
古いサブネットと古いノード プールを削除します。
SNAT ポート不足のため、散発的なエグレス接続エラーが発生しています
比較的大規模 (ノード数が 500 を超える) で実行されるクラスターの場合は、スケーラビリティを向上するために AKS Managed Network Address Translation (NAT) ゲートウェイ を使用することをお勧めします。 Azure NAT ゲートウェイでは、IP アドレスあたり最大 64,512 個の送信 UDP および TCP トラフィック フロー、および最大 16 個の IP アドレスを使用できます。
マネージド NAT を使用していない場合は、「 ソース ネットワーク アドレス変換 (SNAT) の枯渇と接続タイムアウトのトラブルシューティング」を参照してください SNAT ポート不足の問題を理解して解決してください。
Azure portal を使用して最大 5,000 ノードにスケールアップできない
次の手順に従って、Azure CLI を使用して最大 5,000 ノードにスケールアップします。
次のコマンドを実行して、クラスター内にノード プールの最小数を作成します (ノード プールノードの上限は 1,000 であるため)。
az aks nodepool add --resource-group MyResourceGroup --name nodepool1 --cluster-name MyManagedCluster
ノード プールを一度に 1 つずつスケールアップします。 理想的には、1,000 の連続するスケールアップの間に 5 分間のスリープ時間を設定します。 次のコマンドを実行します。
az aks nodepool scale --resource-group MyResourceGroup --name nodepool1 --cluster-name MyManagedCluster
アップグレードが実行されているが、遅い
既定の構成では、AKS はアップグレード中に次のアクションを実行して急増します。
- 1 つの新しいノードを作成します。
- ノード プールを目的のノード数を超えて 1 ノードずつスケーリングします。
最大サージ設定では、1 つのノードの既定値は、AKS が既存のアプリケーションをドレインし、以前のバージョン管理されたノードを置き換える前に、1 つの新しいノードを作成することを意味します。 この追加ノードにより、AKS はワークロードの中断を最小限に抑えることができます。
多数のノードを持つクラスターをアップグレードする場合、既定値の max-surge
を使用すると、クラスター全体のアップグレードに数時間かかることがあります。 ノード プールごとに max-surge
プロパティをカスタマイズして、アップグレード速度とアップグレードの中断のトレードオフを有効にすることができます。 最大サージ値を大きくすると、アップグレード プロセスが早く完了できるようになります。 ただし、最大サージの値が大きいと、アップグレード プロセス中に中断が発生する可能性もあります。
次のコマンドを実行して、既存のノード プールの最大サージを増やすかカスタマイズします。
az aks nodepool update --resource-group MyResourceGroup --name mynodepool --cluster-name MyManagedCluster --max-surge 5
また、展開設定によってアップグレード操作またはスケール操作の完了が遅れる可能性がある方法を考慮することも重要です。
- SKU ファミリ B シリーズの VM は システム ノードプールの AKS によってサポートされていないため、更新中と更新後にパフォーマンスが低下する可能性があります。
- デプロイの PDB リソース設定を確認して、アップグレードが成功したかどうかを正確に確認します。 詳細については、 AKS ワークロードのベスト プラクティスを参照してください。
アップグレードがクォータ (5,000 クラスター) の制限に達しています
この問題を解決するには、 リージョン vCPU クォータを参照してください。
750 を超えるノードでの内部サービスの作成が遅いか、タイムアウト エラーが原因で失敗する
Standard Load Balancer (SLB) バックエンド プールの更新は、既知のパフォーマンスのボトルネックです。 Microsoft では、大規模なサービスと SLB の迅速な作成を可能にする新しい機能に取り組んでいます。 この問題に関するフィードバックをお寄せください。 IP ベースのバックエンド プールを使用したロード バランサーの Azure Kubernetes サポートを参照してください。
ソリューション
クラスターを 750 ノード未満にスケールダウンしてから、クラスターの内部ロード バランサーを作成することをお勧めします。 内部ロード バランサーを作成するには、次の例の手順に従って、 LoadBalancer
サービスの種類と azure-load-balancer-internal
注釈を作成します。
手順 1: 内部ロード バランサーを作成する
内部ロード バランサーを作成するには、次の例に示すように、internal-lb.yaml という名前でLoadBalancer
サービスの種類とazure-load-balancer-internal
注釈を含むサービス マニフェストを作成します。
apiVersion: v1
kind: Service
metadata:
name: internal-app
annotations:
service.beta.kubernetes.io/azure-load-balancer-internal: "true"
spec:
type: LoadBalancer
ports:
- port: 80
selector:
app: internal-app
手順 2: 内部ロード バランサーをデプロイする
次の例に示すように、 kubectl apply
コマンドを使用して内部ロード バランサーをデプロイし、YAML マニフェストの名前を指定します。
kubectl apply -f internal-lb.yaml
クラスターが作成されたら、(この手順に従って) 内部ロード バランサーをプロビジョニングし、内部負荷分散サービスを実行したままにすることもできます。 これを行うと、大規模なサービスをロード バランサーに追加できます。
大規模な SLB サービスの作成には、実行に数時間かかります
SLB バックエンド プールの更新は、既知のパフォーマンスのボトルネックです。 作成、更新、および削除操作のパフォーマンスを大幅に向上させ、負荷分散されたサービスを大規模に実行できる新機能に取り組んでいます。 フィードバックをお寄せください。 IP ベースのバックエンド プールを使用したロード バランサーの Kubernetes サポートを参照してください。
サードパーティの情報に関する免責事項
この資料に記載されているサードパーティ製品は、マイクロソフトと関連のない他社の製品です。 明示的か黙示的かにかかわらず、これらの製品のパフォーマンスや信頼性についてマイクロソフトはいかなる責任も負わないものとします。
お問い合わせはこちらから
質問がある場合やヘルプが必要な場合は、サポート要求を作成するか、Azure コミュニティ サポートにお問い合わせください。 Azure フィードバック コミュニティに製品フィードバックを送信することもできます。