LoginSignup
1
0

Kubernetes 1.30: SIG Cluster Lifecycle の変更内容

Last updated at Posted at 2024-05-14

Kubernetes 1.30 の CHANGELOG から SIG Cluster Lifecycle の取り組みについてにピックアップしました。

  • kubeadm configuration v1beta4 の実装が進んでいるようですが、まだ利用できるわけではないためリリースノートには影しか見えません。
  • kubeadm: machine readable output というKEPが粛々と進捗しているようです。全てのCLIが YAML か JSON を出力するようになれば世の中平和になると思うのですが、その世界が来る前に AI がサクッとなんでも処理しそうですね。

Changes by Kind

Deprecation

  • None

API Change

  • None

Feature

  • kubeadm: kubeadm reset時に、アンマウントに失敗した際のエラーハンドリングを改善しました。/var/run/kubelet配下のディレクトリのアンマウントに失敗した際、kubeadmは警告を表示してディレクトリのクリーンアップを続行するのではなく、エラーを投げるようになりました。このような状況下では、問題を調査して手動で解決することが推奨されます。その後、kubeadm resetを再度呼び出してクリーンアップを完了させることができます。(#122530, @neolit123) [sig/cluster-lifecycle]

ResetConfiguration に アンマウントの際、umount2 に渡すフラグを指定できるフィールド UnmountFlags が追加されていました。
ResetConfiguration 自体は kubeadm configuration v1beta4 から利用できるようになるようで、v1beta4の進捗は以下のissueでトラックすることができます。

  • kubeadm: kubeadm certs check-expiration コマンドにおいて、-o yamlおよび-o jsonオプションによる機械可読な出力のサポートが追加されました。この変更は、新しいAPIでである output.kubeadm.k8s.io/v1alpha3 CertificateExpirationInfo で導入されました。既存の非構造化フォーマットは維持されますが出力APIバージョン v1alpha2 は現在非推奨となり、将来のリリースで削除される予定です。v1alpha3 の使用に移行してください。(#123372, @carlory) [sig/cluster-lifecycle]

  • kubeadm: WaitForAllControlPlaneComponentsフィーチャーゲートが追加されました。これにより、kubeadm init または kubeadm join --control-plane を実行する際に、すべてのコントロールプレーンコンポーネントが準備完了になるのを待つようにkubeadmに指示することができます。従来は、kubeadmは kube-apiserver のみを待っていました。kubeadm join のワークフローには、新しい実験的フェーズwait-control-plane が追加されました。このフェーズは、WaitForAllControlPlaneComponents がGAになった際に非実験的フェーズとされます。それに伴い、kubeadm init フェーズwait-control-planeWaitForAllControlPlaneComponents がGAになった時点で利用可能となります。これらのフェーズは、ユーザーがコントロールプレーンコンポーネントを待たないことを選択した場合にスキップすることができます。(#123341, @neolit123) [sig/cluster-lifecycle]

  • kubeadmは、upgrade plan を実行する際に、アップグレードが必要なすべての kubelet およびノードを表示するようになりました。
    (#123578, @carlory) [sig/cluster-lifecycle]

Documentation

  • None

Failing Test

  • None

Bug or Regression

  • kubeadmの1.27.0以降のリグレッションを修正しました: kubelet のパッチ設定はもはや kube-system/kubelet-config ConfigMap にアップロードされなくなります。
    (#123093, @SataQiu) [sig/cluster-lifecycle]

本来ならばノードのみに影響を与えるパッチが誤ってアップロードされてしまうという問題で、
kubeadm: fix a bug where the uploaded kubelet configuration in kube-system/kubelet-config ConfigMap does not respect user patch #115575 で導入されてしまったようです。

  • EnsureAdminClusterRoleBindingImpl におけるエラーハンドリングを修正しました。(#122893, @danwinship) [sig/cluster-lifecycle]

client-goでは、エラー時に nil ではなく空の構造体が返ってくる実装になっているのですが、fakeClient においては nil がが返ってきていたため、ユニットテストと実際の動作時で乖離があったようです。

  • kubeadmにおいて、新しい出力API output.kubeadm.k8s.io/v1alpha3 で、kubeadm upgrade plan ... -o yaml|jsonを呼び出す際に使用されるUpgradePlan構造体が変更され、複数の利用可能なアップグレードのリストを含むようになりました。(#123461, @carlory) [sig/cluster-lifecycle]

  • kubeadm: kubeadm upgrade plan -o yaml|json で不要な出力が含まれていたバグを修正し、コンポーネント設定情報が欠けていた問題を解決しました。 (#123492, @carlory) [sig/cluster-lifecycle]

標準出力の最初に必ず「[upgrade] Running cluster health checks」という文字列が出力されていたため、せっかく YAML/json で出力されてもパースに失敗してしまう、という問題を修正したようです。

  • Etcd: v3.5.11 にアップデートしました。(#122393, @mzaian) [sig/api-machinery,sig/cluster-lifecycle,sig/testing,sig/cloud-provider,sig/etcd]

  • kubeadmで、コントロールプレーンノードに対する kubeadm upgrade node コマンドで --rootfs グローバルフラグが機能しなかったバグを修正しました。(#123077, @neolit123) [sig/cluster-lifecycle]

  • kubeadm init において、ユーザーが指定した --kubeconfig ファイルが無視されるリグレッションを修正しました。 (#122735, @avorima) [sig/cluster-lifecycle]

  • kubeadm: kube-system/kubeadm-config ConfigMapに保存されている ClusterConfiguration で、kube-apiserver のデフォルトフラグ値 --authorization-mode=Node,RBAC をアップロードしないようにしました。Node,RBAC は既に kubeadm のデフォルト値であるため、この操作は冗長です。 (#123555, @neolit123) [sig/cluster-lifecycle]

  • kubeadm: kubeadm アップグレード中に、新しいデバイスをマウントし、/etc/kubernetes(またはそのサブディレクトリ)へのシンボリックリンクを作成して、kubeadm がその情報をマウントされたデバイスに保存できるようにすることができないバグを修正しました。(#123406, @SataQiu) [sig/cluster-lifecycle]

アップグレード中、static podのマニフェストは TempDirForKubeadm にバックアップされるのですが、この値は /etc/kubernetes/tmp にハードコードされており変更できないようです。

別の場所に保存したい場合はシンボリックリンクを作成する必要があるのですが、別のデバイスへのシンボリックリンクはバグがあって利用できなかったようです。

  • kubeadm: kubeadm initkubelet-finalize フェーズは、kubeletkubeconfig に特定の認証情報が必要なくなりました。 (#123171, @vrutkovs) [sig/cluster-lifecycle]

  • CVE-2024-24786 を解決するため、 google.golang.org/protobufv1.33.0 にアップデートしました。 (#123758, @liggitt) [sig/network,sig/storage,sig/node,sig/api-machinery,sig/cluster-lifecycle,sig/auth,sig/cli,sig/instrumentation,sig/architecture,sig/cloud-provider]

  • kubeadam: "structured authz" --authorization-config を設定時、デフォルトの --authorization-mode を利用しません。(#123654, @LiorLieberman) [sig/cluster-lifecycle]

Other (Cleanup or Flake)

  • Etcd: v3.5.11 にアップデートしました。
    (#123150, @bzsuni) [sig/api-machinery,sig/cluster-lifecycle,sig/testing,sig/cloud-provider]

  • kubeadm completion のエラーメッセージが、無効なシェルが指定された場合にサポートされているシェルタイプを表示するようになりました。
    (#122477, @SataQiu) [sig/cluster-lifecycle]

  • kubeadm: initjoinupgradereset のワークフロー中に、さまざまなAPIサーバーリクエストが再試行されるようにしました。この変更以前は、ConfigMapの作成や更新などの一部のAPIサーバーリクエストが「ワンショット」であり、APIサーバーが短時間接続を失った場合に失敗する可能性がありました。
    (#123271, @neolit123) [sig/cluster-lifecycle]

  • kubeadm: kubelet と apiserver の /healthz エンドポイントが OK を返すのを待つ際の全体的なロジック、エラーハンドリング、および出力メッセージを改善しました。kubelet と apiserver のチェックは並行ではなく、順次(直列で)実行されるようになりました。
    (#121958, @neolit123) [sig/cluster-lifecycle]

  • kubeadm: Pre-flight チェックでの bridge-nf-call-iptables=1bridge-nf-call-ip6tables=1 のチェックが削除されました。これは、すべてのネットワーク実装がこの設定を必要とするわけではないためです。コンテナをLinuxブリッジに接続するか他のメカニズムを使用するかに応じて、ネットワークプラグインがこの設定を正しく行う責任を負います。 (#123464, @SataQiu) [sig/cluster-lifecycle]

  • kubeadm: アップグレードの事前チェック中に実行される upgrade-health-check ジョブを自動的にクリーンアップするために ttlSecondsAfterFinished を使用しました。 (#122079, @carlory) [sig/cluster-lifecycle]

1
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
0