概要
LWKD(Week Ending Nov 30, 2025)で取り上げられた、Cluster API(CAPI)v1.12.0-rc.1 の開発トピック。v1.12系のリリース候補で、in-place updates(既存Machineを消さずに更新)、managed topologyの複数マイナー連続アップグレード(chained upgrades)、および関連する新Feature Gate(InPlaceUpdates / MachineTaintPropagation / ReconcilerRateLimiting)などがハイライト。RCのため基本は検証用途。
変更内容(何が変わったか)
- In-place updates(
InPlaceUpdates)- 「Machineを削除→再作成」ではなく、既存Machine上で更新を実行するための仕組み(update extension)を導入。
- KCP(KubeadmControlPlane)とMachineDeploymentがin-place updatesに対応(update extensionベース)。
InPlaceUpdatesfeature gate(alpha / デフォルト無効)で有効化。
- Chained upgrades(managed topologies向け)
- managed topology(ClusterClass利用)で、Kubernetesを1マイナーずつに限定せず、複数マイナーを段階的に進める「chained & efficient upgrades」をサポート。
- アップグレード計画(upgrade plan)は ClusterClassのKubernetes versions もしくは ClusterClassで定義するruntime extension(GenerateUpgradePlan系)から計算。
- ライフサイクルフックもこの流れに合わせて拡張。
- MachineHealthCheck(MHC)の条件ベースチェック
- MHCがNode条件だけでなく、**Machine条件(unhealthyMachineConditions)**でも不健康判定できるように。
- Taint propagation(
MachineTaintPropagation)- Machine側のtaintsをNodeへ伝播させるためのAPI/実装の「第一段」(Machine/MachineSet/MachineDeployment)を導入。
MachineTaintPropagationfeature gate(alpha / デフォルト無効)で有効化。
- Reconciler rate limiting(
ReconcilerRateLimiting)ReconcilerRateLimitingfeature gate(alpha / デフォルト無効)で、reconcilerを最大 1 req/sec にレート制限。
- 依存関係更新(開発者向け影響)
- Go 1.24、controller-runtime v0.22、k8s.io/* v0.34、controller-gen v0.19 への更新が明記。
- RC.0→RC.1の差分
v1.12.0-rc.0から 14コミット / 7バグ修正。
背景(なぜこの変更が必要か)
- In-place updates
- CAPIの基本は「immutable rollout(作り直し)」で、単純・予測可能・テストしやすい一方、ベアメタル等では再ブートストラップが遅い/コスト高などの課題がある。
- proposalでは、外部のupdate extensionが「どの変更をin-placeで扱えるか」を申告し、CAPIがオーケストレーション、カバーできない変更は従来のrolloutにフォールバックする方針が示されている。
- Chained upgrades(managed topologies)
- managed topologiesは利便性が高いが、従来は「次のマイナーへ」の1段前提になりがちで、追従が遅れるとアップグレードが重くなる。
- proposalでは、Kubernetesのversion skew policyも踏まえつつ、managed topologyでも「複数マイナーを計画的に進める」ギャップを埋める狙いが説明されている。
- MHCのMachine条件チェック
- Node条件だけでは表現できない、コントロールプレーン関連の状態などをMachine条件で拾いたい(例:コントロールプレーンが正しく作れているかの観点)という動機がPRで説明されている。
- Taint propagation
- taintは運用上重要だが、これまではbootstrap provider(例:kubeadm config)や手動操作に寄り、更新がrollout要因になり得た。proposalは、CAPIの上位リソースからNode taintsを宣言的に扱う方向性を示す。
影響(運用者/利用者/開発者への影響、注意点、移行)
- 運用者/利用者
v1.12.0-rc.1はRC(検証用途)。本番投入は慎重に。InPlaceUpdates/MachineTaintPropagation/ReconcilerRateLimitingは alphaでデフォルト無効。有効化する場合は、管理クラスタのCAPIコントローラのfeature gate設定が必要。- managed topologyのchained upgradesを使う場合、ClusterClass側(例:利用可能Kubernetes versionsやextension定義)の整備が前提になり得る。
- 開発者(CAPI/プロバイダ/拡張実装者)
- in-place updatesはRuntime hooks/extensionsと結びつくため、拡張実装・運用設計(権限/更新責務/フォールバック時の挙動)が重要。
- Go 1.24等の依存関係更新により、CI/開発環境の追従が必要になる可能性がある。
用語メモ(用語の軽い説明)
- Feature gate: 機能の有効/無効を切り替える仕組み(CAPIでは実験的機能の多くがデフォルト無効)。
- Runtime Extension / Runtime Hook: CAPIのライフサイクル中に外部コンポーネントを呼び出して拡張する仕組み。
- KCP(KubeadmControlPlane): kubeadmベースのコントロールプレーン管理リソース。
- MachineDeployment: worker Machine群のローリング更新等を担うCAPIリソース(KubernetesのDeploymentに相当)。
- MachineHealthCheck(MHC): Machineの不健康を検知し、修復(remediation)をトリガする仕組み。
参考リンク
https://lwkd.info/2025/20251203https://github.com/kubernetes-sigs/cluster-api/releases/tag/v1.12.0-rc.1https://github.com/kubernetes-sigs/cluster-api/blob/main/CHANGELOG/v1.12.0.mdhttps://github.com/kubernetes-sigs/cluster-api/blob/main/docs/proposals/20240807-in-place-updates.mdhttps://github.com/kubernetes-sigs/cluster-api/issues/12291https://github.com/kubernetes-sigs/cluster-api/pull/12755https://github.com/kubernetes-sigs/cluster-api/blob/main/feature/feature.gohttps://github.com/kubernetes-sigs/cluster-api/blob/main/docs/book/src/tasks/experimental-features/experimental-features.mdhttps://github.com/kubernetes-sigs/cluster-api/blob/main/docs/proposals/20250513-chained-and-efficient-upgrades-for-clusters-with-managed-topologies.mdhttps://kubernetes.io/releases/version-skew-policy/https://github.com/kubernetes-sigs/cluster-api/pull/12827https://github.com/kubernetes-sigs/cluster-api/blob/main/api/core/v1beta2/machinehealthcheck_types.gohttps://github.com/kubernetes-sigs/cluster-api/blob/main/docs/proposals/20250513-propogate-taints.mdhttps://github.com/kubernetes-sigs/cluster-api/issues/12972https://github.com/kubernetes-sigs/cluster-api/pull/12936https://github.com/kubernetes-sigs/cluster-api/pull/12966https://github.com/kubernetes-sigs/cluster-api/pull/13006https://cluster-api.sigs.k8s.io/reference/versions.html