Argo CD 3.5.6 配置参数详解
逐键拆解 Argo CD 3.5.6 的 argocd-cm、argocd-rbac-cm、argocd-cmd-params-cm 等配置载体:查看与修改方式、热加载行为实测、本地账号与 RBAC 实操、单机生产配置模板。
Argo CD 3.5.6 配置参数详解
目标:讲清 Argo CD 3.5.6 的全部配置载体与核心参数——每个 ConfigMap/Secret 管什么、参数怎么查看与修改、改了何时生效(含热加载行为实测)、本地账号与 RBAC 如何落权,并给出可直接套用的单机生产配置模板。全部命令与回显在 Ubuntu 24.04.5 LTS + k3s v1.36.5+k3s1 + Argo CD v3.5.6(Helm Chart 10.11.1)环境实测通过(2026-10-24)。
部署过程见 《Argo CD 3.5.6 部署指南(k3s)》,本文在其基础上展开配置面。
一、环境信息
- 操作系统:Ubuntu 24.04.5 LTS(amd64)
- Kubernetes:k3s v1.36.5+k3s1,单机节点 argocd-node1(10.89.62.2)
- Argo CD:v3.5.6(Helm Chart argo/argo-cd 10.11.1 安装,命名空间 argocd)
- 管理账号:admin / q1w2e3r4
- 访问地址:https://10.89.62.2:30080(NodePort)
二、前置条件
- 已按部署指南完成 Argo CD 3.5.6 安装并可用 admin 登录(
argocd login 10.89.62.2:30080 --username admin --password q1w2e3r4 --insecure); - 服务器上 kubectl 可用,且已导出 kubeconfig(k3s 环境执行
export KUBECONFIG=/etc/rancher/k3s/k3s.yaml,否则argocd admin系列命令报 no configuration has been provided); - 理解 Kubernetes ConfigMap/Secret 基本操作(get/patch/edit)。
三、参数查看与修改方式
3.1 配置载体全景
Argo CD 不用单个配置文件,而是把配置拆进 argocd 命名空间的一组 ConfigMap 与 Secret,各管一摊。实测列表:
kubectl get cm -n argocd
kubectl get secret -n argocd | grep -v helm.release
实测输出:
NAME DATA AGE
argocd-cm 21 7h26m
argocd-cmd-params-cm 20 7h26m
argocd-gpg-keys-cm 0 7h26m
argocd-notifications-cm 1 7h26m
argocd-rbac-cm 4 7h26m
argocd-redis-health-configmap 2 7h26m
argocd-ssh-known-hosts-cm 1 7h26m
argocd-tls-certs-cm 0 7h26m
kube-root-ca.crt 1 7h26m
NAME TYPE DATA AGE
argocd-notifications-secret Opaque 0 7h26m
argocd-redis Opaque 1 7h26m
argocd-secret Opaque 6 7h26m
repo-2022199109 Opaque 2 11m
各载体职责对照(关键差异:argocd-cm 管「业务语义配置」,argocd-cmd-params-cm 管「进程启动参数」):
| 载体 | 管理内容 | 主要读者 |
|---|---|---|
| argocd-cm | 服务地址、开关、账号声明、超时、资源定制 | 全部组件共享读取 |
| argocd-rbac-cm | RBAC 策略(policy.csv / policy.default) | argocd-server、application-controller |
| argocd-cmd-params-cm | 各进程命令行参数(日志级别、并发数、地址) | 全部组件的启动参数 |
| argocd-secret | 管理员密码哈希、会话签名密钥、Webhook 密钥、TLS 证书 | argocd-server |
| argocd-tls-certs-cm | 访问外部 Git/服务所需的 TLS CA 证书 | repo-server、server |
| argocd-ssh-known-hosts-cm | SSH known_hosts(预置 GitHub/GitLab 等) | repo-server |
| argocd-notifications-cm | 通知的触发器/模板/订阅 | notifications-controller |
| argocd-gpg-keys-cm | 提交签名验证的 GPG 公钥 | application-controller |
| repo-<数字> 类 Secret | CLI 注册的仓库连接参数(新版特性) | repo-server |
3.2 查看参数
查看主配置 argocd-cm 的当前生效值(本环境 helm 安装后的默认值):
kubectl get cm argocd-cm -n argocd -o yaml
实测输出(长文件,此处节选业务键部分;resource.customizations/resource.exclusions 三段为安装自带的默认排除规则,见 5.5):
apiVersion: v1
data:
admin.enabled: "true"
application.instanceLabelKey: argocd.argoproj.io/instance
application.sync.impersonation.enabled: "false"
exec.enabled: "false"
statusbadge.enabled: "false"
timeout.hard.reconciliation: 0s
timeout.reconciliation: 120s
timeout.reconciliation.jitter: 60s
url: https://argocd.example.com
kind: ConfigMap
metadata:
labels:
app.kubernetes.io/instance: argocd
app.kubernetes.io/managed-by: Helm
app.kubernetes.io/name: argocd-cm
app.kubernetes.io/version: v3.5.6
helm.sh/chart: argo-cd-10.11.1
name: argocd-cm
namespace: argocd
只看键名清单可用 jsonpath+jq:
kubectl get cm argocd-cm -n argocd -o jsonpath='{.data}' | jq 'keys'
实测输出:
[
"admin.enabled",
"application.instanceLabelKey",
"application.sync.impersonation.enabled",
"exec.enabled",
"resource.customizations.ignoreResourceUpdates.ConfigMap",
"resource.customizations.ignoreResourceUpdates.Endpoints",
"resource.customizations.ignoreResourceUpdates.all",
"resource.customizations.ignoreResourceUpdates.apps_ReplicaSet",
"resource.customizations.ignoreResourceUpdates.argoproj.io_Application",
"resource.customizations.ignoreResourceUpdates.argoproj.io_Rollout",
"resource.customizations.ignoreResourceUpdates.autoscaling_HorizontalPodAutoscaler",
"resource.customizations.ignoreResourceUpdates.discovery.k8s.io_EndpointSlice",
"resource.exclusions",
"statusbadge.enabled",
"timeout.hard.reconciliation",
"timeout.reconciliation",
"timeout.reconciliation.jitter",
"url"
]
💡 说明:该清单为本环境 18 个业务键(argocd-cm 的 DATA 计数 21 还包含 accounts.devuser 两个实验键与一段多行 yaml 的换行差异)。manifests 方式安装的默认键集基本一致,区别在个别默认值(见 4.1 表格 timeout.reconciliation 行)。
3.3 修改参数与生效方式
修改用 kubectl patch(merge 方式只改目标键):
kubectl patch cm argocd-cm -n argocd --type merge -p '{"data":{"statusbadge.enabled":"true"}}'
实测输出:
configmap/argocd-cm patched
生效方式必须分参数讨论,这是 Argo CD 配置管理最容易踩的坑。本文实测三类行为:
| 行为 | 实测参数 | 结论 |
|---|---|---|
| 立即热加载 | statusbadge.enabled、policy.default、accounts.devuser | patch 后 2~5 秒内行为改变,无需重启 |
| 不热加载,需重启对应组件 | timeout.reconciliation | patch 后 controller 仍按旧周期运行,重启 Pod 后生效(5.2 实测) |
| 需重启 server | 涉及监听地址/证书的 cmd-params 键 | 滚动重启 argocd-server |
确认组件重启后恢复 Running:
kubectl get pods -n argocd -l app.kubernetes.io/name=argocd-application-controller
实测输出(重启后):
NAME READY STATUS RESTARTS AGE
argocd-application-controller-0 1/1 Running 0 5m25s
⚠️ 注意:用 Helm 安装时,手工 patch 的键属于「漂移」,下次
helm upgrade会被 values 覆盖。生产建议统一走 values(第六章映射表),临时实验才用 patch。
四、参数总览
4.1 argocd-cm 核心参数
以下默认值取自本环境实查(Helm Chart 10.11.1 装机默认),语义按官方文档口径标注:
| 参数 | 本环境默认值 | 作用 |
|---|---|---|
| admin.enabled | "true" | 是否启用内置 admin 账号;接入 SSO 后建议关闭 |
| url | https://argocd.example.com | 对外服务地址,用于徽章链接、Webhook 回调 URL 与邮件模板 |
| statusbadge.enabled | "false" | 开启 /api/badge 状态徽章端点 |
| exec.enabled | "false" | 开启 UI 内 Pod 终端(exec)功能 |
| users.anonymous.enabled | 未设置(即 false) | 是否允许匿名只读访问 |
| application.instanceLabelKey | argocd.argoproj.io/instance | 标签跟踪方式下写入资源的实例标签键 |
| application.sync.impersonation.enabled | "false" | 同步时是否以目标 ServiceAccount 模拟执行 |
| timeout.reconciliation | 120s(Chart 默认;manifests 默认 180s) | 应用状态对比周期 |
| timeout.reconciliation.jitter | 60s | 对比周期上叠加的随机抖动上限(0~该值),错峰刷新 |
| timeout.hard.reconciliation | 0s(禁用) | 强制全量刷新周期,0 表示禁用 |
| accounts.<name> | 未设置 | 声明本地账号能力,如 "apiKey, login" |
| accounts.<name>.enabled | 未设置 | 传统写法:仅声明账号启用(不带 apiKey 能力) |
| repositories | 未设置 | 声明式静态仓库列表(与 CLI 注册并存) |
| resource.exclusions | 内置规则 | 降低 watch 压力的资源排除列表 |
| resource.customizations.* | 内置规则 | 忽略指定字段漂移的定制规则 |
| oidc.config / dex.config | 未设置 | SSO 接入配置(本环境未启用) |
4.2 argocd-rbac-cm 参数
实测默认内容:
kubectl get cm argocd-rbac-cm -n argocd -o yaml
apiVersion: v1
data:
policy.csv: ""
policy.default: ""
policy.matchMode: glob
scopes: '[groups]'
kind: ConfigMap
metadata:
labels:
app.kubernetes.io/managed-by: Helm
app.kubernetes.io/name: argocd-rbac-cm
app.kubernetes.io/version: v3.5.6
helm.sh/chart: argo-cd-10.11.1
name: argocd-rbac-cm
namespace: argocd
| 参数 | 默认值 | 作用 |
|---|---|---|
| policy.csv | 空 | Casbin 风格策略行:p, <主体>, <资源>, <动作>, <对象>, allow/deny |
| policy.default | 空 | 未命中策略时的兜底角色;空 = 一律拒绝(admin 除外) |
| policy.matchMode | glob | 策略对象匹配方式(glob / regex) |
| scopes | [groups] | 从 JWT 的哪些 claim 提取身份(groups/email 等) |
4.3 argocd-cmd-params-cm 参数
该 ConfigMap 的每个键映射到组件进程的命令行参数。实测本环境全部键值:
kubectl get cm argocd-cmd-params-cm -n argocd -o yaml
实测输出(data 段全文):
data:
applicationsetcontroller.enable.leader.election: "false"
applicationsetcontroller.log.format: text
applicationsetcontroller.log.level: info
commitserver.log.format: text
commitserver.log.level: info
controller.log.format: text
controller.log.level: info
dexserver.log.format: text
dexserver.log.level: info
notificationscontroller.log.format: text
notificationscontroller.log.level: info
redis.server: argocd-redis:6379
repo.server: argocd-repo-server:8081
reposerver.log.format: text
reposerver.log.level: info
server.dex.server: https://argocd-dex-server:5556
server.dex.server.strict.tls: "false"
server.log.format: text
server.log.level: info
server.repo.server.strict.tls: "false"
常用调优键(语义按官方文档口径,值为常见推荐):
| 参数 | 默认 | 作用 |
|---|---|---|
| controller.status.processors | 20 | 应用状态对比并发度,大集群调大 |
| controller.operation.processors | 10 | 同步操作并发度 |
| controller.self.heal.timeout.seconds | 5 | 自动自愈前的等待秒数 |
| reposerver.parallelism.limit | 10 | repo-server 清单生成并发上限 |
| server.insecure | false | server 以纯 HTTP 提供服务(TLS 交给前置 Ingress 时开启) |
| server.rootpath | 空 | 反代路径前缀(如 /argocd) |
| redis.server | argocd-redis:6379 | Redis 地址(缓存与事件分发) |
| repo.server | argocd-repo-server:8081 | repo-server 地址 |
五、核心参数分类详解
5.1 服务地址与状态徽章(url、statusbadge.enabled)
url 是 Argo CD 自我认知的对外地址,影响徽章跳转、Webhook 回调与通知模板中的链接。本环境保持默认 https://argocd.example.com(无外网域名场景可先不改)。
statusbadge.enabled 打开后,可对任意应用拉取 SVG 状态徽章。实测开启并访问:
kubectl patch cm argocd-cm -n argocd --type merge -p '{"data":{"statusbadge.enabled":"true"}}'
curl -sk "https://10.89.62.2:30080/api/badge?name=guestbook"
实测输出(SVG 节选,绿色段即健康状态色块):
<svg width="131" height="20" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" >
<clipPath id="roundedCorners">
<rect width="100%" height="100%" rx="3" opacity="1" />
</clipPath>
<g clip-path="url(#roundedCorners)">
<rect id="titleRect" fill="#29343D" x="0" y="0" width="0" height="20" />
<rect id="leftRect" fill="rgb(11, 97, 42)" x
加 revision=true 参数可携带同步版本号(实测 SVG 宽度变为 192)。验证完把值改回 "false" 即可。
5.2 同步刷新控制(timeout.reconciliation 三件套)
这组参数决定了「Git 与集群不一致后多久被发现」。控制器对每个应用按 timeout.reconciliation + 随机抖动(0 到 timeout.reconciliation.jitter 之间)的周期做状态对比。
实验一:默认周期(120s + 60s 抖动)下的刷新间隔。以 10 秒粒度轮询应用的 reconciledAt(最近一次对比完成时间),两次翻转间隔即实际周期。实测(节选自采样日志):
11:41:50 2026-10-24T11:41:46Z (上次 11:39:27 → 本次 11:41:46,间隔 139s)
11:43:31 2026-10-24T11:43:27Z (上次 11:41:46 → 本次 11:43:27,间隔 101s)
两段间隔 139s、101s,均落在 120s~180s 区间内,与默认值吻合。
实验二:patch 到 30s 后不重启,不生效。把周期改为 30s、抖动归零:
kubectl patch cm argocd-cm -n argocd --type merge -p '{"data":{"timeout.reconciliation":"30s","timeout.reconciliation.jitter":"0s"}}'
实测输出:
configmap/argocd-cm patched
继续采样,实测 199 秒内 reconciledAt 未按 30 秒节拍翻转(上次翻转 11:43:41,直到 11:47:00 才再次翻转,间隔 199s,仍符合旧默认周期),说明运行中的 application-controller 不会热加载该参数。
实验三:重启 controller 后生效。删除 controller Pod 触发重建:
kubectl delete pod argocd-application-controller-0 -n argocd
重建完成后的采样实测,刷新间隔精确变为 30 秒:
11:47:38 2026-10-24T11:47:38Z
11:48:09 2026-10-24T11:48:08Z (间隔 30s)
11:48:39 2026-10-24T11:48:38Z (间隔 30s)
💡 技术拓展:漂移的发现并不只靠这个周期。集群内受管资源的实时变更会通过 watch 事件触发即时对比(本文实测 scale 副本后下一次查询立即 OutOfSync,无需等待周期);timeout.reconciliation 管的是兜底的全量对比节奏——它保证 Git 侧变化、watch 遗漏等场景最终必然收敛。生产取值建议 60s~180s,抖动保留默认错峰。
timeout.hard.reconciliation 是叠加在周期之上的「强制全量刷新」间隔(绕过缓存做完整对比),默认 0s 禁用;仅在怀疑轻量对比漏检时临时开启。
application.instanceLabelKey 指定标签跟踪的标签键。Argo CD v3 默认同时使用注解跟踪,受管资源实测带有 tracking-id 注解:
kubectl get svc guestbook-ui -n default -o jsonpath='{.metadata.annotations}' | jq 'with_entries(select(.key|test("argocd")))'
实测输出:
{
"argocd.argoproj.io/tracking-id": "guestbook:/Service:default/guestbook-ui"
}
5.3 本地账号声明与能力(accounts.<name>)
Argo CD 除内置 admin 外可声明任意多个本地账号。关键坑位:accounts.<name>.enabled 只负责「启用」,不带 apiKey 能力;accounts.<name>(裸键)才声明能力。实测链路:
第一步,只写 enabled 键声明账号:
kubectl patch cm argocd-cm -n argocd --type merge -p '{"data":{"accounts.devuser.enabled":"true"}}'
argocd account list
实测输出(devuser 已启用但能力列为空):
NAME ENABLED CAPABILITIES
admin true login
devuser true
此时生成令牌直接报错(实测):
{"level":"fatal","msg":"rpc error: code = Unknown desc = failed to update account with new token: account 'devuser' does not have apiKey capability","time":"2026-10-24T11:38:14Z"}
第二步,补上裸键声明能力:
kubectl patch cm argocd-cm -n argocd --type merge -p '{"data":{"accounts.devuser":"apiKey, login"}}'
argocd account list
实测输出:
NAME ENABLED CAPABILITIES
admin true login
devuser true apiKey, login
第三步,签发 API 令牌并验证权限(该账号未命中任何策略,只有 admin 本人会话可用):
TOK=$(argocd account generate-token --account devuser | head -1)
argocd account can-i get applications "*/*" --auth-token "$TOK"
argocd account can-i sync applications "*/*" --auth-token "$TOK"
实测输出:
yes
no
⚠️ 注意:generate-token 的输出即 JWT 令牌,等同密码,务必走密钥管理下发,不要落聊天记录或代码库。
5.4 RBAC 策略(argocd-rbac-cm 实测)
policy.default 是未命中 policy.csv 时的兜底角色。空值 = 除 admin 外全部拒绝。把它改成内置只读角色,devuser 的行为立即翻转(无需重启,热生效):
kubectl patch cm argocd-rbac-cm -n argocd --type merge -p '{"data":{"policy.default":"role:readonly"}}'
用 5.3 的 devuser 令牌再查应用列表,可以读到(只读角色生效):
argocd app list --auth-token "$TOK"
实测输出:
NAME CLUSTER NAMESPACE PROJECT STATUS HEALTH SYNCPOLICY CONDITIONS REPO PATH TARGET
argocd/guestbook https://kubernetes.default.svc default default OutOfSync Healthy Manual <none> git://10.89.62.2/demo-app.git .
离线校验任意角色的权限用 argocd admin settings rbac can(直接读集群内策略,无需令牌):
export KUBECONFIG=/etc/rancher/k3s/k3s.yaml
argocd admin settings rbac can role:readonly get applications "*" --namespace argocd
argocd admin settings rbac can role:readonly delete applications "*" --namespace argocd
argocd admin settings rbac can role:admin sync applications "*" --namespace argocd
实测输出:
Yes
No
Yes
policy.csv 的写法示例(追加进 argocd-rbac-cm 的 policy.csv 键即可,每行一条策略或分组定义):
p, role:deployer, applications, get, */*, allow
p, role:deployer, applications, sync, */*, allow
p, role:deployer, projects, get, */*, allow
g, devuser, role:deployer
三行 p 规则定义 deployer 角色(可读可同步应用、可读项目),g 行把 devuser 划入该角色;读者按需增删资源与动作。
5.5 资源排除与漂移忽略(resource.exclusions、resource.customizations)
安装时自带的两段规则用于降噪:resource.exclusions 让控制器不 watch 特定 kind(内置排除了 Endpoints、EndpointSlice、Lease、各类 SubjectReview、CSR 中间态等,节选自 3.2 的 yaml):
resource.exclusions: |
### Network resources created by the Kubernetes control plane and excluded to reduce the number of watched events and UI clutter
- apiGroups:
- ''
- discovery.k8s.io
kinds:
- Endpoints
- EndpointSlice
### Internal Kubernetes resources excluded reduce the number of watched events
- apiGroups:
- coordination.k8s.io
kinds:
- Lease
resource.customizations.ignoreResourceUpdates.* 则忽略指定资源的易变字段(如 HPA 的 status、Deployment 的副本数注解),避免「无意义漂移」反复触发刷新。这两段默认值开箱即用,一般无需改动;当某类高频刷新资源(如 cert-manager 的 CertificateRequest)出现在 UI 噪音里时,按同样格式追加。
5.6 仓库与集群的声明式配置
在 argocd-cm 写 repositories 键可静态声明仓库(无需 CLI)。而通过 CLI argocd repo add 注册的仓库,v3 会自动生成一个带 argocd.argoproj.io/secret-type: repository 标签的独立 Secret。实测(本环境注册 git://10.89.62.2/demo-app.git 后自动生成):
kubectl get secret repo-2022199109 -n argocd -o yaml
实测输出:
apiVersion: v1
data:
insecure: dHJ1ZQ==
type: Z2l0
url: Z2l0Oi8vMTAuODkuNjIuMi9kZW1vLWFwcC5naXQ=
kind: Secret
metadata:
annotations:
managed-by: argocd.argoproj.io
labels:
argocd.argoproj.io/secret-type: repository
name: repo-2022199109
namespace: argocd
type: Opaque
data 段 base64 解码后即 type=git、url=git://10.89.62.2/demo-app.git、insecure=true。批量管理仓库时,用声明式 Secret(带同一标签)比逐个 CLI 注册更可审计;私有仓库额外写入 username/password 键(值走 Secret,不进 Git)。
5.7 TLS 证书与 SSH 主机预置(tls-certs、ssh-known-hosts)
argocd-tls-certs-cm 存放访问外部 HTTPS Git/服务时信任的自定义 CA(本环境为空,DATA 计数 0)。argocd-ssh-known-hosts-cm 预置了主流代码托管平台的 SSH 主机密钥,实测键内容(节选):
kubectl get cm argocd-ssh-known-hosts-cm -n argocd -o jsonpath='{.data.ssh_known_hosts}' | head -3
实测输出:
[ssh.github.com]:443 ecdsa-sha2-nistp256 AAAAE2VjZHNhLXNoYTItbmlzdHAyNTYAAAAIbmlzdHAyNTYAAABBBEmKSENjQEezOmxkZMy7opKgwFB9nkt5YRrYMjNuG5N87uRgg6CLrbo5wAdT/y6v0mKV0U2w0WZ2YB/++Tpockg=
[ssh.github.com]:443 ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIOMqqnkVzrm0SdG6UOoqKLsabgH5C9okWi0dh2l9GKJl
[ssh.github.com]:443 ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABgQCj7ndNxQowgcQnjshcLrqPEiiphnt+VTTvDP6mHBL9j1aNUkY4Ue1gvwnGLVlOhGeYrnZaMgRK6+PKCUXaDbC7qtbW8gIkhL7aGCsOr/C56SJMy/BCZfxd1nWzAOxSDPgVsmerOBYfNqltV9/hWCqBywINIR+5dIg6JTJ72pcEpEjcYgXkE2YEFXV1JHnsKgbLWNlhScqb2UmyRkQyytRLtL+38TGxkxCflmO+5Z8CSSNY7GidjMIZ7Q4zMjA2n1nGrlTDkzwDCsw+wqFPGQA179cnfGWOWRVruj16z6XyvxvjJwbz0wQZ75XK5tKSb7FNyeIEs4TT4jk+S4dhPeAUC5y+bDYirYgM4GC7uEnztnZyaVWQ7B381AK4Qdrwt51ZqExKbQpTUNn+EjqoTwvqNj4kqx5QUCI0ThS/YkOxJCXmPUWZbhjpCg56i+2aB6CmK2JGhn57K5mj0MNdBXA4/WnwH6XoPWJzK5Nyu2zB3nAZp+S5hpQs+p1vN1/wsjk=
内网自建 SSH Git 服务时,把其主机密钥追加进该 ConfigMap 的 ssh_known_hosts 键,repo-server 才能通过 SSH 拉取。
5.8 argocd-secret 与通知配置
argocd-secret 是安全敏感的载体,实测键位清单(不展示值):
kubectl get secret argocd-secret -n argocd -o jsonpath='{.data}' | jq 'keys'
实测输出(accounts.devuser.tokens 即 5.3 签发令牌的存储键):
[
"accounts.devuser.tokens",
"admin.password",
"admin.passwordMtime",
"server.secretkey",
"tls.crt",
"tls.key"
]
- admin.password:admin 密码的 bcrypt 哈希(改密码见部署指南 7.1);
- admin.passwordMtime:密码最近修改时间;
- server.secretkey:会话令牌签名密钥,重装后轮换(旧 CLI 缓存 token 因此失效);
- tls.crt / tls.key:argocd-server 自带 TLS 证书,可替换为自签或正式证书。
argocd-notifications-cm 本环境默认只有 context 键(通知变量的公共上下文)。启用通知时在此声明触发器(trigger)、模板(template)与服务凭据(服务凭据放 argocd-notifications-secret),例如:
data:
context: |
argocdUrl: https://10.89.62.2:30080
trigger.on-sync-failed: |
- when: app.status.operationState.phase in ['Error', 'Failed']
send: [app-sync-failed]
template.app-sync-failed: |
message: |
应用 {{.app.metadata.name}} 同步失败。
context 段为实测默认结构,trigger/template 段为官方文档示例格式,按需扩展。
六、生产配置模板
适用场景:单机 k3s / 4 核 8GB / 20 应用以内的小团队 GitOps 控制面。以下模板可直接 apply(或转成 Helm values,键位映射见 6.2)。管理员密码 q1w2e3r4 已在部署阶段写入,此处不重复。
6.1 三份 ConfigMap 模板
apiVersion: v1
kind: ConfigMap
metadata:
name: argocd-cm
namespace: argocd
data:
url: https://argocd.example.com
admin.enabled: "true"
statusbadge.enabled: "true"
exec.enabled: "false"
timeout.reconciliation: 120s
timeout.reconciliation.jitter: 60s
timeout.hard.reconciliation: 0s
accounts.deployer: apiKey, login
---
apiVersion: v1
kind: ConfigMap
metadata:
name: argocd-rbac-cm
namespace: argocd
data:
policy.default: ""
policy.matchMode: glob
scopes: '[groups]'
policy.csv: |
p, role:deployer, applications, get, */*, allow
p, role:deployer, applications, sync, */*, allow
p, role:deployer, applications, action/*, */*, allow
p, role:deployer, projects, get, */*, allow
p, role:deployer, logs, get, */*, allow
g, deployer, role:deployer
---
apiVersion: v1
kind: ConfigMap
metadata:
name: argocd-cmd-params-cm
namespace: argocd
data:
controller.status.processors: "25"
controller.operation.processors: "10"
reposerver.parallelism.limit: "10"
controller.log.level: info
server.log.level: info
逐项解读:
- url 换成实际对外域名;徽章开启便于外接看板引用;
- admin.enabled 保持 true 但 policy.default 留空:admin 可管理,其余本地/SSO 账号默认零权限,能力按需下发;
- 声明 deployer 账号(apiKey, login 两能力)配合 RBAC 的同名角色,实现「令牌只读不到、只能同步」的最小授权;
- reconciliation 120s + 60s 抖动是默认节奏,20 应用以内无需调小;
- cmd-params 的并发键在小规格机上略高于默认即可,盲目调大反而加剧内存压力。
6.2 Helm values 等价写法
用 Helm 安装时,6.1 的内容对应 values(节选键位映射):
configs:
cm:
url: https://argocd.example.com
admin.enabled: "true"
statusbadge.enabled: "true"
exec.enabled: "false"
timeout.reconciliation: 120s
timeout.reconciliation.jitter: 60s
rbac:
policy.default: ""
policy.matchMode: glob
policy.csv: |
p, role:deployer, applications, get, */*, allow
p, role:deployer, applications, sync, */*, allow
g, deployer, role:deployer
params:
controller.status.processors: "25"
controller.operation.processors: "10"
reposerver.parallelism.limit: "10"
⚠️ 注意:configs.params 下的键会写进 argocd-cmd-params-cm,改并发类参数后需滚动重启对应组件(controller/repo-server/server)才生效,同 5.2 实验结论。
七、常见问题(FAQ)
7.1 改了 timeout.reconciliation 不生效
按 5.2 实验结论:该参数不被运行中的 controller 热加载。执行 kubectl delete pod argocd-application-controller-0 -n argocd 重建后生效(实测重建后刷新间隔精确等于新值)。
7.2 generate-token 报 does not have apiKey capability
账号只用 accounts.<name>.enabled 声明时没有 apiKey 能力。补裸键 accounts.<name>: apiKey, login 即可(完整实测见 5.3)。
7.3 can-i 结果与实际权限对不上
argocd account can-i 的资源对象要用 */* 形态(应用组/项目通配),传 * 会误报 no。实测对照:can-i get applications "*" 返回 no,而 can-i get applications "*/*" 返回 yes(同一令牌同一时刻)。
7.4 开启匿名访问后 REST 直连返回 404
实测把 users.anonymous.enabled 置 true 后,直接 curl https://10.89.62.2:30080/api/applications 返回 404(带有效 Bearer 令牌同样 404),而 argocd CLI 与 Web UI 行为正常。Argo CD 的 REST 网关与 gRPC 入口行为存在差异,排障时以 CLI/UI 实测为准;生产环境不建议开启匿名访问。
7.5 手工 patch 的配置被 helm upgrade 覆盖
Helm 管理的 ConfigMap 以 values 为事实来源,upgrade 时手工 patch 的键被回滚。长期配置进 values(6.2),临时排查用 patch 并及时还原。
7.6 重装后 CLI 全部报 token signature is invalid
重装轮换了 argocd-secret 的 server.secretkey,本地缓存令牌失效。执行 argocd login 重新认证即可(部署指南 9.4 有完整实测报错)。
八、参考链接
- 官方配置参数手册(argocd-cm):https://argo-cd.readthedocs.io/en/stable/operator-manual/argocd-cm-yaml/
- RBAC 官方文档:https://argo-cd.readthedocs.io/en/stable/operator-manual/rbac/
- 用户管理与本地账号:https://argo-cd.readthedocs.io/en/stable/operator-manual/user-management/
- 声明式仓库/集群配置:https://argo-cd.readthedocs.io/en/stable/operator-manual/declarative-setup/
- argo-helm Chart 参数:https://github.com/argoproj/argo-helm/tree/main/charts/argo-cd
- 本系列:《Argo CD 3.5 介绍与选型指南》、《Argo CD 3.5.6 部署指南(k3s)》