Kubernetes 1.29 の CHANGELOG から SIG Cluster Lifecycle の取り組みについてにピックアップしました。
久しぶりに「Urgent Upgrade Notes」に登場してびっくりです。
重大なアップグレードに関する警告 (Urgent Upgrade Notes)
kubeadm upgrade plan --config の振る舞いの変更 (#120788, @chendave)
kubeadm upgrade plan --config で指定するコンフィグ中で kube-proxy と kubelet のコンポーネント設定を受け付けなくなりました。
上記の振る舞いはアップグレードのプラン中にクラスタに保存されているこれらのコンポーネントの設定を手動でバージョンマイグレーションする必要があるかどうかを判断するためだけに使われていたため削除されたようです。
この変更はkubeadm の設定ファイル v1beta4 で導入される予定のUpgradeConfiguration/ResetConfiguration のための下準備のようです。今までは、メインのサブコマンドであるinitおよびjoin用の設定ファイル (InitConfiguration/JoinConfiguration) は定義されていたものの、残りのupgradeおよびresetのための設定が定義されていなかったため、専用に用意することになったようです。
コンポーネントの設定をマイグレーションするかどうかの判断は UpgradeConfiguration でされるようになるのかもしれません。
admin.conf の権限の変更 (#121305, @neolit123)
admin.conf とは別に、独立した super-admin.conf ファイルがデプロイされるようになりました。
それに伴い、それぞれの設定ファイル中の「認可」で利用されるユーザグループの変更がありました。
| 設定ファイル | ユーザグループ | 権限 | 備考 |
|---|---|---|---|
admin.conf |
kubeadm:cluster-admins |
cluster-admin |
今までは system:masters だった |
super-admin.conf |
system:masters |
組み込み権限 | 新設 |
admin.conf にはこれまで system:masters のGroupの権限を付与されていましたが、それは必要な権限よりも大きな権限であったため、変更されたようです。
system:masters は単に cluster-admin にバインディングされているだけではなく、apiserver で全てのRBACをバイパスするようハードコードされている 超強力 なユーザグループなので、軽々しく使わない方が良さそうです。
この変更に伴う、init, upgrade, join および certs renew への影響は以下の通りです。
-
init:kubeadm init phase kubeconfig allまたは単にkubeadm initでsuper-admin.confを生成するようになりました。 -
upgrade: このバージョンのkubeadmでは、super-admin.confおよびadmin.confをセットアップします。また、以降のkubeadmでは、super-admin.confが存在し、アップグレード時の更新が無効になっていない場合にsuper-admin.confを更新します。 -
join: より少ない特権 User を持つadmin.confファイルのみを生成するようになりました。 -
certs renew: ファイルが存在する場合、super-admin.confの証明書を1年間更新します。
種類別の変更 (Changes by Kind)
廃止予定 (Deprecation)
- None
APIの変更 (API Change)
- None
機能 (Feature)
-
kubeadm:CertificateKeyが正当なhex encodedなAESキーであることを検証するバリデーションを追加しました。 (#120064, @SataQiu) -
kubeadm:kubeadm certs renewにて、証明書の組織の更新をサポートしました。 (#121841, @SataQiu)
admin.conf の権限の変更 #121305 により、証明書のサブジェクトに含まれる組織を変更した、ということのようです。
-
kubeadm:EtcdLearnerModeのフィーチャーゲートがベータ機能になりました。etcdメンバーへの追加時の "Learner mode" がデフォルトで有効化されます。 (#120228, @pacoxu)
Learner については、etcd の Learner とは? を参照。
-
kubeadm: 設定をフラグと設定ファイルからマージするためのフィーチャーゲートであるMergeCLIArgumentsWithConfigを有効化しました。この値が設定されていなかった場合は、--ignore-preflight-errorsフラグがCLIで指定されていた場合、設定ファイルのその値は無視されます。 (#119946, @chendave)
リリースノートの英語では何を言ってるのかさっぱりわからなかったのですが、ignorePreflightErrors に関する振る舞いが変わるPRに対するリリースノートでした。
とりあえず色々調べてコメント書いていたら途中でリバートされていることに気づきました。最悪。
-
kubeadmのバージョンよりも3バージョン古いkubeletのデプロイができるようになりました。これは最近の SIG Architecture による control plane と kubelet のサポートされるバージョンギャップを拡張する変更と揃えた修正です。init,joinとupgradeのサブコマンドでこのkubeletのバージョンギャップが許容されます。kubeadmユーザーがkubeadmバージョンよりも古いcontrol planeのバージョンを適用した場合 (最大 N-1) 、kubeletと control plane間のギャップは最大 N-2 になることに注意してください。 (#120825, @pacoxu)
ドキュメンテーション (Documentation)
- None
失敗するテスト (Failing Test)
- None
バグ、もしくはリグレッション (Bug or Regression)
-
kubeadm:resetもしくはjoin時のデフォルトコンポーネント設定の表示はサポートされなくなりました。 (#119346, @chendave) -
kubeadm:etcd/healthcheck-clientの証明書のサブジェクトからsystem:mastersの組織が削除されました。 (#119859, @SataQiu)
今までヘルスチェック用の証明書に管理者権限があったの面白い。
json patch の replace 時に以下のようにネガティブインデックスが指定できなくなっていたようです。
kubectl patch myobject --type='json' -p '[{"op":"replace","path":"/spec/somearray/-1","value":"foo"}]'
-
kubeadm:apiserver-kubelet-client.crtの証明書のサブジェクトの組織をsystem:mastersからより権限の少ないグループであるkubeadm:cluster-adminsに変更しました。 (#121837, @neolit123) -
kubeadm:--configフラグが渡されると例えそのサブコマンドで不要だったとしてもCRIの検出が毎回行われていた問題を修正しました。 (#120828, @SataQiu) -
kubeadm:etcdのメンバーがすでに外れていた場合のnilポインターを修正しました。 (#119753, @pacoxu) -
kubeadm:--image-repositoryフラグがいくつかのinitのサブコマンドで指定できなかった問題を修正しました。 (#120072, @SataQiu) -
kubeadm:systemdサービスが存在するかどうかをチェックするロジックを改善しました。 (#120514, @fengxsong) -
kubeadm: static podのデコードにUniversalDesirializerを使うようになりました。 (#120549, @pacoxu)
その他 (Cleanup or Flake)
-
kubeadm:apiserver-etcd-clientの証明書のサブジェクトからsystem:mastersの組織を削除しました。 (#120521, @SataQiu) -
kubeadm:initのcertsフェーズはアルファ機能でなくなったため、kubeadm init phase certsコマンドのヘルプ画面に表示されていた免責事項を削除しました。 (#121172, @SataQiu) -
kubeadmswap を検出した際の警告を更新しました。Linuxにおいて swap が有効化されていた際、kubeadmは swap が cgroup v2 でのみサポートされており、ベータ機能であるがデフォルトで無効化されていることを警告します。 (#120198, @pacoxu)