Argo CD 常见问题解答与疑难排解指南

Argo CD 常见问题解答与疑难排解指南

argo-cd Argo CD 是一个声明式 Kubernetes 应用部署工具,可实现应用程序的自动化部署和版本控制。 * 提供 Kubernetes 应用的自动化部署和版本控制功能,支持多种部署策略,简化 Kubernetes 应用管理。 * 有什么特点:声明式部署、支持多种部署策略、简化 Kubernetes 应用管理。 argo-cd 项目地址: https://gitcode.com/gh_mirrors/ar/argo-cd

引言

Argo CD 作为一款流行的 GitOps 持续交付工具,在实际使用过程中可能会遇到各种问题。本文将针对用户常见问题进行技术解析,并提供详细的解决方案,帮助开发者更好地理解和使用 Argo CD。

应用同步问题

应用无法删除的情况处理

当 Git 仓库被删除或损坏时,Argo CD 可能无法删除应用,因为它需要先生成清单文件才能执行删除操作。此时有两种解决方案:

  1. 恢复仓库:修复或恢复您的 Git 仓库
  2. 强制删除:使用级联删除选项
    argocd app delete <APP_NAME> --cascade=false
    
    然后手动删除相关资源

同步后仍显示 OutOfSync 状态

这种情况通常是由于资源定义与实际集群状态存在差异引起的。常见原因包括:

  • 资源限制单位不同(如 "1000m" 与 "1")
  • 时间单位表示差异(如 "8760h" 与 "8760h0m0s")
  • 标签或注解的微小差异

解决方案是配置差异忽略规则,在 argocd-cm 中设置资源差异忽略策略。

健康状态问题

应用卡在 Progressing 状态

Argo CD 对标准 Kubernetes 资源有内置的健康检查机制,某些资源类型可能出现健康状态判断问题:

  1. Ingress 资源

    • 问题:某些 Ingress 控制器(如 Contour、Traefik)不会更新 status.loadBalancer.ingress 字段
    • 解决方案:配置 Traefik 发布服务信息
      providers:
        kubernetesIngress:
          publishedService:
            enabled: true
      
  2. StatefulSet 资源

    • 问题:Kubernetes 旧版本存在 status.updatedReplicas 字段未填充的 bug
    • 解决方案:升级 Kubernetes 或自定义健康检查
  3. SealedSecret 资源

    • 问题:旧版本 CRD 不包含状态字段
    • 解决方案:升级 SealedSecret 控制器或禁用健康检查

认证与安全

管理员密码重置

不同版本的密码重置方式有所不同:

  • v1.8 及之前:密码为服务器 Pod 名称
  • v1.9 及之后:密码存储在 argocd-initial-admin-secret

重置密码步骤:

  1. 生成 bcrypt 哈希:
    argocd account bcrypt --password <新密码>
    
  2. 更新 secret:
    kubectl -n argocd patch secret argocd-secret \
      -p '{"stringData": {
        "admin.password": "<哈希值>",
        "admin.passwordMtime": "'$(date +%FT%T%Z)'"
      }}'
    

禁用管理员账户

argocd-cm 中添加配置:

admin.enabled: "false"

网络与连接问题

集群连接问题排查

当 Argo CD 无法连接集群时,可执行以下步骤排查:

  1. 进入 Argo CD Pod:
    kubectl exec -it <argocd-pod-name> bash
    
  2. 生成集群配置:
    argocd admin cluster kubeconfig https://<cluster-url> /tmp/config
    
  3. 手动测试连接:
    KUBECONFIG=/tmp/config kubectl get pods
    

HTTP/2 代理问题

如果出现 rpc error: code = Unavailable desc = transport is closing 错误,可能是代理不支持 HTTP/2,可添加 --grpc-web 参数:

argocd ... --grpc-web

Helm 相关问题

离线环境部署 Helm 应用

当 Helm 图表依赖外部仓库时,可在 argocd-cm 中覆盖仓库配置:

data:
  repositories: |
    - type: helm
      url: http://<内部仓库地址>:8080
      name: stable

Helm 应用管理差异

Argo CD 使用 helm template 生成清单后直接部署,而非 helm install,因此:

  • 无法通过 helm ls 查看应用
  • 应用完全由 Argo CD 管理
  • 提供类似 Helm 的历史和回滚功能

高级配置

Redis 认证配置

旋转 Redis 密码

  1. 删除现有 secret:
    kubectl delete secret argocd-redis -n <argocd命名空间>
    
  2. 重启相关组件

禁用 Redis 认证

  1. 使用自己的 Redis 实例
  2. 清理默认 Redis 组件
  3. 从相关部署中移除 REDIS_PASSWORD 环境变量

错误处理

清单生成缓存错误

Manifest generation error (cached) 表示清单生成错误已被缓存。解决方案:

  1. 检查 repo-server 日志查找具体错误
  2. 如果是临时问题,可尝试强制刷新

Schema 验证错误

field not declared in schema 错误是由于 Argo CD 使用硬编码的 Kubernetes 资源模式。解决方案:

  1. 确认使用的 Kubernetes 版本
  2. 检查字段是否在新版本中可用
  3. 考虑升级 Argo CD 版本

总结

本文涵盖了 Argo CD 使用中的常见问题及其解决方案,从基础配置到高级排错都有涉及。理解这些问题背后的原理有助于更好地使用 Argo CD 实现 GitOps 工作流。对于更复杂的问题,建议查阅官方文档或社区讨论获取最新解决方案。

argo-cd Argo CD 是一个声明式 Kubernetes 应用部署工具,可实现应用程序的自动化部署和版本控制。 * 提供 Kubernetes 应用的自动化部署和版本控制功能,支持多种部署策略,简化 Kubernetes 应用管理。 * 有什么特点:声明式部署、支持多种部署策略、简化 Kubernetes 应用管理。 argo-cd 项目地址: https://gitcode.com/gh_mirrors/ar/argo-cd

创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

劳阔印

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值