线上异常 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,不妨先“离群”再排查!