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

相关推荐
金融小师妹5 小时前
基于多模态宏观建模与历史序列对齐:原油能源供给冲击的“类1970年代”演化路径与全球应对机制再评估
大数据·人工智能·能源
播播资源5 小时前
OpenAI2026 年 3 月 18 日最新 gpt-5.4-nano模型:AI 智能体的“神经末梢”,以极低成本驱动高频任务
大数据·人工智能·gpt
GJGCY6 小时前
中小企业财务AI工具技术评测:四大类别架构差异与选型维度
大数据·人工智能·ai·架构·财务·智能体
九河云7 小时前
云上安全运营中心(SOC)建设:从被动防御到主动狩猎
大数据·人工智能·安全·架构·数字化转型
武子康7 小时前
大数据-252 离线数仓 - Airflow + Crontab 入门实战:定时调度、DAG 编排与常见报错排查
大数据·后端·apache hive
jinanwuhuaguo7 小时前
OpenClaw、飞书、Claude Code、Codex:四维AI生态体系的深度解构与颗粒化对比分析
大数据·人工智能·学习·飞书·openclaw
Rubin智造社7 小时前
# OpenClaude命令实战|核心控制三剑客/reasoning+/verbose+/status 实操指南
大数据·人工智能
华奥系科技8 小时前
智慧经济新格局:解码社区、园区与城市一体化建设逻辑
大数据·人工智能·科技·物联网·安全
TDengine (老段)9 小时前
TDengine IDMP 组态面板 —— 画布
大数据·数据库·物联网·时序数据库·tdengine·涛思数据
阿里云大数据AI技术9 小时前
阿里云荣获 2025–2026 年度 Elastic中国最佳合作伙伴奖
人工智能·elasticsearch