概要

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 GateInPlaceUpdates / MachineTaintPropagation / ReconcilerRateLimiting)などがハイライト。RCのため基本は検証用途。

変更内容(何が変わったか)

  • In-place updates(InPlaceUpdates
    • 「Machineを削除→再作成」ではなく、既存Machine上で更新を実行するための仕組み(update extension)を導入。
    • KCP(KubeadmControlPlane)とMachineDeploymentがin-place updatesに対応(update extensionベース)。
    • InPlaceUpdates feature 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)を導入。
    • MachineTaintPropagation feature gate(alpha / デフォルト無効)で有効化。
  • Reconciler rate limiting(ReconcilerRateLimiting
    • ReconcilerRateLimiting feature 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 / ReconcilerRateLimitingalphaでデフォルト無効。有効化する場合は、管理クラスタの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/20251203
  • https://github.com/kubernetes-sigs/cluster-api/releases/tag/v1.12.0-rc.1
  • https://github.com/kubernetes-sigs/cluster-api/blob/main/CHANGELOG/v1.12.0.md
  • https://github.com/kubernetes-sigs/cluster-api/blob/main/docs/proposals/20240807-in-place-updates.md
  • https://github.com/kubernetes-sigs/cluster-api/issues/12291
  • https://github.com/kubernetes-sigs/cluster-api/pull/12755
  • https://github.com/kubernetes-sigs/cluster-api/blob/main/feature/feature.go
  • https://github.com/kubernetes-sigs/cluster-api/blob/main/docs/book/src/tasks/experimental-features/experimental-features.md
  • https://github.com/kubernetes-sigs/cluster-api/blob/main/docs/proposals/20250513-chained-and-efficient-upgrades-for-clusters-with-managed-topologies.md
  • https://kubernetes.io/releases/version-skew-policy/
  • https://github.com/kubernetes-sigs/cluster-api/pull/12827
  • https://github.com/kubernetes-sigs/cluster-api/blob/main/api/core/v1beta2/machinehealthcheck_types.go
  • https://github.com/kubernetes-sigs/cluster-api/blob/main/docs/proposals/20250513-propogate-taints.md
  • https://github.com/kubernetes-sigs/cluster-api/issues/12972
  • https://github.com/kubernetes-sigs/cluster-api/pull/12936
  • https://github.com/kubernetes-sigs/cluster-api/pull/12966
  • https://github.com/kubernetes-sigs/cluster-api/pull/13006
  • https://cluster-api.sigs.k8s.io/reference/versions.html