セッション Pod がブート失敗で Failed になると reaper が即削除し kubectl logs で 死因を追えなかった。「開く」で 502 になるだけで原因不明だった。 - session.reaper.terminatedRetentionSeconds(既定 900): 終了済み Pod を finishedAt からこの秒数は回収しない。manager 回収ループと reaper CronJob 両方が尊重 - GET /api/sessions/<id>/log: セッション Pod のログを text で返す(pods/log get のみ、追加権限なし) - UI: 「ログ」ボタン、状態の色分け、Failed 行に reason/exitCode/message 併記、 Running 以外は「開く」非表示 - session-entrypoint.sh: URL スキームと identity 型の不一致を警告。 git clone を --progress ... 2>&1 にして git/ssh の出力を Pod ログへ - helm lint / template 検証済み
39 lines
2.2 KiB
Markdown
39 lines
2.2 KiB
Markdown
# CHANGELOG 2.1.263-d — 手動リリース
|
||
|
||
## 背景
|
||
|
||
セッション Pod がブート失敗(`git clone` エラー等)で `Failed` になると、reaper が
|
||
即座に削除するため `kubectl logs` で死因を確認できなかった。「開く」で 502 になるだけで
|
||
原因が分からない状態だった。
|
||
|
||
## 追加 / 変更
|
||
|
||
- **`session.reaper.terminatedRetentionSeconds`(既定 900)**
|
||
終了済み(Succeeded / Failed)のセッション Pod を、この秒数が経過するまで回収しない。
|
||
Pod の `containerStatuses[].state.terminated.finishedAt` を基準に判定。`0` で旧挙動(即回収)。
|
||
manager の回収ループと予備 CronJob の両方が尊重する。
|
||
- **`GET /api/sessions/<id>/log`**
|
||
セッション Pod(`claude` コンテナ)の直近ログを text/plain で返す。manager は既に
|
||
`pods/log` の `get` 権限を持つ(追加権限なし)。
|
||
- **Web UI**
|
||
- セッション一覧に **「ログ」ボタン**(インラインでログ表示)。
|
||
- 状態を色分け表示。`Failed` の行に `reason` / `exit <code>` / `message` を併記。
|
||
- `Running` 以外では「開く」を出さない。
|
||
- **セッションブートスクリプト(`files/session-entrypoint.sh`)**
|
||
- URL のスキーム(`https://` / `git@` / `ssh://`)と選択された identity の型
|
||
(`ssh` / `https-token`)の不一致を検出して警告。
|
||
- `git clone` を `--progress ... 2>&1` で実行し、git / ssh の出力をそのまま Pod ログへ。
|
||
失敗時は代表的な原因(認証不足・権限なし・known_hosts 不一致・NetworkPolicy による
|
||
egress 遮断)をメッセージで提示。
|
||
|
||
## トラブルシューティング追記(README)
|
||
|
||
- 「開く」で 502 / 一覧が `Failed` → UI の「ログ」ボタンで死因確認。
|
||
- clone が 60〜130 秒でタイムアウト → NetworkPolicy(Cilium 等)の egress 遮断を疑い、
|
||
`--set networkPolicy.enabled=false` で切り分け。
|
||
- URL スキームと identity 型を一致させる(HTTPS ↔ `https-token` / SSH ↔ `ssh`)。
|
||
|
||
## バージョン
|
||
|
||
`version` = `2.1.263-d` / `appVersion` = `"2.1.263"`。
|