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 版本是否有特殊的资源命名规则。

相关推荐
Elasticsearch10 小时前
通用表达式语言 ( CEL ): CEL 输入如何改进 Elastic Agent 集成中的数据收集
elasticsearch
武子康12 小时前
大数据-236 离线数仓 - 会员指标验证、DataX 导出与广告业务 ODS/DWD/ADS 全流程
大数据·后端·apache hive
武子康1 天前
大数据-235 离线数仓 - 实战:Flume+HDFS+Hive 搭建 ODS/DWD/DWS/ADS 会员分析链路
大数据·后端·apache hive
DianSan_ERP2 天前
电商API接口全链路监控:构建坚不可摧的线上运维防线
大数据·运维·网络·人工智能·git·servlet
够快云库2 天前
能源行业非结构化数据治理实战:从数据沼泽到智能资产
大数据·人工智能·机器学习·企业文件安全
AI周红伟2 天前
周红伟:智能体全栈构建实操:OpenClaw部署+Agent Skills+Seedance+RAG从入门到实战
大数据·人工智能·大模型·智能体
B站计算机毕业设计超人2 天前
计算机毕业设计Django+Vue.js高考推荐系统 高考可视化 大数据毕业设计(源码+LW文档+PPT+详细讲解)
大数据·vue.js·hadoop·django·毕业设计·课程设计·推荐算法
计算机程序猿学长2 天前
大数据毕业设计-基于django的音乐网站数据分析管理系统的设计与实现(源码+LW+部署文档+全bao+远程调试+代码讲解等)
大数据·django·课程设计
B站计算机毕业设计超人2 天前
计算机毕业设计Django+Vue.js音乐推荐系统 音乐可视化 大数据毕业设计 (源码+文档+PPT+讲解)
大数据·vue.js·hadoop·python·spark·django·课程设计
十月南城2 天前
数据湖技术对比——Iceberg、Hudi、Delta的表格格式与维护策略
大数据·数据库·数据仓库·hive·hadoop·spark