Skip to content

refactor: talos/ を bootstrap/ にまとめ、ArgoCD が当てるものを apps/ へ移す - #633

Merged
5ym merged 2 commits into
mainfrom
bootstrap-flat
Oct 30, 2026
Merged

5ym merged 2 commits into
mainfrom
bootstrap-flat

Conversation

@5ym

@5ym 5ym commented Oct 30, 2026

Copy link
Copy Markdown
Collaborator

talos/ を bootstrap/ にまとめ、bootstrap/ の部品のディレクトリをやめて 1 部品 1 ファイルを基本にする。ArgoCD が当てていた平文のマニフェストは apps/ へ移す。

置き場

bootstrap/                                  # 全部 machine config に載る(render.sh が描く)
├── README.md
├── talos.md                                # 旧 talos/README.md
├── render.sh                               # 旧 talos/render.sh(add-namespace.awk を中に入れた)
├── talos.sops.yaml                         # 旧 talos/controlplane.yaml
├── talos-secrets.sops.yaml                 # 旧 talos/secrets.yaml
├── versions.yaml                           # 旧 talos/versions.yaml
├── local-path.yaml                         # 旧 talos/local-path.yaml
├── apiserver-rbac.yaml / apiserver-ca.crt
├── cilium-values.yaml
├── cert-manager-values.yaml / cert-manager-cloudflare-secret.sops.yaml
├── argocd-values.yaml / argocd-secret-values.sops.yaml
├── infisical-values.yaml / infisical-secret-values.sops.yaml / infisical-secrets.sops.yaml
└── argocd/repos.yaml                       # 動かさない(下)
apps/
├── argocd/{httproute,oidc-secret}.yaml     # 旧 bootstrap/argocd/
├── auth/*                                  # 旧 bootstrap/auth/
├── cert-manager/clusterissuer.yaml         # 旧 bootstrap/cert-manager/
├── gateway/{gateway,redirect-https}.yaml   # 旧 bootstrap/gateway/
└── infisical/smtp-secret.yaml              # 旧 bootstrap/infisical/
  • chart の版は version.yaml をやめ、<name>-values.yaml の先頭の 2 行に書く:
    # renovate: datasource=helm depName=cilium registryUrl=https://helm.cilium.io
    # version: 1.20.4
    値として書くと chart に渡ってしまうのでコメント。render.sh(bver と chart)、cilium-drift.yml、Renovate の customManagers が同じ 2 行を読む。Renovate は (?:#\s*)?version: で versions.yaml と同じ規則に入れた。helm-values の manager は既定が values.yaml だけなので、bootstrap/*-values.yaml を足した(argocd の redis のイメージを拾うため)
  • Namespace(argocd・cert-manager・infisical)は namespace.yaml をやめ、render.sh が kube-system 以外の chart の前に付ける
  • cilium と infisical の README は bootstrap/README.md に入れた
  • bootstrap/argocd/repos.yaml は 動かさない。machine config の apps の Application(argocd-values.yaml の extraObjects)が path: bootstrap/argocd / include: repos.yaml を焼いているので、動かすと machine config の当て直しが要る
  • .sops.yaml の規則、renovate.json、talos-boot / cilium-drift の paths とファイル、tools/creds.sh、docs・コメントのパスを全部直した。pulumi/ のコメント 2 か所(bootstrap/auth)は触っていない
  • .gitignore は出力先を bootstrap/clusterconfig/ にし、手元に残った古い talos/ も無視する

ArgoCD の持ち主の移し替え

gateway・auth・ClusterIssuer・InfisicalSecret などは Application bootstrap の追跡(annotation の tracking-id)に入っている。Application bootstrap は prune 付きの自動同期だったので、そのまま中身を入れ替えると、古い exclude のまま新しい bootstrap/ で同期して、移したもの(auth の Namespace ごと)を prune しかねない。

  1. chore(argocd): bootstrap の Application の自動同期を止める #632 で Application bootstrap の自動同期を止めた(automated.enabled: false)。マージ後に apps が当てたのを live で確認済み
  2. この PR で Application bootstrap を repos.yaml から消す → apps が prune する。finalizer が無い(kubectl get application -n argocd bootstrap で確認)ので、中のリソースは消えずに残る
  3. gitops の Application(apps/ を再帰で同期)が同じオブジェクトを見つけて当て、tracking-id が gitops: に書き換わる。中身は同じなので変更は注釈だけ

どの順で起きても、消えるのは Application bootstrap の CR だけ。

machine config

前後で render.sh を通して比べた。違いは YAML のコメント 4 か所だけ(cert-manager の Namespace の先頭のコメント 2 行が無くなった、apiserver-rbac.yaml と local-path.yaml のコメントの中のパス)。Kubernetes のオブジェクトは同じなので、当て直しは急がない(次に何かを当てるときに一緒に入る)。

確認

  • bootstrap/render.sh を tools のコンテナで前後に通して比べた(上)
  • renovate-config-validator --strict は通った。--platform=local --dry-run=lookup で cilium・cert-manager・argo-cd・infisical-standalone(bootstrap/*-values.yaml)、siderolabs/talos・kubernetes/kubernetes・kubernetes-sigs/gateway-api(bootstrap/versions.yaml)、argocd の redis のイメージを拾うことを確かめた
  • 相対リンクが切れていないことを見た

🤖 Generated with Claude Code

https://claude.ai/code/session_01T9PbUfqG4pPxus99UeLiJs

- talos/ のファイルを bootstrap/ へ(render.sh・versions.yaml・local-path.yaml、
  controlplane.yaml → talos.sops.yaml、secrets.yaml → talos-secrets.sops.yaml、README → talos.md)
- bootstrap/ の部品のディレクトリをやめ、1 部品 1 ファイルを基本に直下へ置く
  (<name>-values.yaml、<name>-secret-values.sops.yaml、apiserver-rbac.yaml など)
- chart の版は version.yaml をやめ、<name>-values.yaml の先頭の
  `# renovate:` と `# version:` の 2 行に書く。render.sh・cilium-drift・Renovate がそこを読む
- Namespace は render.sh が描く(namespace.yaml をやめた)。add-namespace.awk は render.sh に入れた
- ArgoCD の Application `bootstrap` が当てていた平文のマニフェスト(gateway・auth・ClusterIssuer・
  argocd の HTTPRoute と InfisicalSecret・infisical の SMTP の InfisicalSecret)を apps/ へ移し、
  Application `bootstrap` を消す(自動同期は前の PR で止めてある。finalizer が無いのでリソースは残り、
  gitops の Application が引き取る)
- bootstrap/argocd/repos.yaml だけは場所が machine config に焼いてあるので動かさない

machine config は YAML のコメントが 4 か所変わるだけ(cert-manager の Namespace の先頭のコメントと、
apiserver-rbac.yaml・local-path.yaml のコメントの中のパス)。

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01T9PbUfqG4pPxus99UeLiJs
@claude

claude Bot commented Oct 30, 2026 •

Copy link
Copy Markdown

Claude finished @5ym's task in 59s —— View job


レビュー結果

大きな不具合は見つかりませんでした。以下は確認した内容と、小さな指摘です。

確認して問題なかった点

  • ArgoCD の持ち主の移し替え: gitops の Application は deploy/argocd.yaml で sourcePath: apps / autoSync: true です。exclude は bootstrap/** などで、apps/argocd・apps/auth・apps/gateway などを拾えます。Application bootstrap を消す順序と、tracking-id が gitops: に書き換わる流れは、説明どおりに成り立ちます。
  • repos.yaml を動かさない判断: argocd-values.yaml の extraObjects が path: bootstrap/argocd / include: repos.yaml を焼いているので妥当です。
  • .sops.yaml の規則の順序: 先に当たった規則が使われるため、具体的な規則を先に置いて汎用の ^bootstrap/[^/]+\.sops\.yaml$ を最後に置いたのは正しいです。*-secret-values.sops.yaml は -values\.yaml$ に当たらないので、Renovate の対象にも入りません。
  • render.sh: bver は先頭の # version: を読み、chart() は # renovate: の行から chart 名と repo を読みます。空のときは明示的に落ちるので、読み損ねたまま描くことはありません。Namespace を kube-system 以外の前に付ける処理と、生成物の検査(kind: Namespace\nmetadata:\n name: ...)も対応しています。
  • ワークフロー: talos-boot.yml の paths と cilium-drift.yml の --certificate-authority のパスが新しい位置に合っています。

指摘(軽微)

  1. 要確認 — Renovate の helm-values の対象が広がる: bootstrap/[^/]+-values\.yaml を足したので、これまで拾っていなかった cilium-values.yaml と cert-manager-values.yaml も helm-values の対象になります。この 2 つに image: repository/tag 形式の上書きがあれば、新しい更新 PR が出ます。argocd と infisical は matchFileNames で bootstrap charts にまとまるのに、この 2 つは入っていません。意図したものか確認してください(cilium・cert-manager の chart そのものは customManager が見るので、重複はしません)。
  2. 取り残し: recovery/README.md:241 の「secrets.yaml を作り直した」が旧名のままです。talos-secrets.sops.yaml に直すと、同じファイルの 63 行目と揃います。
  3. 見ただけで確かめていない点: cilium-drift.yml の paths に bootstrap/apiserver-ca.crt は入っていません。移す前も bootstrap/cilium/** だけで、apiserver/ は入っていなかったので、挙動は変わりません。

テスト
CI の talos-boot が render.sh を通してクラスタを立てるので、移動の検証としては十分です。PR 本文にあるとおり、前後の render.sh の出力差分が YAML のコメントだけであることも筋が通っています。この PR 自体は、まだ CI の結果を確認していません。

全体として、移動と持ち主の移し替えの手順がよく考えられています。上の 1 を確認してもらえれば十分です。

@5ym

5ym commented Oct 30, 2026

Copy link
Copy Markdown
Collaborator Author

レビューの 1: helm-values の対象は前と変わらない(前も既定のパターン values.yaml が bootstrap/cilium/values.yaml と bootstrap/cert-manager/values.yaml に当たっていた)。lookup の dry run でも、この 2 つから出る依存は customManager の chart だけだった。2 は直した。

@claude

claude Bot commented Oct 30, 2026 •

Copy link
Copy Markdown

Claude finished @5ym's task in 26s —— View job


レビュー結果

大きな不具合は見つかりませんでした。f74a4ed(recovery/README.md の旧名の修正)が入った状態で見直しました。

確認して問題なかった点

  • .sops.yaml: 先に当たった規則が使われるので、具体的な規則を先に、汎用の ^bootstrap/[^/]+\.sops\.yaml$ を最後に置いた順序は正しいです。
  • render.sh:
    • bver は先頭の # version: 行を読み、chart() は # renovate: の行から chart 名と repo を読みます。読めないときは明示的に落ちます。
    • cilium-values.yaml は 1 行目がコメントで、版は 3 行目にあります。sed は行の位置に依存しないので問題ありません。
    • Namespace を kube-system 以外の前に付ける処理と、生成物の検査(kind: Namespace\nmetadata:\n name: …)も対応しています。
  • ArgoCD の持ち主の移し替え: repos.yaml から Application bootstrap を消す手順は、PR 本文の説明(finalizer が無い、chore(argocd): bootstrap の Application の自動同期を止める #632 で自動同期を止めた)どおりに成り立ちます。repos.yaml を動かさない判断も、extraObjects に焼いてあるパスと合っています。
  • Renovate: 前回「要確認」とした点を調べました。cilium-values.yaml と cert-manager-values.yaml には repository / tag / image の上書きが無く、helm-values の対象が広がっても新しい更新 PR は出ません。この点は問題ありません。

指摘(軽微・任意)

  • 旧名 secrets.yaml が 3 か所に残っています。docs/decisions.md:58、docs/talos.md:96、tools/README.md:63 です。talosctl gen secrets の出力という一般的な意味にも読めるので、誤りとは言い切れません。リポジトリのファイルを指しているなら bootstrap/talos-secrets.sops.yaml に揃えると、recovery と同じ書き方になります。

テスト
CI の talos-boot が render.sh を通してクラスタを立てるので、移動の検証としては十分です。PR 本文にある前後の render.sh の出力比較(差は YAML のコメントだけ)も筋が通っています。CI の結果は、私の側では確認していません。

@5ym
5ym merged commit 794d5a4 into main Oct 30, 2026
7 checks passed
@5ym
5ym deleted the bootstrap-flat branch October 30, 2026 14:40
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant