結果:マージ(2026-10-27 00:04、 kubevirt/user-guide#1040). 実はGitHubのPR・レビュー・コメント・タイムライン・チェック履歴、関連issue・PR、ユーザーガイドのソース(PRのベースコミット
0ca33477)、KubeVirtのソース(タグ v1.9.0)、 コントリビューション台帳のドラフト、TT LabリポジトリのVM作成コードから取得しました。時刻は韓国時間です。
目次
- 一言まとめ
- 1. 何が問題だったのか:警告は出るのにドキュメントは静か
- 2. 原因:ドキュメントのどの行か
- 3. 何を変えたのか:diffの要点
- 4. 反応:approveは1時間37分、lgtmは9日
- 5. 学んだこと:オープンソースコントリビューションのコツ
- リンク
一言まとめ
| PR | kubevirt/user-guide#1040 docs: mark spec.running as deprecated in favor of runStrategy |
| 変更点 | run_strategies.md(紹介文をrunStrategy優先に、非推奨の警告ボックス、タイポ1つ)、 architecture.md(周辺の文章3つ、 virtctl コマンド1つ)。27行追加、15行削除 |
| 反応 | approverが1時間37分後に /approve. /lgtm は9日後に別のメンテナーが歓迎の挨拶とともに |
| 結果 | PR公開 10-17 00:51 → /approve 02:28 → /lgtm 10-27 00:04 → マージ30秒後、約9日23時間13分 |
1. 何が問題だったのか:警告は出るのにドキュメントは静か
KubeVirt の VirtualMachine は、VMを起動するかどうかをかつては真偽値フィールド spec.running で、現在は spec.runStrategy(Always·Halted·Manual·
RerunOnFailure など)で決定します。 spec.running は kubevirt/kubevirt#12578(2024-09-30マージ)で
非推奨としてマークされ、ユーザーガイドの v1.4.0 リリースノートの「Deprecation」にも掲載されました。
APIはこのことを明確に示しています。PRの本文に記載した、v1.9.0クラスターで確認した内容です。
kubectl explain vm.spec.runningはDeprecated: VirtualMachineInstance field "Running" is now deprecated, please use RunStrategy instead.を表示します。virtualmachine-validator.kubevirt.ioWebhookがVMの作成・修正にかかっており、spec.runningがあると警告spec.running is deprecated, please use spec.runStrategy instead.を返します (vms-admitter.go175〜178行目).
kubectl explain の出力はPRの本文にのみ記載し、台帳に出力のオリジナルファイルは残していません。
しかし、ユーザーガイドのRun Strategiesページの最初の文は「VirtualMachine には guest を動かすかどうかを決める Running 設定がある」であり、非推奨については1度も
触れていませんでした。runStrategy を探してそのページにたどり着いた人も、最初の段落で running: true を学んで帰ることになります。
TT Labにも同じ状況があります。受講生用VMを作成するコード(TT Labリポジトリ backend/app/vms.py)は今でもマニフェストに "running": True を含め、
実行されているかどうかもそのフィールドで読み取っています。すぐ上のコメントには「running は deprecated だ、runStrategy に移行する方が正しいが、現在動いているVMと動作を合わせるためにそのままにしておく」
と書かれています。コントリビューション台帳にも「TT Labが非推奨のフィールドで学生用VMを作成・読み取りしている、このPRと同じテーマ」と記されており、移行作業は別途切り出しています。
2026-10-29時点でもまだ移行できていません。他人のドキュメントを直している間、私たちのコードも同じ借金を抱えていることを正直に書き留めておきます。
2. 原因:ドキュメントのどの行か
行番号はPRのベースコミット 0ca33477 を基準としています。
Run Strategiesページ
docs/compute/run_strategies.md5〜12行目:Running設定を真っ先に紹介し、それだけでは不十分な場合を説明した後にRunStrategyへ移行します。非推奨についての言及はありません。- 47行目:
associated ith the VMタイポ。
アーキテクチャページ
- このページのサンプルVMは、 #849(2024-10-30マージ、「spec.runningの参照をrunStrategyに変更」)で
runStrategy: Haltedに 変更されました。しかし、周辺の文章3つはそのままになっていました。 195〜197行目(「spec.runningがtrueの場合、再作成する」)、 357行目(「spec.runningがfalseのためvmiが作成されない」)、 388行目(kubectl describe出力のRunning: true). - 367行目 は
virtctl start vm vm-cirrosです。virtctl startはVM名を1つだけ受け取ります(start.go46〜49行目、v1.9.0)。 HaltedであるVMをvirtctl startすると、runStrategy がAlwaysに変わります(lifecycle.go632〜649行目、v1.9.0)。 そのため、開始後のdescribeの出力はRun Strategy: Alwaysでなければなりません。
この非推奨を修正しようとした試みは過去にもありました。issue #923(2025-09-15)ではVMのライフサイクルとRunStrategyのドキュメントを 修正しようとし、PR #927(2025-09-17)では非推奨の表記を関係のないtolerationsの変更と一緒に盛り込んでいました。 どちらもレビューなしでBotにより非アクティブとしてクローズされました(2026-02-14、2026-03-22)。
3. 何を変えたのか:diffの要点
# docs/compute/run_strategies.md, Overview
-VirtualMachines have a `Running` setting that determines whether or not
-there should be a guest running or not. ...
+VirtualMachines have a `spec.runStrategy` field that determines whether
+or not there should be a guest running, and what KubeVirt should do when
+the guest stops.
+
+Older manifests use the boolean `spec.running` field instead. ... (기존 설명은 이 문단으로 옮김)
+
+!!! warning
+ `spec.running` is deprecated since KubeVirt v1.4.0. Use
+ `spec.runStrategy` instead: `spec.running: true` corresponds to
+ `runStrategy: Always`, and `spec.running: false` corresponds to
+ `runStrategy: Halted`. The API server still accepts `spec.running`,
+ but returns the warning ... when a VirtualMachine that sets it is created or updated.
- associated ith the VM.
+ associated with the VM.
# docs/architecture/architecture.md
-If a VirtualMachineInstance reaches a final state but the `spec.running`
-equals `true`, ...
+If a VirtualMachineInstance reaches a final state but the
+`spec.runStrategy` equals `Always`, ...
-Since `spec.running` is set to `false`, no vmi will be created:
+Since `spec.runStrategy` is set to `Halted`, no vmi will be created:
-$ virtctl start vm vm-cirros
+$ virtctl start vm-cirros
- Running: true
+ Run Strategy: Always
説明を削除したわけではありません。「真偽値1つではguest内でシャットダウンする場合を表現できない」という従来の説明は、runStrategyがなぜ生まれたのかを教えてくれる良い段落なので、
「古いマニフェストは spec.running を使用する」の後ろに移動しました。そして、新しく使い始める人が最初に目にする文をrunStrategyに変更し、古いフィールドから新しいフィールドへの
対応表(true → Always, false → Halted)とAPIサーバーが出力する警告文を警告ボックスに入れました。警告文をそのまま記載したのは、検索によってこのページにたどり着くように
するためです。
PRの本文の最後には #923・#927 が同じテーマを扱っていたがレビュー前にクローズされたこと、このPRは非推奨のみを扱うことを記載しました。AIの使用はコミットのフッター
Co-Authored-By: Claude Opus 5.5 と Signed-off-by、および本文の終わりの「AIの助けを借りてドラフトを作成し、自分がレビューした」という1文で明かしました。
KubeVirt の AIコントリビューションポリシーに則った形です。コミットにはSSH署名が付いています。
ドキュメントのビルド(mkdocs)はローカルでは実行せず、マージ前にNetlifyのプレビューが作成されました。
4. 反応:approveは1時間37分、lgtmは9日
| 時刻 | 日 |
|---|---|
| 10-17 00:51 | PR公開。prow が needs-ok-to-test·size/M ラベル、レビュアー2人を指定 |
| 10-17 02:28 | approver が /approve. approved ラベル |
| 10-26 17:29 | 9日間 /lgtm がなかったため、別のメンテナーを /cc し、「approveがあり、lgtmだけが残っている」とお願い |
| 10-27 00:04 | そのメンテナーが /lgtm、「修正してくれてありがとう、プロジェクトへようこそ」 |
| 10-27 00:04 | 30秒後にtideがマージ |
このリポジトリにはPRごとに実行されるテストジョブがないため、 needs-ok-to-test ラベルが最後まで付いていましたが、マージには影響ありませんでした(台帳の記録)。残りのチェックはDCO、
Netlifyプレビュー、tideの3つでした。必要だったのは人の /approve と /lgtm の2つだけであり、1つ目はすぐに来ました。
2つ目が来なかった9日間の間、私たちは台帳に「10/26頃に音沙汰がなければ /cc しよう」と日付を書き留めて待っていました。その日に一度お願いし、6時間35分後に
/lgtm が来ました。
後から見ると、 /lgtm をくれたメンテナーは1年前にissue #923 を開いた人物でした。同じ問題を認識しており、誰かが修正してくれるのを待っていた人にPRが届いた
ものとみられます。PRの本文に #923 を記載しておいたことも、その結びつきを容易にしたと考えられます。
5. 学んだこと:オープンソースコントリビューションのコツ
- 「非推奨は、APIが語っていることをドキュメントが追随して語るようにします。」
kubectl explainとWebhookの警告はすでに同じことを語っていました。その文言をドキュメントに そのまま転記すれば、ユーザーが警告を検索してドキュメントにたどり着き、メンテナーは文言が正しいか別途確認する必要がなくなります。 - 「サンプルを修正したPRは周辺の文章まで確認します。」 #849 はサンプルのYAMLだけを変更し、そのYAMLを説明する文章はそのまま残していました。コードブロックとその前後の文章はひとまとめにして
読まなければ、食い違いは見えてきません。同じ箇所の
virtctlコマンドもそうやって見つけました。 - 「過去の試みを探して範囲を絞り込みます。」 #927 は関係のない変更とまとめられてレビューを受けられませんでした。今回のPRは非推奨のみを扱うと本文で明らかにしました。 過去のissueを本文に紐付けておくと、そのissueを覚えている人に通知が届くこともあります。
- 「修正した内容を自分たちのコードにも適用します。」 TT LabのVM作成コードはまだ
spec.runningを使っています。アップストリームのドキュメントを修正したこととは別に、自分たちのコードをrunStrategy へ移行することが残された宿題です。
ティティの一言。 遊び場の案内板の1行目に「ブランコは赤いボタンでつけてね」と書いてありました。でも赤いボタンを押すと「このボタンはもうすぐなくなります、青い手すりを 使ってください」という声がします。もう2年目です!案内板の1行目を青い手すりに変えて、赤いボタンの話は「かつては」の欄に移動しました。9晩待っていたら、1年前に 「案内板を直してください」とメモを書いてくれた先生が来て「よく来たね!」とスタンプを押してくれました。でも私たちの遊び場のブランコも、まだ赤いボタンをつけて動かしています。これはすぐ直しますね。
リンク
すべての資料は2026-10-29に閲覧しました。
- PR: kubevirt/user-guide#1040 (マージコミット
a30126d0) - 修正したドキュメント(ベースコミット):
run_strategies.md,architecture.md - KubeVirtソース(v1.9.0):
vms-admitter.go,start.go,lifecycle.go - 非推奨: kubevirt/kubevirt#12578
- 過去の試み:issue #923、PR #927、サンプルを変更した #849