Azure Kubernetes Service (AKS)での自動ゾーン配置では、ノード プールに最適な可用性ゾーンのセットが動的に選択されます。 リージョンと VM SKU の組み合わせごとにゾーンを手動で指定する必要はありません。
--zones autoを使用してノード プールを作成または更新すると、AKS は、要求された SKU の容量を持つ可用性ゾーンに仮想マシン (VM) を配置し、ゾーンごとに最大インスタンスの割合として 50% を適用します。
この記事では、自動ゾーン配置を使用する AKS ノード プールを作成または更新する方法について説明します。
ゾーンの自動配置のしくみ
--zones auto (またはエージェント プール プロファイルでavailabilityZones: ["auto"]) を指定すると、AKS は Azure コンピューティング自動ゾーン配置ポリシーを使用してゾーンを選択し、ノードを分散します。 ゾーン番号を指定したり、リージョンと VM SKU ごとに異なるゾーン構成を維持したりする必要はありません。
自動ゾーン配置は次のように機能します。
- AKS は、要求された VM SKU をサポートできるターゲット リージョン内の可用性ゾーンを評価します。
- AKS は、最初に最大 3 つの使用可能なゾーンを選択し、自動ゾーン配置ポリシーに従ってノードを配置します。 既定では、ノード プールの 50% を超えるゾーンを含むゾーンはありません。
- 後のスケールアウト操作中に、AKS はゾーンの可用性を再評価します。 Azureリージョンにゾーンを追加したり、VM SKU を別のゾーンで使用できるようにする場合、配置ポリシーと使用可能な容量によって許可されたときに、AKS によってそのゾーンに新しいノードが配置される可能性があります。 ノード プールの構成を更新する必要はありません。
Important
50% の制限はゾーンあたりの最大濃度であり、ノードが常に均等に分散されることを保証するものではありません。 実際のディストリビューションは、ノード数、選択した VM SKU をサポートするゾーン、およびノードがプロビジョニングされるときに使用可能な容量によって異なります。 ゾーンごとの制限を受け入れながら、要求されたノードAzure割り当てることができない場合、作成操作またはスケール操作は失敗する可能性があります。
このアプローチでは、ゾーンを手動で指定する一般的な問題点に対処します。
- リージョンに依存しないデプロイ: ゾーンの可用性の違いを気にせずに、リージョン間で一貫した構成を使用します。
- 回復性の向上: アプリケーションの可用性を向上させるために、マルチゾーン冗長性を自動的に実現します。
- ゾーンの自動拡張: リージョンが拡張されたときに (たとえば、3 から 4 つのゾーンに) 新しい可用性ゾーンをシームレスに活用します。
- デプロイエラーの削減: ゾーン分散のワークロード許容度に基づいて、特定のゾーンの容量制約によって引き起こされる割り当てエラーの作成とスケーリングを減らします。
制限事項と考慮事項
- 自動ゾーン配置では、Virtual Machine Scale Sets ベースのノード プールとVirtual Machines ベースのノード プールの両方の作成と更新がサポートされます。
- 既定のゾーンごとの上限は、ノードの% 50 です。
- ゾーンの自動配置は、 ゾーンにまたがるワークロードを 対象としています。
ゾーンに合わせたワークロード (各ノード プールが 1 つのゾーンにピン留めされている) の場合は、
--zones 1、--zones 2などを使用してゾーンを明示的に指定し続けます。
前提条件
Important
AKS のプレビュー機能は、セルフサービスのオプトイン単位で利用できます。 プレビューは、"現状有姿のまま" および "利用可能な限度" で提供され、サービス レベル アグリーメントおよび限定保証から除外されるものとします。 AKS プレビューは、ベストエフォート ベースでカスタマー サポートによって部分的にカバーされます。 そのため、これらの機能は運用環境での使用を目的としていません。 詳細については、次のサポート記事を参照してください。
AKS API バージョン
2026-01-02-preview以降。aks-preview Azure CLI拡張機能の最新バージョン。
可用性ゾーンをサポートするリージョン。 詳細については、 Azure リージョンの一覧を参照してください。
サブスクリプションに登録されている
VmssAutomaticZonePlacement機能フラグ。az feature registerコマンドを使用して機能フラグを登録します。az feature register \ --namespace Microsoft.Compute \ --name VmssAutomaticZonePlacementaz feature showコマンドを使用して、登録の状態を確認します。az feature show \ --namespace Microsoft.Compute \ --name VmssAutomaticZonePlacement \ --query properties.state \ --output tsv続行する前に、コマンドが
Registeredを返すまで待ちます。
自動ゾーン配置を使用して AKS クラスターを作成する (プレビュー)
az aks create コマンドと --zones auto を使用して、自動ゾーン配置を使用する Virtual Machine Scale Sets ベースまたは Virtual Machines ベースのシステム ノード プールを持つ新しい AKS クラスターを作成します。
az aks create \
--resource-group example-rg \
--name example-cluster \
--node-vm-size Standard_D8s_v5 \
--node-count 10 \
--zones auto
AKS は、対象リージョン内で Standard_D8s_v5 を配置できる容量があるゾーンを選択し、どの 1 つのゾーンにもノードの 50% を超えて配置されないように、それらのゾーンに 10 個のノードを分散します。
ゾーンの自動配置を使用してノード プールを追加する (プレビュー)
--zones auto を指定して az aks nodepool add コマンドを使用し、新しい Virtual Machine Scale Sets ベースまたは Virtual Machines ベースのノード プールを既存のクラスターに追加します。
az aks nodepool add \
--resource-group example-rg \
--cluster-name example-cluster \
--name userpoolauto \
--node-vm-size Standard_D8s_v5 \
--node-count 6 \
--zones auto
ゾーンの自動配置を使用するように既存のノード プールを更新する (プレビュー)
--zones auto を付けて az aks nodepool update コマンドを使用し、既存の Virtual Machine Scale Sets ベースまたは Virtual Machines ベースのノード プールを、自動ゾーン配置を使用するように更新します。
az aks nodepool update \
--resource-group example-rg \
--cluster-name example-cluster \
--name nodepool1 \
--zones auto
AKS は、ローリング操作を通じて既存のノード プールを更新します。
- AKS は、自動ゾーン配置を使用するサージ ノードを追加します。
- AKS は既存のノードを切断してドレインします。
- AKS は、ワークロードがサージ ノードに移行した後、既存のノードを削除します。
この操作では、ノード プールで構成した次のアップグレード設定が適用されます。
-
最大サージ (
--max-surge): 更新中に AKS が追加する追加ノードの数を制御します。 値を大きくすると、更新がより速く完了しますが、コンピューティング クォータとサブネットの IP 容量が増える必要があります。 -
ノード ドレイン タイムアウト (
--drain-timeout): ドレイン操作が失敗する前に、AKS がノード上のポッドの削除を待機する時間を制御します。 -
ノード ソーク期間 (
--node-soak-duration): 新しいノードの準備が整った後、次のバッチに進む前に AKS が待機する時間を制御します。
更新を開始する前に、サージ ノードに十分なコンピューティング クォータとサブネット IP 容量があることを確認し、ポッドの中断予算によってノードのドレインが許可されていることを確認します。
ゾーンの配置を確認する
クラスターまたはノード プールを作成または更新した後、 az aks show コマンドを使用して AKS によって選択されたゾーンを確認します。
az aks show \
--name example-cluster \
--resource-group example-rg \
--query agentPoolProfiles[].availabilityZones \
--output tsv
kubectlを使用して、ゾーン間のノード分布を確認することもできます。
kubectl get nodes -o custom-columns='NAME:metadata.name, REGION:metadata.labels.topology\.kubernetes\.io/region, ZONE:metadata.labels.topology\.kubernetes\.io/zone'
出力例:
NAME REGION ZONE
aks-nodepool1-12345678-vmss000000 eastus eastus-1
aks-nodepool1-12345678-vmss000001 eastus eastus-2
aks-nodepool1-12345678-vmss000002 eastus eastus-3
...