1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

Kubernetes 1.31: SIG Cluster Lifecycle の変更内容

Last updated at Posted at 2024-08-29

Kubernetes 1.31 の CHANGELOG から SIG Cluster Lifecycle の取り組みについてまとめました。

:tada: ピックアップ :tada:

kubeadm.k8s.io/v1beta4

kubeadm の設定ファイルのバージョン kubeadm.k8s.io/v1beta4 がリリースされました。設定ファイルは以下のコマンドで移行することができます。

kubeadm config migrate

v1beta3 は少なくとも 1.34 のリリースまでサポートされますが、以降削除される予定です。kube-system/kubeadm-config の設定ファイルは、v1beta4 で保存されるようになります。

詳しくは以下を参照してください。

:eyes: 変更点を簡単に

  • kubeadm reset/upgrade のための新しい設定フォーマット ResetConfiguration, UpgradeConfiguration が追加されました。
  • InitConfigurationJoinConfiguration にて dryRunnodeRegistration.imagePullSerial がサポートされました。
  • 全てのコントロールプレーンの設定において、extraEnvs がサポートされました。
  • extraArgs の構造が変更されました。
  • init, join, reset, upgradeにおいて、timeouts がサポートされました。

:scream: 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 に変更されました。

:warning: アップグレード時の注意事項

  • kubeadm に関連する注意事項は特になし

:dizzy: 項目ごとの変更

:do_not_litter: 非推奨

  • 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でコントロールプレーンを実行するサポートを開始した後、kubeadmRootlessControlPlane フィーチャーゲートは完全に削除される予定です。
    kubeadm がユーザー名前空間機能を標準でサポートするまでの間、ユーザーは非推奨となった RootlessControlPlane フィーチャーゲートの使用を継続するか、静的ポッドマニフェストに対して kubeadm パッチを使用して UserNamespacesSupport をオプトインすることができます。 (#124997, @neolit123) [SIG Cluster Lifecycle]

kubeadm パッチとは、kubeadm init/join 時に利用できる --patch フラグのことだと思われる。--patch を利用することで kubeadm が生成するコントロールプレーン用の Staic Pod のマニフェストにパッチを当てることができます。

:construction_site: APIの変更

  • 特になし

:unicorn: 機能

  • kubeadm: patch が強化され、CoreDNS デプロイメントにパッチを適用できるようになりました。新しいパッチターゲットは corednsdeployment です(例:パッチファイル corednsdeployment+json.json)。これにより、init および upgrade 操作中に CoreDNS デプロイメントのカスタムパッチを適用することが可能になりました。 (#124820, @SataQiu) [SIG Cluster Lifecycle]

--patch で指定するファイルは以下のフォーマットに従っている必要があります。

  • target[suffix][+patchtype].extension

なので、上記例の corednsdeployment+json.jsoncorednsdeployment ターゲットのパッチタイプ jsonjson で書かれたパッチ、です。

  • kubeadm: --experimental-output フラグを非推奨としました(将来のリリースで削除される予定)。また、それに伴い同目的の新しいフラグ --output が追加されました。影響を受けるコマンドは kubeadm config images listkubeadm token listkubeadm upgrade plankubeadm 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 クライアントライブラリを使用するように変更しました。kubeadmdeb/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 the cri-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 listkubeadm token list コマンドにおいて構造化出力を表示するために output/v1alpha3 を使うようになりました。(#124464, @carlory)

output/v1alpha2 を削除するために output/v1alpha3 へアップデートしただけで、表示する内容は (バージョン番号以外) 変わらないようです。

  • kubeadm: ControlPlaneKubeletLocalMode フィーチャーゲートが追加されました。これは、kubeadm init でクラスタを作成する際や kubeadm join でコントロールプレーンノードを参加させる際に、kubelet がローカルの kube-apiserver エンドポイントを使用するよう指定するために利用できます。それに伴い kubeadm join ワークフローに、control-plane-join-etcdkubelet-wait-bootstrap という2つの新しい実験的フェーズが追加されました。これらのフェーズはこのフィーチャーゲートが有効な場合に使用されます。ControlPlaneKubeletLocalMode が GA(一般提供)になると、これらのフェーズは実験的というフラグが解除されます。
    またアップグレードにおいて、kubeadm upgrade コマンド実行時にこのフィーチャーゲートが有効な場合、/etc/kubernetes/kubelet.conf を変更してローカル kube-apiserver エンドポイントを使用するようになります。このアップグレードメカニズムは、このフィーチャーゲートが一般提供された際にハードコードで true に設定された時点で削除されます。(#125582, @chrischdi)

:bug: バグ、もしくはリグレッション

  • 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-apiserverkube-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 で設定された healthzaddress: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で定義されているClusterConfigurationfeatureGatesフィールドを編集してください。(#125797, @SataQiu)
  • kubeadm: kubeadm init phase certs sa コマンドが --config フラグを受け付けられるようになりました。 (#125396, @Kavinraja-G)
  • kubeadm: 特定のWindows環境で失敗しないように、IsPrivilegedUser プレフライトチェックを改善しました。(#124665, @neolit123)

:thought_balloon: その他(クリーンアップまたはフレーク)

  • kubeadm: 非推奨となっていた UpgradeAddonsBeforeControlPlane フィーチャーゲートを削除しました。また、CoreDNSkube-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)
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

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?