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) -
kubeadm
swap を検出した際の警告を更新しました。Linuxにおいて swap が有効化されていた際、kubeadm
は swap が cgroup v2 でのみサポートされており、ベータ機能であるがデフォルトで無効化されていることを警告します。 (#120198, @pacoxu)