argocd, app (especially CiliumIdentity) is constantly marked as Out-Of-Sync

核心问题是:Cilium 自动创建的 CiliumIdentity 资源被 ArgoCD 持续标记为Out-Of-Sync(不同步) ------这是 ArgoCD 与 Cilium 集成的典型问题,根源是 CiliumIdentity 属于 Cilium 动态生成的"运行时资源",但 ArgoCD 会把它纳入资源跟踪范围,导致频繁触发不同步告警。

下面我会拆解问题原因、给出彻底解决的配置方案,以及生产环境的优化建议,确保 ArgoCD 不再监控这类动态资源。


一、问题根源分析

1. CiliumIdentity 的特性

CiliumIdentity 是 Cilium 为集群内 Pod/节点自动分配的"网络身份标识",核心特点:

  • 动态生成:Cilium 会根据 Pod 启停、标签变更自动创建/删除/更新该资源;
  • 非声明式:该资源不由 YAML 清单管理,完全由 Cilium 运维,属于"运行时状态";
  • 高频变更 :集群内 Pod 变动时,CiliumIdentity 会实时更新,无法与 Git 中的配置保持一致。

2. ArgoCD 标记 Out-Of-Sync 的原因

ArgoCD 会监控其管理的 Application所有资源 (包括 Cilium 动态生成的 CiliumIdentity),并对比 Git 仓库中的配置:

  • Git 中没有 CiliumIdentity 的清单(也不应该有);
  • 集群中存在该资源,且频繁变更;
  • ArgoCD 判定"集群状态 ≠ Git 状态",因此持续标记为 Out-Of-Sync。

二、彻底解决:配置 ArgoCD 排除 CiliumIdentity

核心思路是让 ArgoCD 完全忽略 CiliumIdentity 资源,不再跟踪其状态,从根源消除 Out-Of-Sync 告警。

方案1:全局排除(推荐,所有 Application 生效)

修改 ArgoCD 的 argocd-cm ConfigMap(即你之前配置中的 cm.resource.exclusions),补充完整的排除规则(确保覆盖所有场景):

yaml 复制代码
cm:
  resource.exclusions: |
    - apiGroups:
        - cilium.io
      kinds:
        - CiliumIdentity
        # 可选:同时排除其他 Cilium 动态资源(避免后续同类问题)
        - CiliumEndpoint
        - CiliumNetworkPolicyNodeStatus
        - CiliumClusterwideNetworkPolicy
      clusters:
        - "*"  # 所有集群生效
  # 保留你原有其他配置(如 url 等)
  url: https://argocd.dev5.dhn122.k8s.fnbbn-dev.dyn.nesc.nokia.net
生效步骤:
  1. 将上述配置更新到 Git 仓库中 ArgoCD 自管理的 values.yaml

  2. 触发 ArgoCD 同步自身配置:

    bash 复制代码
    argocd app sync argocd
  3. 验证排除规则是否生效:

    bash 复制代码
    # 查看 argocd-cm 中的排除规则
    kubectl get cm argocd-cm -n argocd -o yaml | grep -A 10 "resource.exclusions"

方案2:单个 Application 排除(仅特定应用生效)

若不想全局排除,可在包含 Cilium 资源的 Application 中单独配置排除规则:

yaml 复制代码
apiVersion: argoproj.io/v1alpha1
kind: Application
metadata:
  name: cilium
  namespace: argocd
spec:
  # 其他配置(source/destination 等)不变
  syncOptions:
    # 排除 CiliumIdentity 资源
    - "ResourceExclusions=cilium.io/CiliumIdentity"
    # 可选:排除多个 Cilium 动态资源
    - "ResourceExclusions=cilium.io/CiliumEndpoint"

关键注意事项

  1. 排除规则的格式

    • apiGroups 必须写 cilium.io(不能错);
    • kinds 必须写资源的单数形式CiliumIdentity,而非 CiliumIdentities);
    • clusters: "*" 确保所有集群都生效(多集群场景必加)。
  2. 生效延迟 :配置生效后,ArgoCD 会在下次同步(默认 3 分钟)后停止跟踪该资源,若需立即生效,可手动触发 Application 同步:

    bash 复制代码
    argocd app sync <your-application-name>

三、额外优化:避免其他 Cilium 资源触发 Out-Of-Sync

除了 CiliumIdentity,Cilium 还有以下动态资源可能导致同类问题,建议一并排除:

资源名 作用 是否建议排除
CiliumEndpoint 记录 Pod 的网络端点信息,动态更新
CiliumNetworkPolicyNodeStatus 网络策略在节点上的执行状态
CiliumClusterwideNetworkPolicy 集群级网络策略(若为动态生成) 按需(手动创建的不排除)
CiliumLocalRedirectPolicy 本地重定向策略,动态生成

完整的全局排除配置(生产推荐)

