はじめに
このエントリは、Kubernetes 1.24 の CHANGELOG からWhat's new!とアップグレード時の注意事項、各変更点についてまとめたページへのリンクです。
詳細については各まとめページを参照してください。
変更点の詳細へのリンク
- Metrics Changes と SIG Instrumentation @watawuwu
- SIG Apps @yosshi_
- SIG API Machinery @Ladicle
- SIG Auth @hiyosi
- SIG CLI @superbrothers
- SIG Cluster Lifecycle @yuanying
- SIG Storage @ysakashita
- SIG Network @tkusumi
- SIG Scheduling @everpeace
- SIG Node @y1r96
What's new!
Dockershim Removed from kubelet
v1.20で非推奨となっていたdockeshimコンポーネントはkubeletから削除されました。
v1.24移行、サポートされているランタイム(例えばcontainerdやCRI-Oなど)の一つを利用するか、コンテナランタイムとしてDocker Engineへ依存している場合はcri-dockerdを利用する必要があります。
より詳細な情報については、こちらのガイドをご参照ください。
- cri-dockerdはこちら
Beta APIs Off by Default
新しいベータAPIはデフォルトでクラスタでは有効化されなくなります
既存のベータAPIと既存のベータAPIの新しいバージョンはデフォルトで有効のままとなります。
- あくまでAPIの話であり、Feature Gatesのベータとは別の話のようです
Signing Release Artifacts
リリースの成果物はcosignを用いて署名され、イメージの署名検証が実験的にサポートされています。
リリース成果物の署名と検証は、Kubernetesのリリースプロセスにおけるソフトウェアサプライチェーンセキュリティを向上させるための一部です。
OpenAPI v3
Kubernetes 1.24はOpenAPI v3 formatを用いてAPIを公開する機能をベータ版としてサポートするようになりました。
Storage Capacity and Volume Expansion Are Generally Available
Storage capacity trackingは、CSIStorageCapacity オブジェクトを介した現在利用可能なストレージ容量の公開をサポートし、遅れてバインドするCSIボリュームを使用するPodのスケジューリングを強化します。
NonPreemptingPriority to Stable
この機能はPod preemptionを有効・無効化できるPriorityClassesへの新しいオプションを追加します。
Storage Plugin Migration
オリジナルのAPIはメンテナンスしながら、CSI Plugins を呼び出すためにin-tree storage pluginsを移行する 作業が進行中です。
Azure DiskとOpenStack Cinderのプラグインは両方とも移行されています。
gRPC Probes Graduate to Beta
Kubernetes v1.24を用いると、gRPC probe機能がbetaとして導入され、デフォルトで有効可能です。
HTTPエンドポイントを公開したり、追加の実行ファイルの利用なしにKubernetes内でネイティブにgRPCアプリケーションのstartup/liveness/readiness probeを設定可能となりました。
Kubelet Credential Provider Graduates to Beta
初めにKubernetes 1.20でアルファとしてリリースされたkubeletのimage credential providersのサポートはbetaへ昇格しました。
これはkubeletがexecプラグインを利用して、ノードのファイルシステムへクレデンシャルを保存せずに、コンテナイメージのためのクレデンシャルを動的に取得可能とします。
Contextual Logging in Alpha
Kubernetes 1.24はcontextual loggingを導入しました。
これは関数の呼び出し元がロギングの全ての側面(出力フォーマット、冗長性、追加の値や名前) を制御できるようにするものです。
- klogにこの機能は入っているようですが、Kubernetes v1.24.0のソースコードを確認した限りだとまだ利用されてなさそう?
Avoiding Collisions in IP allocation to Services
Kubernetes 1.24では、Serviceに固定IPアドレスを割り当てるための範囲をソフトリザーブできる新しいオプトイン機能が導入されました。
この機能を有効にすると、クラスターはServiceのIPアドレスのプールから自動割り当てを優先するため、衝突のリスクが軽減されます。
ServiceのClusterIP
は以下のようにアサインされます:
- 動的に割り当てる: 設定されたService IPレンジ内の空いているIPをクラスタが自動的に選択します
- 静的に割り当てる: 設定されたService IPレンジ内の一つのIPをユーザがセットします
サービスClusterIP
はユニークであるため、すでに割り当てられているClusterIP
を使用してサービスを作成しようとするとエラーが返されます。
- この機能によりCoreDNSなど特定のClusterIPアドレスが必要なServiceが、他のServiceにそのアドレスを取得されづらくできるため便利そうです。
アップグレード時の注意事項
- kubelet内のdockershimを用いたDocker runtimeはv1.24で完全に削除されました。kubeletは以前はdockershimと呼ばれるdockerのためのCRIを実装しているモジュールを利用しており、それはKubernetes community内でメンテナンスの問題がありました。1.24以降、利用可能になり次第CRIを本格的に実装したコンテナランタイム(v1alpha1またはv1準拠のもの)に移行してください。(#97252, @dims)
- Secretに保存されたvCenterの認証情報とZones機能が使用されている場合、Nodeが
Not-ready
となるバグを修正しました。ゾーンラベルのセットアップは KCM コンポーネントに移動し、kubelet はこのような場合、起動時にこのステップをスキップします。クラウドプロバイダー設定ファイルにプレーンテキストで保存された資格情報の場合、現在の動作は変更されず、アクションは必要ありません。適切な機能を実現するためには、Secret および Zone 機能で保存された vCenter 認証情報を使用している場合、kube-system:vsphere-legacy-cloud-provider
がノードオブジェクトを更新できるようにする必要があります。(#101028, @lobziik)。
-
LegacyServiceAccountTokenNoAutoGeneration
feature gateがベータとなり、デフォルトで有効化されます。有効化されるとService account tokenを含むSecret APIオブジェクトは自動生成されません。service account tokenを取得するためのTokenRequest APIを利用するか、もし期限切れを起こさないトークンが必要な場合は、このガイドにしたがってService account tokenを追加するためのtoken controllerのためのSecret APIオブジェクトを作成してください。(#108309, @zshihang)
- Pod topology spreadのskewのための計算はnode affinity/selectorにマッチしないノードを除外するようになりました。これにより以前は除外されるノードでspreading selectorにマッチしていたpodが、特に
topologyKey
がノードレベルでないときに、スケジュールできないPodとなる可能性があります。このシナリオを避けるために、topology spread constraints利用時のnode affinityやpod selectorを再検討してください。(#107009, @kerthcet)
- 非推奨となっていた
--experimental-check-node-capabilities-before-mount
フラグが削除されました。CSIのGAに伴い、よりよい代替手段があります。kubeletのscriptやマニフェストから--experimental-check-node-capabilities-before-mount
の利用している部分を削除してください。(#104732, @mengjiao-liu)
-
kubeadm.k8s.io/v1beta2
は非推奨となり将来のリリースおそらく3リリース(1年)で削除予定です。新しいクラスタのためにはkubeadm.k8s.io/v1beta3
を利用し始めるべきです。古い設定ファイルからマイグレートするためにはkubeadm config migrate
コマンドが利用できます。
- Kubeadm: dockerの設定ではなくcontainerd socket(Unix:
unix:///var/run/containerd/containerd.sock
, Windows:npipe:////./pipe/containerd-containerd
)をデフォルトとして利用するようになりました。クラスタ作成時にInit|JoinConfiguration.nodeRegistration.criSocket
フィールドが空で、ホスト上に複数のソケットが見つかった場合は常にエラーをスローして、フィールドに値を設定することで使用するソケットを指定するようにユーザーに要求します。kubeadm設定ファイルを更新し、dockershimソケットを含めないようにしてください(kubeletバージョン<1.24かつkubeadm >= 1.24を使用している場合を除く)。kubeadm のpreflightからdocker
サービス用の DockerValidor と ServiceCheck を削除しました。ホスト検証時にDockerはもはや特別なケースではなく、理想的にはこのタスクは互換性の問題が重要となるcri-dockerdプロジェクトで処理されるべきタスクです。Docker の場合、docker CLI を使用する代わりに、イメージの取得や実行中のコンテナのリストの取得などの CRI ソケットとのすべての通信にcrictl
を使用するようにしました。(#107317, @neolit123)
- 他のマイグレーションプラグインと同等にするために
CSIMigrationRBD
となるべき場所でcsiMigrationRBD
としてfeature gatesで指定されていました。このリリースではこれを修正し、csiMigrationRBD
として設定しているユーザーは、このリリースからCSIMigrationRBD
に再設定する必要があります。(#107554, @humblec)
- 実験的な動的なログのサニタイズ機能はv1.24で非推奨となり削除されます。この機能は利用できなくなりました。(#107207, @ehashman)
- 新しいログの機能をブロック要素となること、機能のサポート負荷などが原因でalpha機能だったため削除されるようです
- Kubeadm: kubeadmがラベルやtaintsで
master
という単語を使わないように移行する計画のsecond stage
を適用しました。新しいクラスタでは、コントロールプレーンノードにnode-role.kubernetes.io/master
というラベルは追加されなくなり、node-role.kubernetes.io/control-plane
というラベルだけが追加されます。kubeadm upgrade apply
で 1.24 にアップグレードするクラスタでは、このコマンドは既存のコントロールプレーンノードからnode-role.kubernetes.io/master
というラベルを削除します。新しいクラスタでは、古い taintnode-role.kubernetes.io/master:NoSchedule
と新しい taintnode-role.kubernetes.io/control-plane:NoSchedule
の両方が制御プレーンノードに追加されます。リリース1.20 (first stage
) では、リリースノートで新しいtaintを先取りして許容するように指示されています。kubeadm upgrade apply
で1.24にアップグレードするクラスタでは、コマンドは既存のコントロールプレーンノードに新しいtaintnode-role.kubernetes.io/control-plane:NoSchedule
を追加することになるでしょう。これらの変更にあなたのインフラを適応させてください。1.25 では、古いtaintnode-role.kubernetes.io/master:NoSchedule
は削除される予定です。(#107533, @neolit123)