Argo CD 如何开启 Orphaned Resources 监控并定位未纳管资源
【免费下载链接】argo-cdDeclarative Continuous Deployment for Kubernetes项目地址: https://gitcode.com/GitHub_Trending/ar/argo-cd
Namespace 里经常出现不是由 Argo CD Application 创建的资源:其他 operator 自动生成的 Secret、人工调试时手工 kubectl 部署的 ConfigMap、被删除 Application 后遗留的 Deployment。这些不属于任何 Application 的资源在 Argo CD 中被称为 orphaned resource(孤儿资源)。Argo CD 的 Orphaned Resources Monitoring 功能可以在项目(Project)级别开启对目标 namespace 的监控,让 Application 产生OrphanedResourceWarning条件,并支持在 UI 中查看、检查甚至移除这些资源。
本文章对应场景是安全与数据治理:确认你负责的 namespace 中没有游离在 Argo CD 管控之外的资源。操作路径为:在 AppProject 上开启监控 → 用 CLI 或 UI 验证开关状态 → 在应用详情页用 "Show Orphaned" 过滤器定位具体资源 → 通过 ignore 规则排除已知误报。
前提条件:
- 已有一个可访问的 Argo CD 实例,且你的项目部署的 namespace 范围清晰(well-scoped)。官方文档明确警告:如果项目监控的 namespace 包含大量不受 Argo CD 管理的资源(例如
kube-system),开启该功能会显著影响 Argo CD 实例性能,因此只建议在 namespace 边界明确的项目上开启。 - 目标 Application 所属的 AppProject 可由你编辑。
在 AppProject 中开启监控
Orphaned Resources 监控是在 Project 设置中启用的,对应 AppProject 自定义资源spec下的orphanedResources字段。将 Argo CD 安装所在 namespace 下的目标 AppProject 清单编辑为如下形式(...表示该清单中你已有的其他字段,保持不变):
kind: AppProject metadata: ... spec: ... orphanedResources: warn: truewarn: true表示开启监控并对存在孤儿资源的 Application 产生警告。文档建议在刚开启功能时先关闭警告、只观察:
spec: orphanedResources: warn: false # Disable warningwarn: false时不会产生 Application 警告,但应用用户仍然可以在 UI 中查看孤儿资源。确认监控结果符合预期后,再把warn改为true。
如果你更习惯用 UI 操作,FAQ 给出了对应的路径:
- 点击侧边栏的Settings,进入Projects。
- 选择目标 project,向下滚动到RESOURCE MONITORING部分。
- 点击Edit并开启监控功能;勾选Enable application warning conditions?以启用警告(对应
warn: true)。 - 点击Save。
验证监控是否已生效
在 CLI 中执行:
argocd proj get <PROJECT>输出中包含Orphaned Resources:一行。以下是文档示例中的实际输出(该项目未开启该功能):
$ argocd proj get gpg Name: gpg Description: GnuPG verification Destinations: *,* Repositories: * Allowed Cluster Resources: */* Denied Namespaced Resources: <none> Signature keys: 4AEE18F83AFDEB23, 07E34825A909B250 Orphaned Resources: disabled功能关闭时该行显示disabled。开启后,目标 namespace 中只要存在孤儿资源,该 project 下的对应 Application 就会获得警告。
在 UI 中验证:回到Applications页面,选择该 project 下的一个应用。如果存在孤儿资源且已启用警告,Sync Panel的APP CONDITIONS区域会出现 orphaned resources 警告。
在应用详情页定位孤儿资源
打开存在警告的 Application 详情页,在资源列表上方HEALTH STATUS过滤器旁边点击Show Orphaned过滤器(见 Orphaned Resources Monitoring 中的界面截图,即本文开头的配图)。开启该过滤后,列表中显示的就是目标 namespace 中不属于任何 Application 的孤儿资源,可以在 UI 中检查或移除它们。
处理误报:默认例外与 ignore 规则
集群里并非所有资源都由 Argo CD 管理。其他 operator 会自动创建资源(例如 cert-manager 创建 Secret),这些资源会被判定为孤儿。以下资源永远不会被视为孤儿:
- 项目中被 deny 的 namespaced 资源(通常由集群管理员管理,namespace 用户不应修改);
- 名为
default的ServiceAccount(及自动生成的ServiceAccountToken); defaultnamespace 中名为kubernetes的Service;- 所有 namespace 中名为
kube-root-ca.crt的ConfigMap。
如果仍有已知安全、可以豁免的资源,可以在 AppProject 中配置 ignore 规则,每条规则定义 Group、Kind 和 Name:
spec: orphanedResources: ignore: - kind: ConfigMap name: orphaned-but-ignored-configmapname支持 glob 模式,例如豁免一批由同一 issuer 管理的 TLS Secret:
spec: orphanedResources: ignore: - kind: Secret name: '*.example.com'注意 ignore 规则按 Kind 和名称模式匹配,配置前先在 Show Orphaned 列表中确认这些资源确实不属于 Argo CD 管控范围,避免把真正的泄漏资源一并豁免。
通过 Prometheus 指标追踪孤儿资源
Metrics 文档提供了两类与孤儿资源相关的指标:
argocd_app_orphaned_resources_count(gauge):每个 Application 的孤儿资源数量,可直接用于"跨所有已部署应用排查孤儿资源"这类场景。- 将 Application condition 暴露为指标。该功能默认关闭,需要设置
argocd-cmd-params-cmConfigMap 中的controller.metrics.application.conditions键(逗号分隔列表):
controller.metrics.application.conditions: "OrphanedResourceWarning,ExcludedResourceWarning"也可以不修改 ConfigMap,直接在 application-controller 容器上追加--metrics-application-conditions OrphanedResourceWarning启动参数(同一 condition 可重复传参)。文档指出这个特性默认禁用,因为它包含的公司特定 condition 各不相同,按需开启即可。
限制与注意
- 该功能按项目开启,监控范围取决于项目声明的 destinations;不要在覆盖
kube-system这类大杂烩 namespace 的项目上开启,文档明确提示性能影响。 - 监控覆盖的是"不属于任何 Argo CD Application 的顶层 namespaced 资源";上一节列出的默认例外和 ignore 规则命中的资源不会被报告,配置 ignore 时不要扩大化。
warn: false状态下只有 UI 可查,没有 Application 警告,依赖OrphanedResourceWarningcondition 做告警集成时必须开启warn: true。
开启后建议的核对节奏是:先用warn: false观察一个周期,确认 Show Orphaned 列表里没有意外资源、ignore 规则覆盖所有已知豁免项,再切到warn: true让告警链路(APP CONDITIONS / Prometheus 指标)接管后续监控。
【免费下载链接】argo-cdDeclarative Continuous Deployment for Kubernetes项目地址: https://gitcode.com/GitHub_Trending/ar/argo-cd
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考