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-tools
package for one more release,- The
kubeadm
package will stop depending on thecri-tools
package 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/v1alpha2
APIを削除しました。代わりにv1alpha3
を使用してください。(#124496, @carlory) -
kubeadm
: 非推奨で効果のない(NO-OP)kubeadm join control-plane-join update-status
フェーズを削除しました。(#124373, @neolit123) -
kubeadm
:kubeadm
がプリフライトチェック中に実行するNodeSwap
チェックに、スワップが正しく設定されているかを確認する新しい警告が追加されました。(#125157, @carlory)