repl.info

ClusterAPI v0.3.0の変更点

2020年3月11日(JST)にClusterAPI v0.3.0がリリースされました。本記事では、v0.3.0でどのような変更があったのかについて、v0.3.0のリリースノートを眺めてみます。

v0.3.0で実装されたプロポーザル

Kubeadm based control plane

Proposal: https://github.com/kubernetes-sigs/cluster-api/blob/master/docs/proposals/20191017-kubeadm-based-control-plane.md

このプロポーザルは、ClusterAPI がコントロールプレーンマシンを単一概念として管理するための新しいプロセスの概要です。アップグレード、スケールアップ、コントロールプレーンマシンが使うイメージの変更(例:AMI)を含んでいます。

2019年の時点では、各InfrastructureProviderでコントロールプレーン管理が実装されていました。ブートストラップの処理がClusterAPI Bootsrap Provider Kubeadm(CABPK)として共通化されたのと同様、各プロバイダーでコントロールプレーンの管理について実装しなくても良いように共通化するもののようです。BootstrapProviderとあわせて、InfrastructureProvider側で実装すべきコードが減るのは良さそうですね。

Clusterctl v2

Proposal: https://github.com/kubernetes-sigs/cluster-api/blob/master/docs/proposals/20191016-clusterctl-redesign.md

これまでclusterctlコマンドは各プロバイダーで微妙に異なる物が提供されており、混乱の元になっていました。また、clusterctlのスコープが広く、複雑になっていたようです。v2ではDay1におけるエクスペリエンスをスコープとし、最適化されたCLIを提供するように変更されています。

Machine Health Checking and Remediation

Proposal: https://github.com/kubernetes-sigs/cluster-api/blob/master/docs/proposals/20191030-machine-health-checking.md

マシンのヘルスチェック自動化と、異常なノードの修復を行う提案です。これにより、クラスタ管理のオーバーヘッド削減、マシン障害に対する回復力を高めることができます。

実装としてはMachineHealthChecker(MHC)があり、これは異常なノードを提供するマシンを削除することでクラスターノードを正常に保とうとします。

MachinePool (experimental)

Proposal: https://github.com/kubernetes-sigs/cluster-api/blob/master/docs/proposals/20190919-machinepool-api.md

AWSのAuto Scale GroupやGCPのManaged Instance Group、AzureのVirtual Machine Scale Setなど、クラウドサービスのマシンプール機能を使えるようにする提案です。全てのインフラストラクチャプロバイダーがマシンプール機能を持つわけではないので、オプションとして提供されています。AWSなどを使っている場合は使えるというわけですね。

v0.3.0-rc.3からの変更点

新機能

  • KubeadmControlPlaneのReconcile時にCoreDNSイメージ情報を更新するようになりました (#2574)
  • KubeadmControlPlaneの更新時にkubeproxyデーモンセットも更新するようになりました (#2559)
  • KubeadmControlPlaneの更新時にetcdのアップグレードも行われるようになりました (#2579)
  • clusterctl: 隔離された環境の全てのイメージを上書きできるようになりました (#2586)
  • clusterctl: cert-managerイメージの上書きが許可されました (#2558)
  • MachineHealthCheck の修正ロジックが追加されました (#2494)

バグフィックス

  • KubeadmControlPlaneにおいて、etcdの設定をバリデーションする際のN P(nil pointer exception)を修正しました (#2616)

その他

  • upgradeAfter フィールドが変更可能になりました (#2604)
  • KubeadmControlPlaneのspec.versionをミュータブルにできるようになりました (#2582)
  • コントロールプレーンのEtcdがローカルにもエクスターナルにもない際のバリデーションを追加しました (#2598)
  • KubeadmControlPlane内でバージョニングを一致させるための修正 (#2624)
  • Kubeadm v1beta1 typesからプライベートAPIが削除されました (#2605)
  • etcdの変更を行うため、コントロールプレーンのwebhookバリデーションが緩和されました (#2553)
  • 削除されたオブジェクトをcontroller.Watchに渡すようになりました (#2576)
  • リポジトリ全体でGoモジュールのクリーンアップ (#2552)
  • KubeadmControlPlane nodesにNoExecute taintのチェックが追加されました (#2550)
  • Metal3プロバイダーのリポジトリが変更されました (#2540)
  • cmd-clusterctl-api/tests: gomegaのインポート方法が標準化されました (#2615)
  • tests: gomegaのインポート方法が標準化されました(フォローアップ) (#2589)
  • tests: gomega/ginkgoのインポート方法が標準化されました (#2571)

所感

v0.2.0から引き続き、統合できる物は統合して個々のInfrastructureProviderを開発しやすくしたり、CLIツールの責務を整理して扱いやすくしたりという変更が目立ちます。また、MachineHealthCheckやMachinePoolのような新しい仕組みも追加されており、まだまだ進化してるな〜と感じました。v0.3.0も一度触ってみようと思います。