Kubernetes 1.31 の CHANGELOG から SIG Cluster Lifecycle の取り組みについてまとめました。
ピックアップ
kubeadm.k8s.io/v1beta4
kubeadm の設定ファイルのバージョン kubeadm.k8s.io/v1beta4 がリリースされました。設定ファイルは以下のコマンドで移行することができます。
kubeadm config migrate
v1beta3 は少なくとも 1.34 のリリースまでサポートされますが、以降削除される予定です。kube-system/kubeadm-config の設定ファイルは、v1beta4 で保存されるようになります。
詳しくは以下を参照してください。
- https://kubernetes.io/docs/reference/config-api/kubeadm-config.v1beta4/
- https://kubernetes.io/blog/2024/08/23/kubernetes-1-31-kubeadm-v1beta4/
変更点を簡単に
-
kubeadm reset/upgradeのための新しい設定フォーマットResetConfiguration,UpgradeConfigurationが追加されました。 -
InitConfigurationとJoinConfigurationにてdryRunとnodeRegistration.imagePullSerialがサポートされました。 - 全てのコントロールプレーンの設定において、
extraEnvsがサポートされました。 -
extraArgsの構造が変更されました。 -
init,join,reset,upgradeにおいて、timeoutsがサポートされました。
Breaking Change
-
extraArgsが、重複するフラグ名をサポートするためにmap[string][string]から、name/valueペアのリストに変更されました。
今までの指定
extraArgs:
authorization-mode: "Node,RBAC"
これからの指定方法、
extraArgs:
- name: "authorization-mode"
value: "Node,RBAC"
-
JoinConfiguration.discovery.timeoutが、JoinConfiguration.timeouts.discoveryに変更されました。 -
ClusterConfiguration.timeoutForControlPlaneが、{Init|Join}Configuration.timeouts.controlPlaneComponentHealthCheckに変更されました。
アップグレード時の注意事項
-
kubeadmに関連する注意事項は特になし
項目ごとの変更
非推奨
-
kubeadm:init kubelet-finalizeのサブフェーズであるexperimental-cert-rotationが非推奨となり、直接使用された場合は警告を表示するようになりました。このサブフェーズは将来のリリース(1.32)で削除される予定です。代替として、新しいサブフェーズenable-client-cert-rotationが追加されました。 (#124419, @neolit123) [SIG Cluster Lifecycle] -
kubeadm:RootlessControlPlaneフィーチャーゲート(以前はアルファ版)が非推奨となりました。これは、Kubernetes 本体のUserNamespacesSupportフィーチャーゲートが1.30でベータ版に昇格したことによるものです。
Kubernetes 本体のUserNamespacesSupportが一般提供となり、kubeadmがユーザー名前空間のPodでコントロールプレーンを実行するサポートを開始した後、kubeadmのRootlessControlPlaneフィーチャーゲートは完全に削除される予定です。
kubeadmがユーザー名前空間機能を標準でサポートするまでの間、ユーザーは非推奨となったRootlessControlPlaneフィーチャーゲートの使用を継続するか、静的ポッドマニフェストに対してkubeadmパッチを使用してUserNamespacesSupportをオプトインすることができます。 (#124997, @neolit123) [SIG Cluster Lifecycle]
kubeadm パッチとは、kubeadm init/join 時に利用できる --patch フラグのことだと思われる。--patch を利用することで kubeadm が生成するコントロールプレーン用の Staic Pod のマニフェストにパッチを当てることができます。
APIの変更
- 特になし
機能
-
kubeadm:patchが強化され、CoreDNS デプロイメントにパッチを適用できるようになりました。新しいパッチターゲットはcorednsdeploymentです(例:パッチファイルcorednsdeployment+json.json)。これにより、initおよびupgrade操作中に CoreDNS デプロイメントのカスタムパッチを適用することが可能になりました。 (#124820, @SataQiu) [SIG Cluster Lifecycle]
--patch で指定するファイルは以下のフォーマットに従っている必要があります。
target[suffix][+patchtype].extension
なので、上記例の corednsdeployment+json.json は corednsdeployment ターゲットのパッチタイプ json の json で書かれたパッチ、です。
-
kubeadm:--experimental-outputフラグを非推奨としました(将来のリリースで削除される予定)。また、それに伴い同目的の新しいフラグ--outputが追加されました。影響を受けるコマンドはkubeadm config images list、kubeadm token list、kubeadm upgrade plan、kubeadm certs check-expirationです。(#124393, @carlory) [SIG Cluster Lifecycle]
実験的扱いであった以前のバージョンの kubeadm でもショートハンドのフラグは -o だったので、-o を使っていた場合には気づかない変更。
ってか、非推奨セクションの変更内容ではなかろうか。
- 依存コンポーネント:
registry.k8s.io/pause:3.10の利用を開始しました。 (#125112, @neolit123) [SIG CLI, Cloud Provider, Cluster Lifecycle, Node, Release, Testing and Windows]
ChangeLogによると、pause:3.9 -> pause:3.10 の差分は Windows バイナリにおける -v フラグのサポートのみらしいです。
-
kubeadm:upgrade中、etcdのポッドがアップグレードを必要としない場合でも、kube-apiserver.yamlマニフェストがアップグレードされる予定で、かつ証明書の更新が無効化されていない場合は、etcd 証明書のローテーションと etcd 静的ポッドの再起動を考慮するようにしました。(#124688, @neolit123)
生成されるetcdのStatic Podのマニフェストにdiffがなかった場合、アップグレードコマンド後に証明書が更新されていなかったようです。
-
kubeadmは CRI エンドポイントの操作にcrictlのバイナリを直接利用していましたが、CRI クライアントライブラリを使用するように変更しました。kubeadmのdeb/rpmパッケージはcri-toolsパッケージを今後次リリース後でもインストールを行いますが、もしあなたのスクリプトがcri-toolsを必要としているのならば、cri-toolsのレポジトリ か、もしくはその他の場所から自分でインストールする必要があります。
kubeadmのパッケージは Kubernetes 1.32 でcri-toolsパッケージに依存しなくなります。これは、kubeadmをインストールしても自動的にcrictlのインストールが保証されなくなることを意味します。 (#124685, @saschagrunert)
kubeadm パッケージが結局いつからcri-toolsに依存しなくなるのかよくわからなかった
- The kubeadm deb/rpm packages will continue to install the
cri-toolspackage for one more release,- The
kubeadmpackage will stop depending on thecri-toolspackage in Kubernetes 1.32,
ので、PRを確認したところ、1.32 のリリースパッケージから、cri-tools パッケージの依存が取り除かれるようです。
-
kubeadm:etcd 3.5.11で導入された新しいエンドポイント/livez(livenessプローブ用)と/readyz(readiness とstartupプローブ用)を使用するように切り替えました。この変更により、kubeadm 1.31ではetcd 3.5.11より古いカスタムetcdバージョンをデプロイすることはできなくなりました。もしそのような状況がある場合は、etcd をサポートされているバージョンにアップグレードしてください。(#124465, @neolit123) -
kubeadm:kubeadm config images listとkubeadm token listコマンドにおいて構造化出力を表示するためにoutput/v1alpha3を使うようになりました。(#124464, @carlory)
output/v1alpha2 を削除するために output/v1alpha3 へアップデートしただけで、表示する内容は (バージョン番号以外) 変わらないようです。
-
kubeadm:ControlPlaneKubeletLocalModeフィーチャーゲートが追加されました。これは、kubeadm initでクラスタを作成する際やkubeadm joinでコントロールプレーンノードを参加させる際に、kubeletがローカルのkube-apiserverエンドポイントを使用するよう指定するために利用できます。それに伴いkubeadm joinワークフローに、control-plane-join-etcdとkubelet-wait-bootstrapという2つの新しい実験的フェーズが追加されました。これらのフェーズはこのフィーチャーゲートが有効な場合に使用されます。ControlPlaneKubeletLocalModeが GA(一般提供)になると、これらのフェーズは実験的というフラグが解除されます。
またアップグレードにおいて、kubeadm upgradeコマンド実行時にこのフィーチャーゲートが有効な場合、/etc/kubernetes/kubelet.confを変更してローカルkube-apiserverエンドポイントを使用するようになります。このアップグレードメカニズムは、このフィーチャーゲートが一般提供された際にハードコードでtrueに設定された時点で削除されます。(#125582, @chrischdi)
バグ、もしくはリグレッション
-
kubeadm:ResolverConfigをグローバルなKubeletConfigurationに保存することを停止し、代わりに各ノードに対して動的に設定するようになりました。(#124038, @SataQiu) -
kubeadm:kubeadm upgradeコマンド実行時に、kube-system/kubelet-config ConfigMapからKubeletConfigurationが適切にダウンロードされない問題を修正しました。この問題により、ローカルの/var/lib/kubelet/config.yamlファイルがデフォルト設定として書き込まれていました。(#124480, @neolit123) -
kubeadm:--yesフラグを許可されたフラグのリストに追加しました。これにより、kubeadm upgrade apply --configと組み合わせて使用できるようになりました。 (#125566, @xmudrii)
kubeadm upgrade apply 時に、--config と --yes を組み合わせて利用することができてなかったようです。
-
kubeadm:kubeadm upgradeの事前チェックCreateJob中に、ポッドをスケジュールできるノードが存在しないかどうかを確認するようにしました。ノードが存在しない場合、警告を表示してこの事前チェックをスキップできます。この警告は、ノードが一つのクラスタで、そのノードがドレインされた場合に発生する可能性があります。(#124503, @neolit123) -
kubeadm:PublicKeysECDSAフィーチャーゲートがkubeconfigファイルを生成する際に無視されていた問題を修正しました。(#125388, @neolit123) -
kubeadm:JoinConfiguration.discovery.timeoutが無視され、値が常に "5m"(5分)にハードコードされていた回帰を修正しました。 (#125480, @neolit123) -
kubeadm:kube-apiserverとkube-controller-managerのPodにおいて、追加の Linux システムの認証局ディレクトリとして/etc/pkiをマウントするサポートを削除しました。代わりに、/etc/pki/ca-trustと/etc/pki/tls/certsのマウントをサポートするように変更しました。/etc/ca-certificates、/usr/share/ca-certificates、/usr/local/share/ca-certificatesおよび/etc/ssl/certsの各ロケーションは引き続きサポートされています。(#124361, @neolit123) -
kubeadm:kubeletのヘルスチェック時に、ハードコードされたlocalhost:10248利用する代わりに、KubeletConfigurationで設定されたhealthzのaddress:portが使用されるようになりました。(#125265, @neolit123) -
kubeadm: ディスク上の既存のkubeconfigファイルの検証中に、ca.crtが証明書バンドルであり、中間証明書を含む場合に対応するようになりました。ca.crtを単一の CA を含むファイルとして扱うのではなく、ca.crtバンドルとディスク上の既存のkubeconfig内のCAとの間で共通の信頼アンカーを見つけるようになりました。(#123102, @astundzia) -
kubeadm:kubeadm joinコマンドにおいて、kubeletconfigurationターゲットを持つパッチを使用した場合に、ローカルのkubelet healthzチェックを実行する際にそのパッチが反映されていなかったバグを修正しました。(#126224, @neolit123) [SIG Cluster Lifecycle] -
kubeadm:kubeadm upgrade diffコマンドで設定ファイルを指定した際にマニフェストのパスを指定できないバグを修正しました。また、kubeadm upgrade diffコマンドの--api-server-manifest、--controller-manager-manifest、--scheduler-manifestフラグは非推奨とマークされ、将来のリリースで削除される予定です。(#125779, @SataQiu) -
kubeadm:kubeadm upgrade apply/planコマンドにおいて、--feature-gatesフラグは非推奨となり、効果がなくなりました。このフラグは将来のリリースで削除される予定です。アップグレードのワークフローはクラスターの再設定を行うようには設計されていません。代わりに、kube-system/kubeadm-config ConfigMapで定義されているClusterConfigurationのfeatureGatesフィールドを編集してください。(#125797, @SataQiu) -
kubeadm:kubeadm init phase certs saコマンドが--configフラグを受け付けられるようになりました。 (#125396, @Kavinraja-G) -
kubeadm: 特定のWindows環境で失敗しないように、IsPrivilegedUserプレフライトチェックを改善しました。(#124665, @neolit123)
その他(クリーンアップまたはフレーク)
-
kubeadm: 非推奨となっていたUpgradeAddonsBeforeControlPlaneフィーチャーゲートを削除しました。また、CoreDNSとkube-proxyアドオンのアップグレードが、すべてのコントロールプレーンインスタンスがアップグレードされるまでトリガーされないようにしました。(#124715, @SataQiu) -
kubeadm: サポートされているklogフラグのみを厳密に有効にし、以前は利用可能だが推奨されていなかったオプションを無効にしました。これにより、klogに関する隠しフラグ(--alsologtostderr、--log-backtrace-at、--log-dir、--logtostderr、--log-file、--log-file-max-size、--one-output、--skip-log-headers、--stderrthreshold、--vmoduleを含む)が使用できなくなりました。(#125179, @SataQiu) -
kubeadm: グローバルな--rootfsフラグが非実験的とみなされるようになりました。(#124375, @neolit123) -
kubeadm:validateSupportedVersionの警告/エラーメッセージを改善し、チェックされたリソースの種類名を含めるようにしました。(#125758, @SataQiu) -
kubeadm:kubeadm join control-plane-prepare download-certsフェーズからEXPERIMENTAL(実験的)タグを削除しました。(#124374, @neolit123) -
kubeadm: 構造化出力のための非推奨のoutput.kubeadm.k8s.io/v1alpha2APIを削除しました。代わりにv1alpha3を使用してください。(#124496, @carlory) -
kubeadm: 非推奨で効果のない(NO-OP)kubeadm join control-plane-join update-statusフェーズを削除しました。(#124373, @neolit123) -
kubeadm:kubeadmがプリフライトチェック中に実行するNodeSwapチェックに、スワップが正しく設定されているかを確認する新しい警告が追加されました。(#125157, @carlory)