適用対象: ✔️ AKS 自動 ✔️ AKS Standard
この記事では、サポートされている マネージド システム ノード プール と AKS Standard 構成の間で AKS 自動クラスターを移行する方法について説明します。
サポートされる移行パス
| 移行経路 | Support |
|---|---|
マネージド システム ノード プールを備えた AKS Automatic から AKS Standard (base SKU) へ |
サポートされている |
| マネージド システム ノード プールなしの AKS Automatic から、マネージド システム ノード プールありの AKS Automatic へ | マネージド システム ノード プールが一般公開されているリージョンでプレビューでサポートされます |
マネージド システム ノード プールを使用した、AKS Standard (base SKU) から AKS Automatic への移行 |
マネージド システム ノード プールが一般公開されているリージョンでプレビューでサポートされます |
| マネージド システム ノード プールを使用する AKS Automatic から、マネージド システム ノード プールを使用しない AKS Automatic へ | サポートしていません |
マネージド システム ノード プールを使用することで、AKS はシステム ノード プールとシステム コンポーネントを自動的にプロビジョニング、スケーリング、アップグレードし、ワークロードから分離します。 AKS 自動クラスターは、ポッドの準備 SLA とアップタイム SLAによっても保証されています。 詳細については、「 マネージド システム ノード プールを使用した AKS 自動クラスターの概要」を参照してください。
マネージド システム ノード プールを含む AKS 自動クラスターから AKS Standard クラスターに移行する
移行のしくみ
マネージド システム ノード プールを含む AKS 自動クラスターは、AKS が自動的にプロビジョニング、スケーリング、アップグレードするシステム ノード プールでシステム コンポーネントを実行します。
Important
AKS Standard (base SKU) クラスターではマネージド システム ノード プールが有効になっていないため、システム ノード プールとシステム コンポーネントの実行、管理、アップグレードを行う必要があります。
AKS Automatic から AKS Standard に移行するには、次の大まかな手順を実行します。
- 自己管理システム ノード プールを AKS 自動クラスターに追加します。
- クラスター SKU を
automaticからbaseに更新します。
SKU を更新すると、クラスターは AKS Standard クラスターとして実行され、追加して管理したシステム ノード プールでシステム コンポーネントが実行されます。
AKS Standard クラスターへの移行
az aks nodepool addコマンドを使用して、既存の AKS 自動クラスターに自己管理システム ノード プールを追加します。 移行後にシステム コンポーネントを実行できるように、ノード プール モードをSystemに設定します。az aks nodepool add \ --resource-group "${RESOURCE_GROUP}" \ --cluster-name "${RESOURCE_NAME}" \ --name systempool \ --mode System \ --node-count 3automaticコマンドを使用して、クラスター SKU をbaseからaz aks updateに更新します。az aks update \ --resource-group "${RESOURCE_GROUP}" \ --name "${RESOURCE_NAME}" \ --sku base
移行を検証する
baseコマンドを使用して、クラスターでaz aks showSKU が使用されていることを確認します。az aks show \ --resource-group "${RESOURCE_GROUP}" \ --name "${RESOURCE_NAME}" \ --query "sku" \ --output tableSystemコマンドを使用して、クラスター上のノード プールを一覧表示して、セルフマネージド システム ノード プールが存在し、az aks nodepool listモードであることを確認します。az aks nodepool list \ --resource-group "${RESOURCE_GROUP}" \ --cluster-name "${RESOURCE_NAME}" \ --query "[].{Name:name, Mode:mode, Count:count}" \ --output table
マネージド システム ノード プールのない AKS 自動クラスターから、マネージド システム ノード プールを使用して AKS Automatic に移行する (プレビュー)
AKS 自動では、非管理対象システム ノード プールから、マネージド システム ノード プールが一般公開されているリージョンのマネージド システム ノード プールへのプレビュー移行がサポートされます。 この移行により、クラスターは automatic SKU に保持され、AKS システム コンポーネントは AKS によって管理されるシステム ノード プールに移動されます。
Prerequisites
Important
AKS のプレビュー機能は、セルフサービスのオプトイン単位で利用できます。 プレビューは、"現状有姿のまま" および "利用可能な限度" で提供され、サービス レベル アグリーメントおよび限定保証から除外されるものとします。 AKS プレビューは、ベストエフォート ベースでカスタマー サポートによって部分的にカバーされます。 そのため、これらの機能は運用環境での使用を目的としていません。 詳細については、次のサポート記事を参照してください。
- マネージド システム ノード プールのない既存の AKS 自動クラスター。
- Azure CLI バージョン 2.86.0 以降。 バージョンを見つけるには、
az --versionを実行します。 インストールまたはアップグレードが必要な場合は、Azure CLI のインストールを参照してください。 - 最新バージョンの
aks-previewAzure CLI 拡張機能。 - サブスクリプションに登録されている
Microsoft.ContainerService/NonHoboToHoboConversionPreview機能フラグ。
NonHoboToHoboConversionPreview コマンドを使用して、az feature register機能フラグを登録します。
az feature register \
--namespace Microsoft.ContainerService \
--name NonHoboToHoboConversionPreview
az feature show コマンドを使用して、登録の状態を確認します。
az feature show \
--namespace Microsoft.ContainerService \
--name NonHoboToHoboConversionPreview \
--query properties.state \
--output tsv
続行する前に、コマンドが Registered を返すまで待ちます。 次に、 Microsoft.ContainerService リソース プロバイダーの登録を更新します。
az provider register --namespace Microsoft.ContainerService
aks-preview拡張機能をインストールまたは更新します。
az extension add --name aks-preview
az extension update --name aks-preview
AKS で管理される仮想ネットワーク クラスターを移行する
AKS マネージド ネットワークを使用する AKS 自動クラスターの場合は、--enable-hosted-system パラメーターを指定して az aks update コマンドを使用して、マネージド システム ノード プールに移行します。
az aks update \
--resource-group "${RESOURCE_GROUP}" \
--name "${RESOURCE_NAME}" \
--enable-hosted-system
カスタム仮想ネットワーク クラスターを移行する
カスタム仮想ネットワークを使用する AKS 自動クラスターの場合は、 --system-node-subnet-id パラメーターを使用してマネージド システム ノード プールのサブネットを指定します。 システム ノード サブネットは次の手順を実行する必要があります。
- クラスターと同じ仮想ネットワークとリージョンに存在する。
- 少なくとも
/26。 - 別のサービスに委任されません。
- ノード サブネットとは異なります。
--node-subnet-id パラメーターは省略可能です。 指定しない場合、AKS は既存のシステム ノード プール サブネットを使用します。
az aks update \
--resource-group "${RESOURCE_GROUP}" \
--name "${RESOURCE_NAME}" \
--enable-hosted-system \
--system-node-subnet-id "${SYSTEM_NODE_SUBNET_ID}" \
--node-subnet-id "${NODE_SUBNET_ID}"
移行を検証する
az aks show コマンドを使用して、クラスターでマネージド システム ノード プールが使用されたことを確認します。
az aks show \
--resource-group "${RESOURCE_GROUP}" \
--name "${RESOURCE_NAME}" \
--query hostedSystemProfile \
--output json
次の出力例は、trueに設定された hostedSystemProfile.enabled プロパティを示しています。
{
"enabled": true,
"nodeSubnetId": "<node-subnet-resource-id>",
"systemNodeSubnetId": "<system-node-subnet-resource-id>"
}
AKS Standard クラスターから、マネージド システム ノード プールを使用する AKS Automatic クラスターに移行する (プレビュー)
AKS では、AKS Standard (base SKU) クラスターから、マネージド システム ノード プールが一般公開されているリージョンのマネージド システム ノード プールを使用する AKS Automatic クラスターへのプレビュー移行がサポートされています。
移行するには、最初に AKS 自動構成に一致するように AKS Standard クラスターを構成してから、クラスター SKU を更新します。 ほとんどの作業は、クラスターを準備することです。 いくつかの設定は最初に構成されている他の設定に依存するため、次のセクションを順番に完了してください。
始める前の準備
Important
AKS のプレビュー機能は、セルフサービスのオプトイン単位で利用できます。 プレビューは、"現状有姿のまま" および "利用可能な限度" で提供され、サービス レベル アグリーメントおよび限定保証から除外されるものとします。 AKS プレビューは、ベストエフォート ベースでカスタマー サポートによって部分的にカバーされます。 そのため、これらの機能は運用環境での使用を目的としていません。 詳細については、次のサポート記事を参照してください。
- 既存の AKS Standard (
baseSKU) クラスター。 一般的な AKS 自動要件と制限事項については、「クイック スタート: Azure Kubernetes Service (AKS)自動クラスターの作成」および「マネージド システム ノード プールを使用した AKS 自動クラスターの概要」を参照してください。 - Azure CLI バージョン 2.86.0 以降と、
aks-preview拡張機能の最新バージョン。 - サブスクリプションに登録されている
Microsoft.ContainerService/NonHoboToHoboConversionPreview機能フラグ。 機能フラグを登録して拡張機能をインストールするには、「前提条件」の手順に従います。
クラスターの環境変数を設定してください:
export RESOURCE_GROUP="<resource-group>"
export RESOURCE_NAME="<cluster-name>"
export NODE_RESOURCE_GROUP=$(az aks show --resource-group "${RESOURCE_GROUP}" --name "${RESOURCE_NAME}" --query nodeResourceGroup --output tsv)
移行要件
SKU を更新する前に、クラスターが次の要件を満たしている必要があります。 一部の要件は、クラスターで AKS マネージド仮想ネットワークを使用するか、カスタム仮想ネットワークを使用するかによって異なります。 これらの設定は、Azure ポータル、Azure CLI、ARM テンプレート、またはその他のツールを使用して構成できます。 この記事の残りの部分では、Azure CLI の手順を、適用する順序で説明します。
| Requirement | 必須の設定 | 詳細を表示 |
|---|---|---|
| クラスター レベル | Standard | AKS 価格レベル |
| ロードバランサー SKU | Standard | 送信方向の種類を使用してクラスター エグレスをカスタマイズする |
| 送信の種類 | AKS マネージド仮想ネットワーク: マネージド NAT ゲートウェイ (StandardV2)。
loadBalancer送信の種類はサポートされていません。カスタム仮想ネットワーク: 任意のアウトバウンドの種類。 |
クラスターの作成後に outboundType を更新する |
| クラスター ID | AKS マネージド仮想ネットワーク: システム割り当てマネージド ID。 カスタム仮想ネットワーク: 仮想ネットワーク上の ネットワーク共同作成者 ロールを持つユーザー割り当てマネージド ID。 |
ユーザー割り当てマネージド ID を使用する |
| API Server VNet 統合 | ノードと同じ仮想ネットワーク内の専用 API サーバー サブネットで有効 | 既存の AKS Standard クラスターを API Server VNet 統合に変換する |
| ネットワーク プラグイン | Azure CNI オーバーレイ(azure モードの overlay プラグイン) |
IPAM モードを Azure CNI Overlay に更新する |
| ネットワーク データプレーンとネットワーク ポリシー | Cilium | cilium を搭載した Azure CNI |
| ノードプロビジョニングモード | Auto | ノードの自動プロビジョニング |
| システム ノード プールの OS SKU | Azure Linux | Azure Linux コンテナー ホストを使用する |
| システム ノード プールの SSH アクセス | 無効 | AKS クラスター ノードでの SSH アクセスの管理 |
| システム ノード プールの OS ディスク | エフェメラル | AKS のエフェメラル OS ディスク |
| Azure Policy アドオン | Enabled | Azure Policyを使用する |
| Azure Key Vault シークレット プロバイダー アドオン | シークレットローテーションがオンになっている状態で有効 | シークレット ストア CSI ドライバーを使用する |
| 自動更新チャネル | クラスター: stableノード OS: NodeImage |
AKS クラスターを自動的にアップグレードする |
| ワークロード ID と OIDC 発行元 | Enabled | Microsoft Entra ワークロード ID を使用する |
| Microsoft Entra統合とAzure RBAC | Enabled | Microsoft Entra の統合 |
| ローカル アカウント | 無効 | Microsoft Entra統合を使用してローカル アカウントを管理する |
| 画像クリーナー | Enabled | イメージ クリーナー |
| 垂直ポッドオートスケーラー (Vertical Pod Autoscaler) | Enabled | 垂直ポッドの自動スケーリング |
| ケダ | Enabled | KEDA |
| ノード リソース グループのロックダウン | ReadOnly |
ノード リソース グループのロックダウン |
移行を計画する
クラスターで AKS で管理される仮想ネットワークとカスタム仮想ネットワークのどちらを使用するかを決定します。 次のコマンドが仮想ネットワーク名を返す場合、クラスターは AKS で管理される仮想ネットワークを使用します。 何も返されない場合、クラスターはカスタム仮想ネットワークを使用します。
az network vnet list --resource-group "${NODE_RESOURCE_GROUP}" --query "[].name" --output tsvこの記事のいくつかの手順は、仮想ネットワークの種類によって異なります。
クラスターの現在のネットワーク プラグイン、アウトバウンドの種類、ロード バランサー SKU、ノード リソース グループの制限レベルを確認します。
az aks show \ --resource-group "${RESOURCE_GROUP}" \ --name "${RESOURCE_NAME}" \ --query "{networkPlugin:networkProfile.networkPlugin, networkPluginMode:networkProfile.networkPluginMode, outboundType:networkProfile.outboundType, loadBalancerSku:networkProfile.loadBalancerSku, nrgRestrictionLevel:nodeResourceGroupProfile.restrictionLevel}" \ --output table-
ネットワーク プラグイン:
overlayで、プラグイン モードはazureである必要があります。 クラスターでオーバーレイなしで kubenet または Azure CNI を使用している場合は、続行する前に Azure CNI Overlay に更新してください。 詳細については、「IPAM モードを Azure CNI Overlay に更新する」を参照してください。 -
ロード バランサー SKU:
standardである必要があります。 クラスターで引き続きbasicを使用している場合は、az aks update --load-balancer-sku standardに更新します。 -
ノード リソース グループの制限レベル: AKS で管理される仮想ネットワークの場合は、ノード リソース グループにサブネットを作成する必要があります。 制限レベルが
ReadOnlyの場合は、続行する前にUnrestrictedに設定してください。 後の手順でもう一度固定します。
-
ネットワーク プラグイン:
実行中のワークロードまたはアクセスを中断する変更を確認し、メンテナンス期間を計画します。
- 送信の種類を変更すると、クラスターのエグレス IP アドレスが変更されます。 クラスターからのトラフィックを許可するファイアウォール規則を更新します。
- API Server VNet 統合を有効にすると、API サーバーの IP アドレスが変更され、クラスターの再起動が必要になります。 この変更は恒久的なものです。
- ネットワーク データプレーン、OS SKU、SSH アクセス設定を変更すると、ノードが再イメージ化されます。
- ローカル アカウントを無効にすると、静的 kubeconfig 資格情報が削除されます。 無効にする前に、Microsoft Entra ID と Azure RBAC ロール経由でアクセス権があること (たとえば Azure Kubernetes Service RBAC Cluster Admin) を確認してください。
- この移行により、ベースラインポッドセキュリティ標準を使用して
Enforceモードでデプロイセーフガードが有効になります。 準拠していないデプロイは拒否されます。 名前空間は除外できますが、クラスター全体のレベルをWarnに切り替えることはできません。 移行する前にワークロードを確認してください。 詳細については、「展開セーフガードの使用」を参照してください。
クラスター ネットワークを準備する
送信の種類: AKS で管理される仮想ネットワークの場合、送信の種類はマネージド NAT ゲートウェイである必要があります。
loadBalancer送信方向の種類はサポートされていません。 必要に応じて、送信タイプを更新してください。az aks update \ --resource-group "${RESOURCE_GROUP}" \ --name "${RESOURCE_NAME}" \ --outbound-type managedNATGateway \ --outbound-type-sku StandardV2カスタム仮想ネットワークの場合、任意のアウトバウンドの種類がサポートされており、変更は必要ありません。 詳細については、「 クラスターの作成後に outboundType を更新する」を参照してください。
クラスター ID: AKS で管理される仮想ネットワークの場合は、クラスターのシステム割り当てマネージド ID を保持します。 カスタム仮想ネットワークの場合、クラスターでは、仮想ネットワークの Network Contributor ロールを持つユーザー割り当てマネージド ID を使用する必要があります。 必要に応じて、識別情報を割り当てます。
az aks update \ --resource-group "${RESOURCE_GROUP}" \ --name "${RESOURCE_NAME}" \ --enable-managed-identity \ --assign-identity "${IDENTITY_RESOURCE_ID}" \ --yesIDENTITY_RESOURCE_IDを、ユーザー割り当てマネージド ID のリソース ID に置き換えます。 詳細については、「ユーザー割り当てマネージド ID の使用」を参照してください。API サーバー サブネット: ノードと同じ仮想ネットワーク内に API サーバー用の専用サブネットを作成します。 サブネットは、ノード サブネットとは別で、少なくとも
/28であり、Microsoft.ContainerService/managedClustersに委任されている必要があります。AKS で管理される仮想ネットワークの場合は、ノード リソース グループ内の仮想ネットワークにサブネットを作成してください。
export VNET_NAME=$(az network vnet list --resource-group "${NODE_RESOURCE_GROUP}" --query "[0].name" --output tsv) export APISERVER_SUBNET_ID=$(az network vnet subnet create \ --resource-group "${NODE_RESOURCE_GROUP}" \ --vnet-name "${VNET_NAME}" \ --name apiserver-subnet \ --address-prefixes "<unused-address-range>" \ --delegations Microsoft.ContainerService/managedClusters \ --query id --output tsv)カスタム仮想ネットワークの場合は、代わりに独自の仮想ネットワークにサブネットを作成し、
APISERVER_SUBNET_IDにそのリソース ID を設定します。API Server VNet 統合: 作成したサブネットとの API Server VNet 統合を有効にし、クラスターを再起動します。
az aks update \ --resource-group "${RESOURCE_GROUP}" \ --name "${RESOURCE_NAME}" \ --enable-apiserver-vnet-integration \ --apiserver-subnet-id "${APISERVER_SUBNET_ID}" az aks stop --resource-group "${RESOURCE_GROUP}" --name "${RESOURCE_NAME}" az aks start --resource-group "${RESOURCE_GROUP}" --name "${RESOURCE_NAME}"詳細については、「既存の AKS Standard クラスターを API Server VNet 統合に変換する」を参照してください。
ネットワーク データプレーン: ネットワーク データプレーンを Cilium に更新します。 このコマンドでは、ネットワーク ポリシーも Cilium に設定されます。
az aks update \ --resource-group "${RESOURCE_GROUP}" \ --name "${RESOURCE_NAME}" \ --network-dataplane cilium詳細については、「Azure CNI Powered by Cilium」を参照してください。
Important
次のセクションで自動ノード プロビジョニング モードを有効にする前に、ネットワーク データプレーンを更新してください。 自動モードを有効にした後は、ネットワーク データプレーンを変更できません。
システム ノード プールとノード プロビジョニングを準備する
エフェメラル OS ディスク: システム ノード プールでは、エフェメラル OS ディスクを使用する必要があります。 現在の OS ディスクの種類を確認します。
az aks nodepool list \ --resource-group "${RESOURCE_GROUP}" \ --cluster-name "${RESOURCE_NAME}" \ --query "[?mode=='System'].{name:name, osDiskType:osDiskType}" \ --output table既存のノード プールの OS ディスクの種類を変更することはできません。 システム ノード プールで
ManagedOS ディスクが使用されている場合は、--mode System --node-osdisk-type Ephemeral --os-sku AzureLinux --ssh-access disabledし、システム ワークロードをそれに移動してから、古いノード プールを削除します。 その後、次の手順をスキップできます。OS SKU と SSH アクセス: Azure Linux を使用するようにシステム ノード プールを更新し、SSH アクセスを無効にします。
az aks nodepool update \ --resource-group "${RESOURCE_GROUP}" \ --cluster-name "${RESOURCE_NAME}" \ --name "<system-node-pool-name>" \ --os-sku AzureLinux \ --ssh-access disabled \ --yesこのコマンドは、ノード プールを再イメージ化します。 ノード プールに他の変更を加える前に、完了するまで待ちます。 詳細については、「Azure Linux コンテナー ホストの使用」および「AKS クラスター ノードでの SSH アクセスの管理」を参照してください。
ノード プロビジョニング モード: 自動ノード プロビジョニング モードを有効にします。
az aks update \ --resource-group "${RESOURCE_GROUP}" \ --name "${RESOURCE_NAME}" \ --node-provisioning-mode Auto自動モードを有効にした後は、最初にすべての自動プロビジョニングされたノードを削除しないと、手動モードに戻すことはできません。 詳細については、「ノードの自動プロビジョニング」を参照してください。
必要な機能とアドオンを有効にする
クラスター層を Standard に更新し、Azure Policy および Azure Key Vault シークレット プロバイダー アドオンを有効にし、シークレット ローテーションを有効にします。
az aks update --resource-group "${RESOURCE_GROUP}" --name "${RESOURCE_NAME}" --tier standard az aks enable-addons \ --resource-group "${RESOURCE_GROUP}" \ --name "${RESOURCE_NAME}" \ --addons azure-policy,azure-keyvault-secrets-provider \ --enable-secret-rotation残りの必要な機能を有効にする:
az aks update \ --resource-group "${RESOURCE_GROUP}" \ --name "${RESOURCE_NAME}" \ --auto-upgrade-channel stable \ --node-os-upgrade-channel NodeImage \ --enable-workload-identity \ --enable-oidc-issuer \ --enable-aad \ --enable-azure-rbac \ --disable-local-accounts \ --enable-image-cleaner \ --enable-vpa \ --enable-keda \ --yes
ノード リソース グループをロックダウンする
ノード リソース グループの制限レベルを ReadOnlyに設定します。 前に作成した API サーバー サブネットを含め、ノード リソース グループ内のリソースに対する変更がロックダウンによってブロックされるため、この手順を最後に実行します。
az aks update \
--resource-group "${RESOURCE_GROUP}" \
--name "${RESOURCE_NAME}" \
--nrg-lockdown-restriction-level ReadOnly
詳細については、「ノード リソース グループのロックダウン」を参照してください。
クラスターを AKS Automatic に移行する
要件がまだ満たされていない場合、移行コマンドは失敗し、検出された満たされていない要件が一覧表示されます。 一部のチェックは、以前のチェックが成功した後にのみ実行されるため、一覧の項目に対処し、成功するまでコマンドをもう一度実行してください。
AKS で管理される仮想ネットワーク
az aks update \
--resource-group "${RESOURCE_GROUP}" \
--name "${RESOURCE_NAME}" \
--sku automatic \
--enable-hosted-system
カスタム仮想ネットワーク
--system-node-subnet-id パラメーターを使用して、マネージド システム ノード プールのサブネットを指定してください。 サブネットの要件については、「 既存の AKS 自動クラスターをマネージド システム ノード プールに移行する」を参照してください。
--node-subnet-id パラメーターは省略可能です。 指定しない場合、AKS は既存のシステム ノード プール サブネットを使用します。
az aks update \
--resource-group "${RESOURCE_GROUP}" \
--name "${RESOURCE_NAME}" \
--sku automatic \
--enable-hosted-system \
--system-node-subnet-id "${SYSTEM_NODE_SUBNET_ID}" \
--node-subnet-id "${NODE_SUBNET_ID}"
移行を検証する
クラスターで
automaticSKU とStandardレベルが使用されていること、および更新が正常に完了したことを確認します。az aks show \ --resource-group "${RESOURCE_GROUP}" \ --name "${RESOURCE_NAME}" \ --query "{sku:sku, provisioningState:provisioningState}" \ --output jsonsku.nameがAutomatic、sku.tierがStandard、provisioningStateがSucceededされていることを確認します。クラスターでマネージド システム ノード プールを使用していることを確認します。
az aks show \ --resource-group "${RESOURCE_GROUP}" \ --name "${RESOURCE_NAME}" \ --query hostedSystemProfile \ --output jsonhostedSystemProfile.enabledがtrueされていることを確認します。 カスタム仮想ネットワークの場合は、systemNodeSubnetIdとnodeSubnetIdにサブネット リソース ID が表示されます。 AKS で管理される仮想ネットワークの場合、これらの値はnullです。クラスターの認証情報を取得し、すべてのノードが
Readyであることを確認します。az aks get-credentials --resource-group "${RESOURCE_GROUP}" --name "${RESOURCE_NAME}" kubectl get nodes -o wide
障害時の動作
移行でマネージド システム プール インフラストラクチャをプロビジョニングできない場合 (たとえば、リージョンの容量の制約のため)、AKS は既存のシステム ノード プールとユーザー ノード プールを移行前の状態で保持します。