OutOfSync
?Progressing
状态?helm ls
等 Helm 命令查看它?Out Of Sync
状态?invalid cookie, longer than max length 4093
错误?rpc error: code = Unavailable desc = transport is closing
错误?SealedSecret
类型的资源卡在Progressing
状态?Manifest generation error (cached)
错误?当 Argo CD 无法生成清单时,将无法删除应用程序。您需要:
--cascade=false
删除应用程序,然后手动删除相关资源。OutOfSync
?请参见 Diffing 文档 了解资源为何可能处于 OutOfSync 状态的原因,以及配置 Argo CD 忽略某些字段的方式。
Progressing
状态?Argo CD 为多种标准 Kubernetes 类型提供健康检查。Ingress
、StatefulSet
和 SealedSecret
类型存在已知问题,可能导致健康检查返回 Progressing
状态而非 Healthy
。
Ingress
只有在 status.loadBalancer.ingress
列表非空且至少有一个 hostname
或 IP
值时才被视为健康。有些 Ingress 控制器(如 contour、traefik)不会更新 status.loadBalancer.ingress
字段,导致 Ingress
永远处于 Progressing
状态。
StatefulSet
只有在 status.updatedReplicas
字段值与 spec.replicas
字段值匹配时才被视为健康。由于 Kubernetes bug kubernetes#68573,status.updatedReplicas
无法填充。因此,除非您使用的 Kubernetes 版本包含修复 kubernetes#67570,否则 StatefulSet 可能会保持在 Progressing 状态。
您的 StatefulSet
或 DaemonSet
使用了 OnDelete
策略而非 RollingUpdate
。
关于 SealedSecret
,请参见 为什么 SealedSecret
类型的资源卡在 Progressing
状态?
作为临时解决方案,Argo CD 允许通过自定义 健康检查 来覆盖默认行为。
如果您使用 Traefik 作为 Ingress,可以通过更新 Traefik 配置发布 loadBalancer IP:
在 argocd-cm
ConfigMap 中添加 admin.enabled: "false"
。
如果 Helm Chart 中的依赖项位于外部仓库,Argo CD 可能无法生成 Helm Chart 清单。为了解决此问题,您需要确保 requirements.yaml
仅使用内部可用的 Helm 仓库。即使 Chart 仅使用内部仓库的依赖项,Helm 仍可能决定刷新 stable
仓库。作为解决方案,在 argocd-cm
配置映射中覆盖 stable
仓库 URL:
helm ls
等 Helm 命令查看它?Argo CD 在部署 Helm 应用程序时,仅将 Helm 用作模板机制。它会运行 helm template
,然后将生成的清单部署到集群,而不是执行 helm install
。这意味着您无法使用任何 Helm 命令查看/验证该应用程序。它完全由 Argo CD 管理。请注意,Argo CD 原生支持一些您可能在 Helm 中错过的功能(例如历史记录和回滚命令)。
此决定是为了使 Argo CD 对所有清单生成器保持中立。
检查集群密钥是否具有 argocd.argoproj.io/secret-type: cluster
标签。如果密钥有标签但集群仍然不可见,可能是权限问题。尝试使用 admin
用户列出集群(例如:argocd login --username admin && argocd cluster list
)。
Out Of Sync
状态?在某些情况下,您使用的工具可能会通过添加 app.kubernetes.io/instance
标签与 Argo CD 发生冲突,例如使用 Kustomize 通用标签功能。
Argo CD 会自动设置 app.kubernetes.io/instance
标签,并使用它来确定哪些资源构成该应用程序。如果该工具也这么做,就可能导致混淆。您可以通过在 argocd-cm
中设置 application.instanceLabelKey
值来更改此标签。我们建议使用 argocd.argoproj.io/instance
。
进行此更改后,您的应用程序将变为不同步状态,需要重新同步。
默认的轮询间隔为 3 分钟(180 秒),并带有可配置的抖动。您可以通过更新 argocd-cm
配置映射中的 timeout.reconciliation
值和 timeout.reconciliation.jitter
来更改设置。如果有任何 Git 更改,Argo CD 仅会更新启用了 auto-sync
设置的应用程序。如果您将其设置为 0,Argo CD 将停止自动轮询 Git 仓库,您只能使用其他方法(如 webhooks
和/或 手动同步
)来创建应用程序。
invalid cookie, longer than max length 4093
错误?Argo CD 使用 JWT 作为身份验证令牌。您可能属于许多组,并且超出了为 cookies 设置的 4KB 限制。您可以通过打开"开发者工具 -> 网络"获取组列表:
<argocd_instance>/auth/callback?code=<random_string>
的调用在 jwt.io 解码该令牌。这将提供您可以退出的团队列表。
rpc error: code = Unavailable desc = transport is closing
错误?您可能位于不支持 HTTP 2 的代理后面?尝试使用 --grpc-web
标志:
SealedSecret
类型的资源卡在Progressing
状态?SealedSecret
资源的控制器可能会在其提供的资源上公开状态条件。从版本 v2.0.0
开始,Argo CD 会根据该状态条件来推导 SealedSecret
的健康状态。
在 v0.15.0
之前的 SealedSecret
控制器版本受到与状态条件更新相关的问题的影响,因此在这些版本中默认禁用此功能。状态条件更新可以通过使用 --update-status
命令行参数启动 SealedSecret
控制器,或通过设置 SEALED_SECRETS_UPDATE_STATUS
环境变量来启用。
要禁用 Argo CD 检查 SealedSecret
资源的状态条件,请在 argocd-cm
ConfigMap 中通过 resource.customizations.health.<group_kind>
键添加以下资源自定义。
resource.customizations.health.bitnami.com_SealedSecret: | hs = hs.status = "Healthy" hs.message = "Controller doesn't report resource status" return hs
argocd-redis
密钥:Manifest generation error (cached)
错误?Manifest generation error (cached)
意味着在生成清单时出现错误,且错误消息已被缓存以避免无限重试。
进行硬刷新(忽略缓存的错误)可以克服临时问题。但如果有持续原因导致清单生成失败,硬刷新将无济于事。
请尝试在 repo-server 日志中搜索应用程序名称,以识别导致清单生成失败的错误。