オプションを入れたのに効かない — 設定をデプロイ前に読み返す
目標
argocd-cmを1項目ずつ増やしながら、argocd admin settings validateでArgo CDが読み取った値を確認して、綴りを間違えたキーがどう静かに消えるかを見ます。リポジトリのSecretと所有マークの方式は、kwokクラスターに直接上げます。
なぜ重要なのか
Argo CDを宣言で管理すると、argocd-cm1枚がプラットフォーム全体の動作を決めます。ところが、このファイルはごく普通のConfigMapなのでスキーマがありません。キー名を間違えても拒否されず、単にその設定がないことになります。この静けさが、問題を長く生き残らせます。argocd admin settings validateは、ファイルを検査するツールではなく、ツールがそのファイルから何を読み取ったかを節ごとに返してくれるツールです。そのため、使い方が重要です。「✅が出たから大丈夫」ではなく、自分が入れた値が返ってくるかを見ます。設定変更にこの出力の前後のdiffを添える習慣1つが、「なぜこのオプションが効かないのか」という質問をなくします。
ステップ
/root/ga-settings/argocd-cm.yamlをdata: {}のargocd-cm ConfigMapとして作り、argocd admin settings validate --argocd-cm-path /root/ga-settings/argocd-cm.yamlの出力を、/root/ga-settings/baseline.txtに保存してください。5つの節(accounts・general・kustomize・repositories・resource-overrides)がすべて見える必要があります。/root/ga-settings/argocd-cm-accounts.yamlに、アカウントを2つ宣言してください。accounts.ciはapiKey, login、accounts.readonlyはapiKeyです。--group accountsだけを検査した出力を、/root/ga-settings/accounts.txtに保存してください。アカウント数がいくつと出るかを見てください。/root/ga-settings/argocd-cm-kustomize.yamlは、ステップ2のアカウントに加えて、kustomize.buildOptionsを--enable-helmにします。--group kustomizeの出力を、/root/ga-settings/kustomize.txtに保存してください。/root/ga-settings/argocd-cm-typo.yamlを、ステップ3のファイルとまったく同じように作り、キー名だけをkustomize.buildOption(末尾のsを抜いた単数形)にしてください。--group kustomizeの出力を/root/ga-settings/typo.txtに保存し、ステップ3の出力と比べてみてください。/root/ga-settings/argocd-cm-scope.yamlは、ステップ3の内容にresource.exclusionsを加えます。項目を2つ置いてください。1つはapiGroupscilium.ioのCiliumIdentity、もう1つはコアグループ(空文字列)のEventで、どちらもclustersは"*"です。/root/ga-settings/scope.txtに、--group kustomizeと--group resource-overridesを一緒に検査した出力を保存してください。/root/ga-settings/argocd-cm-track.yamlは、ステップ5の内容にapplication.resourceTrackingMethod: annotationとapplication.instanceLabelKey: labhub.io/instanceを加えます。そのあと、kwokクラスターにネームスペースga-settingsと/root/ga-settings/deploy.yaml(Deploymentweb、イメージnginx:1.25)を上げて、gitops-argocd-platform-team-a-production-cluster-seoul-web-frontend-appという長い名前をラベルの値として付けてみてください。失敗したコマンドの出力を、標準エラー出力まで合わせて/root/ga-settings/label-limit.txtに保存します。同じ値を、アノテーションargocd.argoproj.io/tracking-idとしては付けられます。そうしてください。/root/ga-settings/argocd-cm-repo.yamlは、ステップ6の内容にrepositoriesのリスト(urlはhttps://example.com/ga-manifests.git、nameはga-manifests、typeはgit)を加えます。--group repositoriesの出力を、/root/ga-settings/repo.txtに保存してください。そのあと、現在推奨されている方式で、同じリポジトリを/root/ga-settings/repo-secret.yamlにSecretga-settings-repo(ネームスペースargocd)として書き、kwokクラスターに適用してください。ラベルargocd.argoproj.io/secret-type: repositoryが必ずある必要があり、stringDataにtype・name・urlを置きます。/root/ga-settings/argocd-cm-final.yamlは、ステップ7の内容にurl(https://argocd.example.com)とdex.config(githubコネクタ1つ)を加えます。全体の節を検査した出力を/root/ga-settings/final.txtに保存し、diff /root/ga-settings/baseline.txt /root/ga-settings/final.txtの出力を/root/ga-settings/settings-diff.txtに保存してください。diffは終了コードが0以外になるので、解答の中で止まらないように気をつけてください。
参考
--groupで節を選べます。accounts、general、kustomize、repositories、resource-overridesです。- このコマンドにはkubeconfigが必要です。ラボのPodにはすでに設定されています。
- resource.exclusionsのように、どの節にも現れない設定があります。そうしたものは、ファイルで確認する必要があります。
- よくあるミスは、
kustomize.buildOptionのようにキー名を間違えることです。エラーなしでデフォルトになります。 - よくあるミスは、リポジトリのSecretに
argocd.argoproj.io/secret-typeラベルを抜かすことです。やはりエラーはありません。 - 参考: https://argo-cd.readthedocs.io/en/stable/operator-manual/argocd-cm-yaml/
空の設定が何を返すかから見る
/root/ga-settings/argocd-cm.yamlをdata: {}のargocd-cm ConfigMapとして作り、argocd admin settings validate --argocd-cm-path /root/ga-settings/argocd-cm.yamlの出力を、/root/ga-settings/baseline.txtに保存してください。5つの節(accounts・general・kustomize・repositories・resource-overrides)がすべて見える必要があります。
このコマンドは、「ファイルに問題がないか」ではなく「このファイルから何を読み取ったか」を節ごとに返します。空なのにアカウントが1つ見える理由を考えてみてください。管理者アカウントは、設定なしでもあります。
アカウントを宣言で増やす
/root/ga-settings/argocd-cm-accounts.yamlに、アカウントを2つ宣言してください。accounts.ciはapiKey, login、accounts.readonlyはapiKeyです。--group accountsだけを検査した出力を、/root/ga-settings/accounts.txtに保存してください。アカウント数がいくつと出るかを見てください。
アカウントのキーの値は、そのアカウントができることの一覧です。apiKeyはトークンの発行、loginは画面へのログインです。CIのように人ではない主体には、loginを与えないほうがよいです。デフォルトのadminアカウントがすでに1つあることも、数えてみてください。
読み取った値をそのまま返す節
/root/ga-settings/argocd-cm-kustomize.yamlは、ステップ2のアカウントに加えて、kustomize.buildOptionsを--enable-helmにします。--group kustomizeの出力を、/root/ga-settings/kustomize.txtに保存してください。
この節は、数ではなく、読み取った値そのものを返します。そのため、「自分が書いたもの」と「ツールが読み取ったもの」を目で見比べられる、数少ない場所です。次のステップで、この性質を使います。
キー名を間違えても、誰も教えてくれない
/root/ga-settings/argocd-cm-typo.yamlを、ステップ3のファイルとまったく同じように作り、キー名だけをkustomize.buildOption(末尾のsを抜いた単数形)にしてください。--group kustomizeの出力を/root/ga-settings/typo.txtに保存し、ステップ3の出力と比べてみてください。
ConfigMapは、どんなキーでも受け付けます。スキーマがないからです。そのため、綴りのミスは、エラーではなく「設定しない」になります。このコマンドが返す値を見る習慣が、こうしたミスを見つける唯一の方法です。
そもそも見ないものを決める
/root/ga-settings/argocd-cm-scope.yamlは、ステップ3の内容にresource.exclusionsを加えます。項目を2つ置いてください。1つはapiGroupscilium.ioのCiliumIdentity、もう1つはコアグループ(空文字列)のEventで、どちらもclustersは"*"です。/root/ga-settings/scope.txtに、--group kustomizeと--group resource-overridesを一緒に検査した出力を保存してください。
除外リストは、Argo CDがクラスターでそもそも監視しない種類を決めます。毎秒数千個も作られるEventや、CNIが作るアイデンティティオブジェクトを除くと、コントローラーの負荷が大きく減ります。ところが、この設定はvalidateの出力のどの節にも現れません。そのことも確認しておいてください。
所有マークをラベルからアノテーションに移す理由
/root/ga-settings/argocd-cm-track.yamlは、ステップ5の内容にapplication.resourceTrackingMethod: annotationとapplication.instanceLabelKey: labhub.io/instanceを加えます。そのあと、kwokクラスターにネームスペースga-settingsと/root/ga-settings/deploy.yaml(Deploymentweb、イメージnginx:1.25)を上げて、gitops-argocd-platform-team-a-production-cluster-seoul-web-frontend-appという長い名前をラベルの値として付けてみてください。失敗したコマンドの出力を、標準エラー出力まで合わせて/root/ga-settings/label-limit.txtに保存します。同じ値を、アノテーションargocd.argoproj.io/tracking-idとしては付けられます。そうしてください。
ラベルの値は、63文字を超えられません。アプリ名が長くなる大きな組織では、ラベル方式はこの上限にぶつかり、切り詰められた名前のせいで、異なるアプリが同じ所有マークを持つことになります。アノテーションには、この上限がありません。
リポジトリはConfigMapではなくSecretで宣言する
/root/ga-settings/argocd-cm-repo.yamlは、ステップ6の内容にrepositoriesのリスト(urlはhttps://example.com/ga-manifests.git、nameはga-manifests、typeはgit)を加えます。--group repositoriesの出力を、/root/ga-settings/repo.txtに保存してください。そのあと、現在推奨されている方式で、同じリポジトリを/root/ga-settings/repo-secret.yamlにSecretga-settings-repo(ネームスペースargocd)として書き、kwokクラスターに適用してください。ラベルargocd.argoproj.io/secret-type: repositoryが必ずある必要があり、stringDataにtype・name・urlを置きます。
ConfigMapのrepositoriesリストは以前の方式で、パスワードやキーを一緒に置けません。現在は、Secret1つがリポジトリ1つで、Argo CDはそのラベルで、リポジトリ用のSecretを探します。ラベルがなければ、何も起きません。エラーも出ません。
変更の前と後を並べて置く
/root/ga-settings/argocd-cm-final.yamlは、ステップ7の内容にurl(https://argocd.example.com)とdex.config(githubコネクタ1つ)を加えます。全体の節を検査した出力を/root/ga-settings/final.txtに保存し、diff /root/ga-settings/baseline.txt /root/ga-settings/final.txtの出力を/root/ga-settings/settings-diff.txtに保存してください。diffは終了コードが0以外になるので、解答の中で止まらないように気をつけてください。
設定を変える変更には、「何が変わるか」をファイルに残す習慣が必要です。そうすれば、レビュアーがConfigMapの行ではなく、ツールが読み取った値を見られます。general節がどう変わるかを確認してください。