Azure Kubernetes Service (AKS)はローリング アップグレードを実行して、実行中のワークロードの中断を最小限に抑えます。
ほとんどの運用ワークロードでは、AKS Automatic が推奨される既定値です (該当する場合)。 AKS Automatic には、Kubernetes バージョンの自動アップグレード、自動ノード オペレーティング システム (OS) イメージの更新、マネージド システム ノード操作、手動オーバーヘッドを軽減する組み込みのセーフガードなど、アップグレード操作用の運用対応の既定値が含まれています。 詳細については、「 AKS 自動の概要」を参照してください。
この記事では、AKS のアップグレードのしくみについて説明し、AKS Automatic と AKS Standard が異なる点について説明します。
[前提条件]
アップグレード モデル: AKS Automatic と AKS Standard
AKS 自動クラスター モードと AKS Standard クラスター モードでは、同じ Kubernetes アップグレードの基礎が使用されますが、既定値と運用所有権が異なります。
| アップグレードに関する懸念事項 | AKS Automatic | AKS Standard |
|---|---|---|
| 生産の位置付け | ほとんどの運用環境のワークロードに推奨される既定値 (該当する場合) | デフォルトではより多くの手動設定が必要な柔軟なモデル |
| Kubernetes マイナー バージョンのアップグレード | 事前構成済みの自動アップグレード チャネル | 既定では手動、オプションの自動チャネル |
| ノード OS イメージのアップグレード | 構成済みの自動ノード OS イメージ チャネル | 既定では手動、オプションの自動チャネル |
| システムノードプールの操作 | AKS によって管理される | お客様が管理 |
| 計画メンテナンス期間 | 既定で使用可能 | オプションの構成 |
| ワークロード中断制御 | 顧客管理(レプリカ戦略、準備動作、中断ポリシーなどを含む) | 顧客管理(レプリカ戦略、準備動作、中断ポリシーなどを含む) |
Note
AKS Automatic はプラットフォーム操作を簡素化しますが、共有責任は引き続き適用されます。 ワークロード レベルの可用性の設計と削除ポリシーの動作は、引き続きお客様の責任です。
AKS でのローリング アップグレード動作
AKS は、ノードの置き換えまたは再イメージ化中に容量を保持するローリング パターンを使用してノード プールをアップグレードします。 この動作は、すべての AKS クラスター モードで同じです。
大まかに言えば、AKS:
- アップグレード設定に基づいて一時的なサージ容量を追加します。
- ノードを切断してドレインし、ワークロードを移動します。
- ノードをターゲット バージョンに再イメージ化または置き換えます。
- 完了後に一時的な増強容量を削除します。
ローリングアップグレードの例
この例では、 maxSurge を 1 に設定して、2 ノード クラスターを Kubernetes 1.30 から 1.31 にアップグレードする方法を示します。
手順 1: 初期セットアップ
クラスターは、バージョン 1.30 を実行する 2 つのノードから始まり、各ホスト アプリケーション ポッドです。
- ノード 1: ポッド A、ポッド B
- ノード 2: ポッド C、ポッド D
- サージ ノード: 空 (DaemonSet と新しいポッドを除く)
手順 2: 最初のノードを隔離して排出する
AKS は、ノード 1 をコードンして新しいポッドのスケジューリングを防止し、その後、既存のポッドをドレインします。
- ポッド A →が削除され、サージ ノードで置き換えられました
- ポッド B →削除され、ノード 2 で置き換えられました
手順 3: 最初のノードをアップグレードする
ノード 1 は Kubernetes バージョン 1.31 で再イメージ化され、ポッドは他のノードで引き続き実行されます。
- ノード 1: v1.31 にアップグレード
- ノード 2: ポッド B、ポッド C、ポッド D
- サージ ノード: ポッド A
手順 4: 2 番目のノードをコルドンしてドレインする
AKS はノード 2 のプロセスを繰り返し、ポッドは削除され、スケジューラはそれらを適切な使用可能なノードに再配布します。
- ポッド C、B →削除され、ノード 1 で置き換えられました
- ポッド D →サージ ノードで削除および置換
- ノード 2: v1.31 にコード化および再イメージ化
手順 5: サージ ノードを削除する
すべての永続的なノードがアップグレードされると、サージ ノードは切断され、ドレインされ、削除されます。
- ポッド A →削除され、ノード 1 で置き換えられました
- ポッド D →削除され、ノード 2 で置き換えられました
- サージ ノード: 削除済み
最終状態
すべてのノードで Kubernetes バージョン 1.31 が実行され、クラスター全体でポッドがスケジュールされています。
- ノード 1 (v1.31): ポッド A、ポッド C
- ノード 2 (v1.31): ポッド B、ポッド D
制限付きポッド中断予算 (PDB) の動作
制限の厳しい PDB で削除がブロックされている場合、ノードのドレインが遅延または防止される可能性があります。 AKS では、設定された動作に応じて、Cordon ドレイン不可能なノードの動作を使用し、アップグレード対象の他のノードのアップグレードを続行できます。 ブロックされたノードは、ブロック状態が解決されるまで古いバージョンのままになることがあります。
制限付き PDB の例
この例では、2 ノード クラスターを Kubernetes 1.30 から 1.31 にアップグレードし、 maxSurge を 2 に設定し、PDB で最初のノードのドレイン操作をブロックする方法を示します。
手順 1: 制限の厳しい PDB を使用した初期セットアップ
クラスターはバージョン 1.30 を実行する 2 つのノードから始まり、PDB によってポッド A が削除されないように保護されます。
- ノード 1: ポッド A (PDB によって保護)、ポッド B
- ノード 2: ポッド C、ポッド D
- サージ ノード: 新しく作成された 2 つのノード
- PDB: ポッド A の退去を防止します
手順 2: 最初のノードを排水しようとする (ブロック中)
AKS はノード 1 を切断しますが、PDB の制限によりポッド A をドレインできません。
- ノード 1: 隔離され、検疫済みとしてマークされている (ポッド A が応答しない)
- ポッド B →サージ ノード 1 で削除および置換されますが、サージ ノード 2 は一時的に使用されません
- 状態: ノード 1 のアップグレードがブロックされました
手順 3: 2 番目のノードに進む
ノード 1 が検疫されると、AKS はノード 2 のアップグレードを続行します。
- ノード 1: 検疫されたままになります (v1.30)
- ノード 2: 隔離され、正常に排出された
- ポッド C →サージ ノード 2 で削除および置換
- ポッド D →サージ ノード 2 で削除され、置き換えられました
手順 4: 2 番目のノードをアップグレードする
ノード 2 が Kubernetes バージョン 1.31 に正常に再イメージ化されました。
- ノード 1: ポッド A で検疫済み (v1.30) のまま
- ノード 2: v1.31 にアップグレード
- サージ ノード 1: ポッド B
- サージ ノード 2: ポッド C、ポッド D
手順 5: 1つのサージ ノードが、もう一方のサージ ノードの削除に伴い、恒久的な置き換えノードになります
ノード 1 は検疫されたままであるため、サージ ノード 1 は v1.31 を実行している永続的な代替になり、サージ ノード 2 は削除されます。
- ノード 1: 検疫済み (v1.30) - 手動による介入が必要
- ポッド C、ポッド D →サージ ノード 2 から削除され、ノード 2 で置き換えられました
- サージ ノード 1 (v1.31): ポッド B (現在は永続的)
- サージ ノード 2 (v1.31): 削除済み
最終状態
アップグレードは、手動による介入を必要とする 1 つの検疫済みノードで完了します。
- ノード 1: ポッド A で検疫済み (v1.30) - お客様は手動で解決する必要があります ( 「解決できないノードの解決」を参照)
- ノード 2 (v1.31): 正常に実行されている
- 以前のサージ ノード (v1.31): 現在は恒久的な置き換え
Important
検疫されたノード (ノード 1) は、お客様の責任において処理されます。 次のいずれかを行う必要があります。
- ポッド A の削除を許可するように PDB を調整します。
- ポッド A を手動で削除します。
- ブロック条件を修正した後、ノードを削除して再作成します。
PDB でブロックされるアップグレードに関する主な考慮事項
-
[Undrainable node behavior]:この検疫動作を有効にするために、ノード プールの
Cordonに設定します。 - お客様の責任: 検疫されたノードを解決するには、手動による介入が必要です。
- クラスター容量: サージ ノードは永続的になり、クラスターの容量計画に影響を与える可能性があります。
- 監視: Azure Monitorまたは kubectl を使用して検疫済みノードを追跡し、タイムリーな解決を確保します。
Tip
検疫シナリオを完全に回避するために、 自動 PDB 管理 を使用してデプロイ レプリカを自動的にスケールアップし、ドレインが開始される前に PDB 制約が満たされるようにすることができます。 これにより、ブロックされることなく強制終了を実行できるため、手動での隔離解除作業が不要になります。
Blue-Green ノードプールのアップグレード(手動操作)
Blue-Green アップグレードでは、ワークロードを移行する前に新しいノード プールの完全なセットを手動で作成することで、より制御されたアップグレード アプローチが提供されます。 この手動アプローチでは、アップグレード プロセスとタイミングを完全に制御できます。
詳細については、 AKSBlue-Green ノード プールのアップグレードに関するページを参照してください。
Blue-Green アップグレードを使用するタイミング
手動による Blue-Green ノードプールのアップグレードは、明示的な移行チェックポイント、カスタムの検証ゲート、または厳密に管理された切り替えなど、特殊な要件に対応する高度な戦略です。
必要に応じ、手動 Blue-Green を使用します。
- オペレーターが制御する移行フェーズ。
- コミット前のカスタム検証と受け入れ条件。
- 内部運用手順書に紐付いた明示的なロールバック手順。
該当するほとんどの運用ワークロードでは、AKS 自動の既定のアップグレード動作が推奨される開始点であり、通常、手動 Blue-Green は例外的なケース用に予約されています。
重要な概念
- 青いノード プール: 現在の Kubernetes バージョンを実行している既存のノード プール。
- 緑のノード プール: ターゲット Kubernetes バージョンを実行して作成する新しいノード プール。
- 手動制御: 移行プロセスのすべての側面を管理します。
- 検証チェックポイント: 続行、一時停止、またはロールバックのタイミングを決定します。
Blue-Green アップグレードの利点
- フル コントロール: 各ステップがいつ行われるかを正確に決定します。
- カスタム検証: 独自の検証条件とタイミングを実装します。
- 段階的な移行: 好みのペースでワークロードを移動します。
- 簡単なロールバック: 元のノードは、削除するまで使用できます。
Blue-Green アップグレードに関する主な考慮事項
- 手動作業: プロセス全体を通じてアクティブな管理が必要です。
- クォータ要件: アップグレード中にノード容量の 2 倍が必要です。
- 計画: 検証基準とロールバック手順を文書化します。
手動 Blue-Green アップグレード プロセスの例
この例では、Blue-Green デプロイを使用して、2 ノード クラスターを Kubernetes 1.30 から 1.31 に手動でアップグレードする方法を示します。
手順 1: 緑のノード プールを作成する
まず、既存のノード プールと共に、ターゲットの Kubernetes バージョンで新しいノード プールを手動で作成します。
- 青いノード プール (v1.30): ポッド A、ポッド B、ポッド C、ポッド D (既存)
- 緑のノード プール (v1.31): 空 (手動で作成)
-
あなたのアクション: 新しい Kubernetes バージョンで
az aks nodepool addを実行する
手順 2: 青いノードを手動で切断する
青色のノードをスケジュール不可としてマークし、既存の Pod は実行したまま、新しい Pod がスケジュールされないようにします。
-
あなたのアクション: 各青いノードで
kubectl cordon - ブルー ノード: 切断、新しいポッドはスケジュールされない
- 緑のノード: ワークロードを受け取る準備ができました
手順 3: 青いノードを手動でドレインする (制御されたペース)
移行のペースを制御するには、ノードを一度に 1 つずつ手動でドレインするか、またはバッチでドレインします。
-
アクション: 選択されたブルー ノード上での
kubectl drain - ポッドの移行: ポッドが自動的に緑色のノードに再スケジュールされる
- 検証: 続行する前に、緑のノード上のワークロードを確認する
手順 4: 検証して決定する
ワークロードを移行した後、緑のノードでアプリケーションのパフォーマンスを検証します。
このフェーズでは、次のことができます。
- 監視: アプリケーションのメトリックとログを確認する
- テスト: 緑のノード プールで検証テストを実行する
- 決定: 緑にコミットするか、青にロールバックする
手順 5: コミットまたはロールバック
検証に基づいて、アップグレードまたはロールバックを手動で完了します。
オプション A - コミット (成功):
-
実行する操作:
az aks nodepool deleteを使用して青いノード プールを削除する - 結果: 緑のノード プールがプライマリになる
オプション B - ロールバック (問題が検出されました):
-
実行する操作:
kubectl uncordonを使用して青いノードのスケジューリング制限を解除し、kubectl drainを使用して緑のノードをドレインし、az aks nodepool deleteを使用して緑のノード プールを削除します - 結果: ワークロードが Blue ノードに戻る
アップグレード計画の運用に関する考慮事項
-
サージ (
maxSurge) 構成: アップグレード中に作成されるサージ ノードの数を制御します。 値を大きくするとアップグレードが高速化されますが、より多くのリソースが消費されます。 - ポッド中断予算 (PDB): アップグレード プロセス中にアプリケーションの可用性を確保するように PDB を構成します。
- ノード プールのアップグレード: 各ノード プールは個別にアップグレードされます。 それに応じてアップグレード戦略を計画します。
- 容量とクォータ: アップグレード ウィンドウの前に、一時的な安定状態の容量要件を検証します。
- 監視とアラート: アップグレードを開始する前に、監視とアラートを設定します。
AKS 自動では、運用環境の準備のために、いくつかのプラットフォーム レベルのアップグレードの選択肢が事前に構成されています。 AKS Standard では、チームは通常、これらの選択を明示的に行います。