You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Crossplane XRD在ArgoCD中显示OutOfSync状态求助

XRD在ArgoCD显示OutOfSync但实际已同步的问题解决

原因

ArgoCD默认的差异检测和健康逻辑不适配Crossplane的XRD资源:

  • Crossplane会自动给XRD注入状态字段、默认元数据(比如status.conditions、spec.claimNames的默认值),这些不在你从仓库同步的原始YAML里,ArgoCD会判定集群状态和期望状态不一致,标记为OutOfSync。
  • XRD的spec.versions[*].schema.openAPIV3Schema会被Crossplane自动补全校验规则,这也会触发ArgoCD的差异检测。

解决配置

针对Crossplane的XRD/Composite Resource(XR),需要给ArgoCD做以下特殊配置:

1. 忽略Crossplane自动生成的字段

在ArgoCD应用的spec.syncPolicy.ignoreDifferences中添加规则,跳过Crossplane注入的字段:

spec:
  syncPolicy:
    ignoreDifferences:
    - group: apiextensions.crossplane.io
      kind: CompositeResourceDefinition
      jsonPointers:
      - /status
      - /spec/claimNames
      - /spec/versions/0/schema/openAPIV3Schema/properties/status

如果是XObjectStorage这类XR实例,也要补充对应的忽略规则:

- group: storage.example.com # 替换成你的XR所属的group
      kind: XObjectStorage
      jsonPointers:
      - /status

2. 配置Crossplane专属健康检查

ArgoCD默认不识别Crossplane的Synced状态,需要在ArgoCD的configmap/argocd-cm中添加自定义健康检查逻辑:

data:
  resource.customizations: |
    apiextensions.crossplane.io/CompositeResourceDefinition:
      health.lua: |
        hs = {}
        if obj.status ~= nil then
          for _, condition in ipairs(obj.status.conditions) do
            if condition.type == "Established" and condition.status == "True" then
              hs.status = "Healthy"
              hs.message = "XRD已创建完成"
              return hs
            end
          end
        end
        hs.status = "Progressing"
        hs.message = "XRD正在创建中"
        return hs
    storage.example.com/XObjectStorage: # 替换成你的XR的group/kind
      health.lua: |
        hs = {}
        if obj.status ~= nil then
          for _, condition in ipairs(obj.status.conditions) do
            if condition.type == "Synced" and condition.status == "True" then
              hs.status = "Healthy"
              hs.message = "XR已同步完成"
              return hs
            end
          end
        end
        hs.status = "Progressing"
        hs.message = "XR正在同步中"
        return hs

3. 启用ArgoCD Crossplane插件(可选,适用于ArgoCD 2.5+)

官方插件会自动处理Crossplane资源的同步和健康检查:

  1. 安装插件:
kubectl apply -n argocd -f https://raw.githubusercontent.com/argoproj-labs/argocd-extensions/main/crossplane/crossplane-plugin.yaml
  1. 在ArgoCD应用中指定使用该插件:
spec:
  syncPolicy:
    syncOptions:
    - SyncStrategy=Apply
  plugin:
    name: crossplane

验证

配置完成后,执行以下操作确认修复:

  • 触发同步:argocd app sync <你的应用名称>
  • 查看状态:argocd app get <你的应用名称>,确认OutOfSync状态消失,健康状态显示为Healthy

内容的提问来源于stack exchange,提问作者Amitb

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.13 09:06:14