皆さん、こんにちは!本日は、Kubernetes環境でGitOpsを実現する最も強力なツールであるArgo CDの心臓部とも言えるargocd-cm設定について深く掘り下げていきます。🛠️
単なるインストールを超えて、セキュリティを強化し、カスタムステータスをチェックし、効率的にリソースを管理したい方は、ぜひこの記事を最後までお読みください!

1. 🛡️ GPG署名検証の有効化 (gpg.enabled)
セキュリティはいくら強調しても足りません。Gitリポジトリにコミットされた内容が本当に信頼できるユーザーによって作成されたものかを確認したい場合、GPG(GNU Privacy Guard)署名検証を使用します。
- 役割: Argo CDがGitからマニフェストを取得する際、コミットのGPG署名を確認するようにします。
- 設定理由: 許可されていないユーザーがコードを改ざんしてプッシュしても、署名が無効であればArgo CDが同期を拒否し、クラスターを保護します。
💻 設定コード例
YAML
apiVersion: v1
kind: ConfigMap
metadata:
name: argocd-cm
namespace: argocd
data:
# GPG署名検証の有効化 🔐
gpg.enabled: "true"
💡 参考: この設定を有効にした後、Argo CDに公開鍵を登録する必要があります。argocd gpg addコマンドを使用して、信頼できる鍵を追加してください!
2. 🏥 カスタムリソースの状態チェック (resource.customizations.health)
Argo CDは、DeploymentやServiceのような標準リソースの状態(Healthy、Progressingなど)を基本的に判断できます。しかし、CRD(Custom Resource Definition)や特定のオープンソースリソースの場合、Argo CDが「これは正常なのか?」を判断できず、無限にProgressing状態に留まることがあります。
この時に使用するのが、Luaスクリプトを利用したカスタムヘルスチェックです。
💻 設定コード例 (例: SealedSecretsリソース)
YAML
apiVersion: v1
kind: ConfigMap
metadata:
name: argocd-cm
namespace: argocd
data:
# リソースごとのカスタムヘルスチェックロジックを定義 🩺
resource.customizations.health.bitnami.com_SealedSecret: |
hs = {}
-- 리소스의 status 필드가 있는지 확인
if obj.status ~= nil then
-- 조건별 상태 로직 작성 (Lua 문법)
if obj.status.observedGeneration < obj.metadata.generation then
hs.status = "Progressing"
hs.message = "대기 중: 새로운 사양 반영 중..."
return hs
end
end
hs.status = "Healthy"
hs.message = "정상: 시크릿이 성공적으로 복호화되었습니다."
return hs
- 重要: resource.customizations.health._ の形式を守る必要があります。
- ヒント: 複雑な演算よりも、リソースのstatusフィールド値を読み取って簡単に判断する方が、パフォーマンス上有利です。
3. 🎖️ ステータスバッジの有効化 (statusbadge.enabled)
チームメンバーに、現在運用中のサービスが正常に同期(Synced)されているか、あるいは問題があるかを視覚的に素早く示したいですか?GitHubのREADMEや社内ダッシュボードにArgo CDバッジを付けてみましょう!
- 機能: 外部から特定のApplicationの同期状態を画像リンク形式で取得できるようにします。
💻 設定コード例
YAML
apiVersion: v1
kind: ConfigMap
metadata:
name: argocd-cm
namespace: argocd
data:
# ステータスバッジ機能を有効化 🎨
statusbadge.enabled: "true"
有効化後、以下のURL形式でバッジを使用できます: https:///api/badge?name=
4. 🏗️ Kustomizeバイナリのバージョン管理 (kustomize.binary.path)
多くのチームがマニフェスト管理のためにKustomizeを使用しています。Argo CDは内蔵のKustomizeバージョンを使用しますが、特定のバージョンの機能が必要な場合や、セキュリティパッチが適用された最新バージョンを別途指定する必要がある場合があります。
💻 設定コード例
まず、Argo CD Repo Serverコンテナに、目的のバージョンのバイナリが含まれるボリュームをマウントするか、カスタムイメージをビルドする必要があります。その後、argocd-cmでパスを指定します。
YAML
apiVersion: v1
kind: ConfigMap
metadata:
name: argocd-cm
namespace: argocd
data:
# 特定のKustomizeバージョンパスを指定 🛠️
#(事前に該当パスにバイナリが配置されている必要があります)
kustomize.path.v4.5.7: "/usr/local/bin/kustomize-4-5-7"
# または、buildオプションを通じてカスタムフラグを追加可能
kustomize.buildOptions: "--load-restrictor LoadRestrictionsNone"
ちょっと待って!以前の質問で言及されたように、マルチバージョンをサポートしたい場合は、kustomize.path.vX.X.X形式を使用して、開発環境ごとに柔軟に対応できます。
📝 全体設定の要約 (Full YAML)
上記で説明したすべての内容をまとめたargocd-cmファイルの例です。コメントを注意深く読んでください!
YAML
apiVersion: v1
kind: ConfigMap
metadata:
name: argocd-cm
namespace: argocd
labels:
app.kubernetes.io/part-of: argocd
data:
# 1. セキュリティ設定: GPG署名確認
gpg.enabled: "true"
# 2. 可視性: ステータスバッジの表示
statusbadge.enabled: "true"
# 3. Kustomize: 特定バージョンの使用設定
# 必要に応じて複数のバージョンを明示できます。
kustomize.path.v5.0.0: "/custom-bin/kustomize"
# 4. 状態管理: カスタムリソース(例: Argo Rollouts)のヘルスチェック
# Argo CDが標準リソースではないものの成功可否を判断するのを助けます。
resource.customizations.health.argoproj.io_Rollout: |
hs = {}
if obj.status ~= nil then
if obj.status.phase == "Paused" then
hs.status = "Suspended"
hs.message = "배포가 일시 중지되었습니다 (Canary/BlueGreen)"
return hs
end
end
hs.status = "Healthy"
return hs
# 5. その他の便利な設定 (過去の議論を含む)
# UI上でHelpメニューをカスタマイズする際に使用
help.chat.url: "https://slack.com/your-channel"
help.chat.text: "데브옵스 팀에게 문의하기"
💡 終わりに
本日取り上げたargocd-cmのプロパティは、Argo CDを単なるデプロイツールからエンタープライズ級のGitOpsプラットフォームへと格上げする必須要素です。
特にresource.customizationsを通じたヘルスチェックは、複雑なマイクロサービスアーキテクチャにおいてArgo CDのダッシュボードの信頼性を高める「神の一手」と言えるでしょう。🎯
皆さんのクラスターにも今すぐ適用してみてはいかがでしょうか?ご不明な点があれば、コメントでお知らせください!
コメントを残す