ArgoCD 扩展:实现 Pod 离群

线上异常 Pod 既要留现场,又得立刻摘流量,还要在 ArgoCD 资源拓扑图里一眼被看到。本文会介绍如何让 Pod 秒“离群”,既摘流量与同步循环,又在拓扑图高亮标注。

1. 背景

排查线上问题时,我们既想保留现场,又要快速恢复服务,不想让异常的 Pod 被 ArgoCD 自动回收。只需贴上两行标签和注解,就能让异常 Pod 立刻从 Service Endpoints 下线并被 ArgoCD 标为“离群”,现场保留、流量无损,排障后删除即可秒级复原。

2. 原理

把 Pod 的 Service selector 标签(如 app=xxx)摘掉,再给它打上 ArgoCD 「忽略差异」和「禁止回收」的注解,ArgoCD 就会把它标成“离群 Pod”而不参与同步。

步骤如下:

步骤目的命令
1下线流量kubectl label pod app-xxx-abcde app-
2脱离控制器kubectl label pod app-xxx-abcde pod-template-hash-
3忽略差异kubectl annotate pod app-xxx-abcde argocd.argoproj.io/compare-options=IgnoreExtraneous
4禁止回收kubectl annotate pod app-xxx-abcde argocd.argoproj.io/sync-options=Prune=false
5不影响拓扑图展示kubectl label pod app-xxx-abcde argocd.argoproj.io/instance=your-app-name

3. 实现效果

离群操作前

离群操作后

前端实现参考:AntV G6 实现 k8s 资源拓扑图展示

4. 总结

优势说明
零配置修改无需改 Git 仓库,不触发同步
秒级生效纯标签/注解操作,1 秒完
风险可控离群 Pod 不参与流量,随时删
可视化ArgoCD UI 高亮提示,一眼识别

下次线上再出 Bug,不妨先“离群”再排查!

5. 参考资料