darkmatter-gitops-conventions について
`darkmatter/gitops`リポジトリでDarkmatterのk3sクラスターを管理するためのGitOps規約を定めるスキルです。コミット済みの再現可能な変更、ArgoCDによる同期、リポジトリ内の暗号化されたシークレットを重視します。
主な機能
- 01Gitをクラスターの唯一の正とする
- 02ArgoCDマニフェストで変更を管理
- 03コミット前にマニフェストを検証
- 04コミットまたはダイジェストでコンテナイメージを固定
- 05SOPSでインフラシークレットを暗号化保存
- 06beadsでフォローアップを管理
活用シーン
- 01コミット済みマニフェストでk3sクラスターを更新
- 02git revertによるクラスター変更のロールバック
- 03コミット前のマニフェスト構文とスキーマの確認
- 04暗号化されたインフラシークレットの安全な編集
インストール
コマンドをコピーしてターミナルで実行します。
npx skills add https:/ / github.com/ darkmatter/ skills --skill darkmatter-gitops-conventionsインストール後、Claude Code で/darkmatter-gitops-conventionsを入力して読み込まれたか確認します。
詳細
Darkmatter GitOps の規約
darkmatter/gitops は、k3s クラスターの唯一の信頼できる情報源です。ArgoCD
app-of-apps、Helm values、KSOPS シークレット、ネットワークポリシー、cloudflared のルートを管理します。
ここにコミットされて初めて変更が有効になります。それ以外はすべてドリフトです。
最優先のルール
クラスターを命令的に変更してはいけません。kubectl apply/edit/patch も
helm upgrade も、命令的な再起動も禁止です。稼働中のオブジェクトが
リポジトリと異なる場合は、リポジトリが正であり、オブジェクトに問題があります。
- デプロイメントを再読み込みする:マニフェスト内の pod-template config-rev アノテーションを更新してコミットします。
kubectl rollout restartは使いません。 - ArgoCD に今すぐ再調整させる:マニフェストに
arc.darkmatter.io/reconcile-at: "<current UTC timestamp>"アノテーションを設定します。 - ロールバックする:問題のコミットを
git revertしてプッシュします。ArgoCD が収束します。 稼働中の状態を「前向きに修正」してはいけません。
すべてのコミット前に検証する
次の3つをすべて実行してください。CI でも実行されます。遅いコミットより、main が赤くなるほうが問題です。
kubeconform -strict -ignore-missing-schemas -summary <changed manifests>
yq eval '.' <changed file> > /dev/null # syntax parse
git diff --check # whitespace damage
Helm values がブロックスカラー内にある ArgoCD の apps/*.yaml については、埋め込まれた YAML も検証してください。
yq eval '.spec.sources[0].helm.values | from_yaml' apps/<app>.yaml > /dev/null
アサーションスクリプトで失敗を隠してはいけません。|| true は使わず、パイプラインの終了コードが重要な場合は set +e と明示的な PIPESTATUS[0] の取得を使ってください。
イメージ
完全なコミットタグ(sha-<40-hex>)またはダイジェストで固定してください。latest もブランチタグも使ってはいけません。イメージの更新は、出荷するコミットをメッセージに記載する1行の差分にします。ArgoCD は同期時(約3分後)に変更を取り込みます。サンドボックス/Pod 仕様のハッシュが変わると、依存するウォームプールは自動的に入れ替わります。
シークレット(KSOPS/SOPS)
- シークレットは JSON(
*.sops.json)として暗号化した状態でリポジトリに保存し、KSOPS でレンダリングします。 ADR-0011 を参照してください。新しい*.sops.yamlや.env.sopsを追加してはいけません。既存の YAML SOPS ファイルを編集する場合は変換してください。 Kubernetes Secret の JSON は API で有効です。 - 編集する場合:
0600の一時ファイルに復号し、編集してから再暗号化します。その後、構造を検証し(復号した形式に対してjq emptyを実行)、キー名のみを比較して差分を確認します。値は決して出力してはいけません。一時ファイルは削除してください。シークレットではない通常のマニフェストは YAML のままにし、引き続きyqを使ってください。 - それ以外の場所では、名前でシークレットを参照してください。マニフェストやログにシークレット値を直接記載した場合は、インシデントとなります。
- エージェント/ランタイムのシークレットには、Git ではなく強化されたフロー(Centaur vault + console PUTs)を使用します。このリポジトリに含めるのはインフラストラクチャのシークレットのみです。
ArgoCD の想定事項
- 同期周期は約3分です。再プッシュするのではなく、ArgoCD でアプリを確認してください。
- 古い同期の再試行:Application から
/operationフィールドを削除し、ハードリフレッシュしてください。 - プルーニング後も保持する必要がある重要なリソースには、
IgnoreExtraneous/Prune=falseアノテーションが付与されています。近くを編集する際は、既存のアノテーションを尊重してください。
タスク
フォローアップは TODO コメントではなく、beads(bd create)で管理してください。基準となるのは再現可能性です。クラスターはこのリポジトリだけから再構築できなければなりません。