概要
kube-apiserver起動時に出力される「alpha APIが有効なのに、emulated versionがバイナリ版と異なる」という警告ログについて、不要な警告(スパム)を減らす修正が入りました。報告されていた事象は、例えばバイナリがv1.34.1なのにエミュレート側が1.34(patchなし)として扱われる状況で、起動ログに多数の警告が出るというものです。
変更内容(何が変わったか)
- バージョン比較の見直し:
BinaryVersion()とEmulationVersion()の比較で、patch差まで含めて「不一致」と判定していたため(例:1.34.1vs1.34)、起動時に警告が出ていました。修正により、major/minorが一致していれば(patch差だけなら)警告しないようになりました。 - 「本当に有効化されているalpha APIだけ」警告: レジストリ上のalpha API(
v1alpha*など)を列挙して無条件に警告していたのをやめ、MergedResourceConfig上でそのGroupVersionまたは個別リソースが明示的に有効な場合のみ警告するようになりました。 - テスト追加: patch差では警告しない/major/minor差では(条件を満たせば)警告する、といったケースをテストでカバーしています。
背景(なぜこの変更が必要か)
- Kubernetes v1.32以降、コントロールプレーンコンポーネントに
--emulated-versionによるエミュレーション(以前のバージョン相当の動作)機構が導入されています。 - 1.34.0→1.34.1のようなpatchアップグレード後に、起動ログへ大量のalpha API警告が出るという不具合が報告されました(ログ上は
emulated version 1.34とbinary version 1.34.1の差を指摘)。 - 直前の関連修正で、バージョン比較がポインタ比較から
EqualTo()比較に変わった結果、EqualTo()がpatchまで比較するため、patch差だけでも警告条件を満たしてしまう状況が生まれていました。また、警告側が「実際に有効化されているか」を見ずにalpha GroupVersionを列挙していたため、ログが過剰になり得ました。
影響(運用者/利用者/開発者への影響、注意点、移行)
- 運用者: patchアップグレード時などの起動ログノイズが減り、監視の誤検知・運用負荷を下げます。なお、binaryとemulatedのmajor/minorが異なる状態でalpha APIを有効化している場合は、引き続き警告対象です。
- 利用者: 基本的に動作変更ではなくログ削減であり、移行作業は不要です(本当にalpha APIを使っている場合の注意喚起は維持されます)。
- 開発者: バージョン判定と警告条件が明確化され、回帰テストが追加されたことで、同種のログ回帰を防ぎやすくなります。
用語メモ(用語の軽い説明)
- alpha API:
v1alpha1のようにalphaを含むAPIバージョン(不安定・変更されやすい位置づけ)。 - エミュレートバージョン(emulated version):
--emulated-versionで指定し、過去バージョン相当の動作を再現するための基準バージョン。 - バイナリバージョン(binary version): 実行中のkube-apiserverそのもののバージョン(例:
v1.34.1)。 --runtime-config: kube-apiserverの組み込みAPIの有効/無効を切り替える設定(alpha/beta/GAや<group>/<version>単位など)。- GroupVersion:
rbac.authorization.k8s.io/v1alpha1のような<group>/<version>で表すAPI単位。
参考リンク
- https://github.com/kubernetes/kubernetes/pull/135327
- https://github.com/kubernetes/kubernetes/issues/134023
- https://github.com/kubernetes/kubernetes/pull/134035
- https://github.com/kubernetes/kubernetes/pull/133058
- https://github.com/kubernetes/website/blob/a01d6f3f0487860b12c47fe9953606db9508e3f9/content/ja/docs/concepts/cluster-administration/compatibility-version.md