2、Argo CD 核心概念:Application、Project、Sync 策略、健康检查与自动修复机制
在深入资源调优之前,必须牢固掌握 Argo CD 的四个核心概念。它们是理解 Argo CD 如何管理应用、隔离环境、同步状态以及自愈集群的基石。本章将逐一拆解这些概念,并揭示它们在滚动升级场景中的关键作用。
2.1 Application:声明式应用的原子单元
Application 是 Argo CD 中管理的最小部署单元,它定义了一个应用实例的完整生命周期。一个 Application 资源通过 YAML 清单描述“从哪里拉取”、“部署到什么集群/命名空间”以及“如何同步”。
核心字段解析:
- source:指定 Git 仓库路径、目标修订版本(分支/Tag/Commit)以及 Helm/Kustomize 参数。
- destination:目标集群(server URL)和命名空间。
- syncPolicy:控制同步行为,包括自动同步、自动修剪(Prune)以及自愈(Self-Heal)。
apiVersion: argoproj.io/v1alpha1
kind: Application
metadata:
name: my-app
namespace: argocd
spec:
project: default
source:
repoURL: 'https://github.com/example/my-app.git'
targetRevision: HEAD
path: manifests
destination:
server: 'https://kubernetes.default.svc'
namespace: production
syncPolicy:
automated:
prune: true
selfHeal: true
syncOptions:
- CreateNamespace=true
2.2 Project:多租户隔离与安全边界
Project 是 Argo CD 中用于逻辑隔离和权限控制的顶层资源。它定义了哪些 Application 可以访问哪些目标集群、命名空间以及 Git 仓库。在滚动升级资源调优中,Project 用于隔离不同环境(如 staging、production)的调优参数,防止误操作。
| Project 属性 | 作用 | 调优场景示例 |
|---|---|---|
| sourceRepos | 允许引用的 Git 仓库白名单 | 只允许生产环境使用经过审批的稳定仓库 |
| destinations | 允许部署的目标集群和命名空间 | 限制调优实验只能在 staging 命名空间进行 |
| clusterResourceWhitelist | 允许创建的集群级别资源 | 禁止调优期间创建 ClusterRole 等敏感资源 |
| roles | RBAC 角色绑定,控制用户/组的操作权限 | 只允许 SRE 团队修改 syncPolicy 中的自愈参数 |
2.3 Sync 策略:从 Git 到集群的同步机制
Sync 策略决定了 Argo CD 如何将 Git 仓库中的期望状态应用到目标集群。理解不同策略对滚动升级资源消耗的影响,是调优的关键。
调优视角: 在滚动升级期间,自动同步 + 自愈组合可能导致频繁的 Pod 重建。如果资源限制设置不当,会触发级联失败。建议在调优初期使用手动同步,待资源参数稳定后再开启自动同步。
2.4 健康检查:应用状态的多维度评估
Argo CD 的健康检查机制用于判断 Application 是否处于“健康”状态。它内置了针对常见 Kubernetes 资源(Deployment、StatefulSet、Service 等)的健康检查逻辑,并支持自定义健康检查。
滚动升级陷阱: 默认健康检查只检查 Deployment 的
AvailableReplicas 是否达到期望值。在滚动升级过程中,如果新的 ReplicaSet 尚未就绪,但旧的 ReplicaSet 已被缩容,Argo CD 可能误判应用为“健康”,导致后续升级步骤提前执行。必须结合 maxSurge 和 maxUnavailable 参数进行综合判断。
| 资源类型 | 健康检查逻辑 | 滚动升级影响 |
|---|---|---|
| Deployment | 检查 status.availableReplicas 是否等于 spec.replicas |
可能忽略正在进行的滚动升级中间状态 |
| StatefulSet | 检查所有 Pod 是否处于 Ready 状态且分区更新完成 | 分区滚动升级时,健康检查会等待每个分区就绪 |
| Service | 检查 Endpoints 是否不为空 | 滚动升级期间,旧 Pod 被移除后可能短暂不健康 |
| 自定义资源 (CRD) | 通过 Lua 脚本或 Status Hook 自定义 | 可编写脚本检查应用层就绪状态,避免过早切换流量 |
2.5 自动修复机制:集群状态与 Git 的持续对齐
自动修复(Self-Heal)是 Argo CD 的核心自愈能力。当集群中的实际状态与 Git 中定义的期望状态发生偏离时(例如有人手动修改了 Deployment 的副本数),Argo CD 会自动将集群状态回滚到 Git 中的版本。
调优工程中的自动修复策略:
- 开启自愈:在资源调优参数稳定后,必须开启自愈,防止运维人员临时修改资源限制导致调优基线被破坏。
- 配合 Prune:开启
prune: true确保 Git 中删除的资源也会在集群中被删除,避免残留资源干扰调优结果。 - 避免自愈风暴:在滚动升级过程中,如果资源限制设置过紧导致 Pod 反复 CrashLoopBackOff,自愈机制会不断尝试重建,形成“自愈风暴”。此时应暂时关闭自愈,调整资源参数后再开启。