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

相关推荐
xixixi7777716 小时前
互联网和数据分析中的核心指标 DAU (日活跃用户数)
大数据·网络·数据库·数据·dau·mau·留存率
绝缘体116 小时前
如何使用外卖霸王餐api接口?
大数据·搜索引擎·微信·pygame
幂链iPaaS17 小时前
市场六大专业iPaaS平台怎么选
大数据·人工智能
珠海西格17 小时前
光伏电站全景感知体系:数据采集与设备状态监测技术
大数据·运维·服务器·数据库·人工智能
代码匠心17 小时前
从零开始学Flink:Flink SQL 极简入门
大数据·flink·flink sql·大数据处理
stevenzqzq18 小时前
git 常用操作
大数据·git
JZC_xiaozhong18 小时前
多系统权限标准不统一?企业如何实现跨平台统一权限管控
java·大数据·微服务·数据集成与应用集成·iam系统·权限治理·统一权限管理
WZGL123018 小时前
“十五五”发展展望:以社区为底座构建智慧康养服务
大数据·人工智能·物联网
龙亘川18 小时前
政务数据治理实践:从架构搭建到价值释放的全流程探索
大数据·政务数据之道》白皮书·政务数据治理
历程里程碑19 小时前
普通数组----最大子数组和
大数据·算法·elasticsearch·搜索引擎·排序算法·哈希算法·散列表