概要

kube-apiserver起動時に出力される「alpha APIが有効なのに、emulated versionがバイナリ版と異なる」という警告ログについて、不要な警告(スパム)を減らす修正が入りました。報告されていた事象は、例えばバイナリがv1.34.1なのにエミュレート側が1.34(patchなし)として扱われる状況で、起動ログに多数の警告が出るというものです。

変更内容(何が変わったか)

  • バージョン比較の見直し: BinaryVersion()EmulationVersion()の比較で、patch差まで含めて「不一致」と判定していたため(例: 1.34.1 vs 1.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.34binary 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単位。

参考リンク