大家好!今天,我们将深入探讨 Argo CD 的核心——argocd-cm 配置,它是 Kubernetes 环境中实现 GitOps 最强大的工具。🛠️
如果您想超越简单的安装,增强安全性,检查自定义状态,并高效管理资源,请务必阅读本文!

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) 或是否存在问题?尝试将 Argo CD 徽章添加到您的 GitHub README 或内部仪表板!
- 功能: 允许外部通过图像链接形式获取特定 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.chat.url: "https://slack.com/your-channel"
help.chat.text: "데브옵스 팀에게 문의하기"
💡 总结
今天我们讨论的 argocd-cm 属性是将 Argo CD 从一个简单的部署工具提升为企业级 GitOps 平台的关键要素。
特别是通过 resource.customizations 进行的健康检查,在复杂的微服务架构中,是提高 Argo CD 仪表板可靠性的“神来之笔”。🎯
何不立即将这些应用到您的集群中呢?如果您有任何疑问,请在评论中留言!
发表回复