yaml 复制代码
cm:
  resource.exclusions: |
    - apiGroups:
        - cilium.io
      kinds:
        - CiliumIdentity
        - CiliumEndpoint
        - CiliumNetworkPolicyNodeStatus
        - CiliumLocalRedirectPolicy
      clusters:
        - "*"
  url: https://argocd.dev5.dhn122.k8s.fnbbn-dev.dyn.nesc.nokia.net

四、验证问题是否解决

  1. 检查 ArgoCD UI:对应 Application 的"OutOfSync"状态消失,资源列表中不再显示 CiliumIdentity

  2. 检查 ArgoCD 日志(无排除相关错误):

    bash 复制代码
    kubectl logs -n argocd deployment/argocd-application-controller | grep -i "ciliumidentity"

    正常情况下,日志中会显示"excluding resource cilium.io/CiliumIdentity",无报错;

  3. 触发 Cilium 资源变更(如重启一个 Pod),观察 ArgoCD 状态:不再出现 Out-Of-Sync 告警。


五、生产环境最佳实践

1. 区分"声明式资源"与"运行时资源"

  • 声明式资源 (需 ArgoCD 管理):CiliumNetworkPolicyCiliumClusterwideNetworkPolicy(手动编写的)、Cilium 的 Deployment/ConfigMap 等;
  • 运行时资源 (需排除):CiliumIdentityCiliumEndpoint 等动态生成的资源。

2. 避免过度排除

仅排除 Cilium 动态生成的资源,不要排除 CiliumNetworkPolicy(网络策略是声明式的,需要 ArgoCD 管理)。

3. 配置 ArgoCD 同步策略(减少误判)

在包含 Cilium 的 Application 中添加以下同步选项,进一步避免无关资源干扰:

yaml 复制代码
spec:
  syncPolicy:
    syncOptions:
      # 仅同步 Git 中存在的资源(忽略集群中额外的动态资源)
      - ApplyOutOfSyncOnly=true
      # 禁用资源完整性检查(不检查未在 Git 中的资源)
      - PrunePropagationPolicy=foreground
      - PruneLast=true

4. 定期清理 ArgoCD 资源缓存

若排除规则生效后仍有残留的 Out-Of-Sync 状态,可清理 ArgoCD 缓存:

bash 复制代码
# 重启 ArgoCD 控制器(清除缓存)
kubectl rollout restart deployment argocd-application-controller -n argocd
# 重新同步 Application
argocd app sync <your-application-name> --hard

总结

核心解决方案

  1. 全局排除 CiliumIdentity :修改 argocd-cmresource.exclusions,是最彻底、推荐的方案;
  2. 可选补充 :排除其他 Cilium 动态资源(如 CiliumEndpoint),避免后续同类问题;
  3. 验证生效:同步 ArgoCD 配置,重启控制器,确认 Out-Of-Sync 状态消失。

关键点回顾

  • CiliumIdentity 是动态运行时资源,无法/无需与 Git 同步,必须排除;
  • 排除规则需确保 apiGroupskinds 拼写正确,clusters: "*" 覆盖所有集群;
  • 生产环境建议一并排除其他 Cilium 动态资源,减少 ArgoCD 不必要的资源跟踪。

如果排除后仍有问题,可检查:① 排除规则是否生效;② Application 是否继承了全局排除规则;③ Cilium 版本是否有特殊的资源命名规则。

相关推荐
光锥智能2 分钟前
小鹏第一位机器人自己走下产线
大数据·人工智能
GISMagic5 分钟前
Agent学习,写在开始之前
大数据·学习·agent
Capricorn198819 分钟前
知芽 Notebook Skill 引用存在性校验与单元记忆破解幽灵引用危机
大数据·论文阅读·人工智能·论文笔记
hgfsjk1 小时前
跨境电商ERP系统软件哪个好?2026年选型指南
大数据·经验分享·笔记·其他
APItesterCris2 小时前
告别人工盯品!借助 Open‑Claw 快速搭建电商商品全自动监控与数据分析系统(完整实操代码)
java·大数据·前端·数据库
BYSJMG2 小时前
计算机毕设选题推荐:基于大数据的公共交通运营数据分析与可视化,Spark+K-Means聚类城市运营模式
大数据·hadoop·信息可视化·数据分析·spark·kmeans·课程设计
顧棟2 小时前
【ES实战】 低版本Elasticsearch(不具备CCR)集群迁移
大数据·elasticsearch·搜索引擎
AIwenIPgeolocation3 小时前
告别“数据孤岛”:可信数据空间如何打通产业链、城市群?
大数据·人工智能
云上工程笔记3 小时前
四柱记账法和复式记账法有什么区别?复式记账为什么更适合查错和对账
大数据·前端·人工智能
微三云生态系统架构师-彭丹3 小时前
区域拆分独立分红池系统设计:解决大盘分红迟滞的四维拆分引擎
大数据·人工智能