概要
Kubernetes の Docker ベースのビルド(make/build)で、ソース同期に使う rsyncd コンテナの IP アドレス検出が失敗し、イメージビルドが落ちる問題を修正したものです。v1.32 / v1.33 / v1.34 の各リリースブランチ向けに同様の修正が取り込まれています。
変更内容(何が変わったか)
build/common.sh の kube::build::start_rsyncd_container() で、docker inspect --format による IP 取得ロジックが変更されました。
- 旧:
{{ .NetworkSettings.IPAddress }} - 新:
{{range .NetworkSettings.Networks}}{{.IPAddress}},{{end}}でNetworks側から IP を列挙し、先頭の 1 つを採用(cut -d',' -f1)
背景(なぜこの変更が必要か)
不具合報告では、Kubernetes < 1.35 相当のブランチで Dockerized build が CI などで失敗し、docker inspect のテンプレート評価時に .NetworkSettings.IPAddress が存在しないため map has no entry for key "IPAddress" となって停止していました。
一方で、master/1.35+ 側はビルド処理の整理(rsync 連携の撤廃)によりこの経路自体が使われなくなっており、問題は主にそれ以前のリリースブランチで顕在化していました。
影響(運用者/利用者/開発者への影響、注意点、移行)
- 運用者: クラスタ稼働の挙動そのものではなく「Kubernetes をソースからビルドしてイメージを作る」工程(CI、ディストリビュータ、自前ビルド)に影響する修正です。
- 利用者/開発者: v1.32/v1.33/v1.34 系で Dockerized build(例:
make quick-release-imagesなど)を回す環境では、該当 PR を含むブランチ/リリースへ更新することでビルド失敗が回避されます。 - 注意点: 複数ネットワーク接続時は
Networksから列挙された IP の「先頭 1 つ」を使う実装になります。
用語メモ(用語の軽い説明)
docker inspect --format: Docker オブジェクト情報を Go テンプレートで整形・抽出する機能。NetworkSettings.Networks: コンテナが接続しているネットワークごとの設定(IP 等)を持つ構造。rsyncd: rsync のデーモン。ここではコンテナ間でソース/生成物を同期する用途。kube-cross: Kubernetes ビルド用の事前ビルド済みコンテナイメージ(ツールチェーンを含む)。
参考リンク
- https://github.com/kubernetes/kubernetes/pull/135578
- https://github.com/kubernetes/kubernetes/pull/135577
- https://github.com/kubernetes/kubernetes/pull/135576
- https://github.com/kubernetes/kubernetes/issues/135575
- https://github.com/kubernetes/kubernetes/pull/134510
- https://github.com/kubernetes/kubernetes/issues/112862