Kubernetes 1.34 の CHANGELOG から SIG Cluster Lifecycle の取り組みについてまとめました。
ピックアップ
- なし!
アップグレード時の注意事項
- なし!
項目ごとの変更
非推奨
- kubeconfig の
preferencesフィールドは非推奨となり、代わりにkubercが推奨されます。 (#131741, @soltysh) [SIG API Machinery, CLI, Cluster Lifecycle, Testing] - Kubeadm: エラーメッセージを出力する際に、一貫して
error:というプレフィックスを付けるようになりました。 (#132080, @neolit123) - Kubeadm: KEP https://features.k8s.io/2845 に従い、非推奨ではない klog フラグ(
-vと-vmodule)のみを公開するようになりました。 (#131647, @carsontham)
APIの変更
- etcd のバージョンを v3.6.0 に更新しました。 (#131501, @joshjms) [SIG API Machinery, Cloud Provider, Cluster Lifecycle, Etcd, Testing]
etcdのアップグレードを行う前に公式のドキュメントをちゃんと読んでおいた方が良さそうです。
基本的にはetcd v3.5からはローリングアップデートできるようですが、いくつか注意点があるようです。
- 一旦、v3.6に完全にアップデートしてしまった場合、内部データの互換性がないのでバイナリのダウングレードだけではロールバックできないようです。スナップショットからの公式のロールバック手順を踏む必要があります。
-
--enable-v2が完全に削除されました。まだ利用しているようでしたら移行する必要があります。
機能
-
新しい kubectl 出力形式
kyamlが追加されました。KYAML は YAML の厳密なサブセットであり、任意の YAML プロセッサで受け入れられるべきものです。KYAML のフォーマットは JSON と YAML の中間であり、デフォルトの YAML スタイルより明示的なため、エラーが起きにくい形式です。 (#132942, @thockin) [SIG API Machinery, Architecture, Auth, CLI, Cloud Provider, Cluster Lifecycle, Contributor Experience, Instrumentation, Network, Node, Scheduling, Storage, Testing] -
Kubeadm:
NodeLocalCRISocketフィーチャーゲートを beta に昇格し、デフォルトで有効化しました。有効化されると kubeadm は以下を行います:-
/var/lib/kubelet/instance-config.yamlファイルを生成し、ノードごとの kubelet 設定にあるcontainerRuntimeEndpointフィールドをカスタマイズします。 - アップグレード操作中に、ノードから
kubeadm.alpha.kubernetes.io/cri-socketアノテーションを削除します。 - アップグレード時に
/var/lib/kubelet/kubeadm-flags.envファイルから--container-runtime-endpointフラグを削除します。 (#131981, @HirazawaUi) [SIG Cluster Lifecycle]
-
CRIのエンドポイントの情報が /var/lib/kubelet/kubeadm-flags.env や、kubeadm.alpha.kubernetes.io/cri-socket アノテーション から、kubeadm の設定ファイルと /var/lib/kubelet/instance-config.yaml になる機能がデフォルトで有効化されたようです。
- Kubeadm: kubeadm 固有のフィーチャーゲート
WaitForAllControlPlaneComponentsを GA に昇格しました。このフィーチャーゲートは常時有効に固定され、ノード初期化時に kubeadm はkube-apiserverのみでなく、すべてのコントロールプレーンコンポーネントのヘルスチェックを実行するようになりました。 (#132594, @neolit123) - Kubeadm: Linux カーネルバージョンの検証チェックをエラーではなく警告を出すように変更しました。 (#131919, @neolit123) [SIG Cluster Lifecycle, Node]
k8s.io/system-validators のバージョンを v1.10.1 にアップデートしたようです。
というのも以前のValidatorではEOLを迎えたLinux Kernelを一律でエラーにしていたようなのですが、RHEL 9のデフォルトのカーネルがサポート外になってしまったためエラーでは不都合な人が多かったのでしょう。
- pause イメージのバージョンを
registry.k8s.io/pause:3.10.1に更新しました。 (#130713, @ArkaSaha30) [SIG Cluster Lifecycle, Node, Scheduling, Testing]
以前の pause コンテナの v3.9 -> v3.10 の差分は、Windowsバイナリに -v フラグをつけただけ、という非常に些細な変更でしたが、今回の v3.10 -> v3.10.1 の差分もまた Windows 向けで、ベースイメージが以下のように変更になっただけのようです。その他のOSには影響ありません。
TRIPLE := ${TRIPLE.${OS}-${ARCH}}
BASE.linux := scratch
# Source for windows pause image base is located at https://github.com/microsoft/windows-pause-image-base
- BASE.windows := mcr.microsoft.com/oss/kubernetes/windows-pause-image-base:v0.2
+ BASE.windows := mcr.microsoft.com/oss/kubernetes/windows-pause-image-base:v0.4.1@sha256:37cc10768383b55611d724a05eb18564cb5184c89b0c2faa7d4eff63475092df
BASE := ${BASE.${OS}}
# If you want to build AND push all containers, see the 'all-push' rule.
バグ、もしくはリグレッション
-
kubeadm resetを--configフラグ付きで実行した際、ResetConfigurationが見つからない場合に、エラーメッセージ内でJoinConfigurationKindを誤って参照していた問題を修正しました。 (#132258, @J3m3) [SIG Cluster Lifecycle]
その他(クリーンアップまたはFlake)
- Kubeadm: pause イメージの不一致に関する警告を出力する際に、スペースが抜けていた問題を修正しました。 (#131563, @logica0419) [SIG Cluster Lifecycle]
空白は無いと読みにくいからね!
if err != nil {
klog.V(4).Infof("failed to detect the sandbox image for local container runtime, %v", err)
} else if criSandboxImage != ipc.sandboxImage {
- klog.Warningf("detected that the sandbox image %q of the container runtime is inconsistent with that used by kubeadm."+
+ klog.Warningf("detected that the sandbox image %q of the container runtime is inconsistent with that used by kubeadm. "+
"It is recommended to use %q as the CRI sandbox image.", criSandboxImage, ipc.sandboxImage)
}
- Kubeadm: coredns デプロイメントマニフェストで、liveness probe と readiness probe に名前付きポートを一貫して使用するようにしました。 (#131587, @neolit123) [SIG Cluster Lifecycle]
👮 「port number ではなく、port name を使え!」
- etcd のバージョンを v3.6.1 に更新しました。 (#132284, @ArkaSaha30) [SIG API Machinery, Cloud Provider, Cluster Lifecycle, Etcd, Testing]
- etcd クライアントライブラリを v3.6.4 に更新しました。 (#133226, @ivanvc) [SIG API Machinery, Auth, Cloud Provider, Node]
- CoreDNS を v1.12.1 にアップグレードしました。 (#131151, @yashsingh74) [SIG Cloud Provider, Cluster Lifecycle]
-
CoreDNS-1.12.1 Release
- kubernetes: Revert recent change to only create PTR records for endpoints with hostname defined.
EndpointSlice の .endpoints[].addresses[].hostname が存在する時のみ、そのhostname をベースとして PTR レコードを作成する、というPRがリバートされました。
「同一 Pod が複数の headless Service によって選ばれる場合のホスト名/PTR の決め方」が議論された際に、「EndpointSlice の .endpoints[].addresses[].hostname が存在する時のみ、そのhostname をベースとして PTR レコードを作成する」という方針になったのですが、副作用として、通常の Deployment で作成された Pod の PTR レコードが生成されなくなってしまいました。(従来は 10-244-0-24.svc... のような「IP をハイフンに変換した PTR」等が返っていた)
その結果、hostname を付けていない Pod で逆引きができず、独自 LB など Pod 単位の FQDN 逆引きに依存するワークロードに問題が出たためリバートされたようです。
ちなみに、.endpoints[].addresses[].hostname を見ているんだったら結局複数の Service に Pod が属していたら複数の PTR レコードができてしまうのではないか?という疑問が湧くかも知れませんが話は長くなるのでここでは触れません。兎に角一部の例外を除き基本的に問題ありません。