覚書

Kubebuilder migration v1 to v2

  • https://book.kubebuilder.io/migration
  • v1 vs v2
    • v2ではgo modulesを使う(go 1.13のリリースまではdepをサポートし続ける)
    • controller-runtime
      • Client.Listの引数が List(ctx, ListOptions, list) から List(ctx, list, ...option) に変更
      • Client.DeleteAllOfはClientインターフェースに追加された
      • メトリクスがデフォルトになった
      • pkg/runtime以下の多くのパッケージが移動し、古い場所のものは非推奨となった。古い場所のものはcontroller-runtime v1.0.0で削除される。詳細情報は godoc を参照
      • webhook関係
        • webhook用の証明書自動生成は削除され、webhookはもはや自己登録されない。webhookの設定を生成するためにはcontroller-toolsを使う。証明書の生成が必要な場合、cert-managerを使うことを推奨する。kubebuilder v2はcert-manager用の設定を生成する予定である
    • controller-tools
      • ジェネレータフレームワークはv2で書き直された。多くのケースでは以前と同じように動くが、いくつかの破壊的変更がある。詳細は marker docを見て欲しい
    • Kubebuilder
      • Kubebuilder v2は簡略化されたプロジェクトレイアウトを提供する。デザインドックについては ここ から見ることができる
      • v1では、マネージャーはStatefulSetとしてデプロイされるが、v2ではDeploymentとしてデプロイされる
      • kubebuilder create webhook コマンドはwebhookのmutatingとvalidating、conversionをスキャフォルドするため追加された。これはkubebuilder alpha webhookを置き換える
      • v2はdistroless/staticをubuntu ベースイメージの代わりに使う。これはイメージサイズとアラックサーフェスを小さくする。
      • v2はkustomize v3.1.0以上のバージョンを必要とする。
  • Migration from v1 to v2
    • 読み進める前に、kubebuilder v1とv2の違いについて理解してください
    • インストールガイドにしたがって必要なコンポーネントをインストールしておいてください
    • 推奨するv1プロジェクトの移行方法は、新しくv2プロジェクトを作成してAPIとReconcileコードをコピーすることです。
    • 変更は結局プロジェクトがv2ネイティブに見えるようになれば終わる
    • しかし、いくつかのケースでは、インプレースアップグレードが可能である(v1プロジェクトのレイアウトを使い、controller-runtimeとcontroller-toolsをアップグレードする)
    • example v1プロジェクトをKubebuilder v2に移行していこう。最終的には、我々はexample v2プロジェクトに見えるものを手にしている。