本地多Kubernetes集群中ArgoCD跨集群部署应用失败求助
ArgoCD跨集群部署问题解决方案
场景一:ArgoCD部署在Docker Desktop,向Minikube集群部署应用
问题1:argocd cluster add minikube连接拒绝+403错误
直接给匿名用户集群管理员权限是不安全且无效的,正确做法是在Minikube集群创建专用ServiceAccount供ArgoCD使用:
- 在Minikube集群执行以下命令:
# 创建专用ServiceAccount kubectl create sa argocd-manager -n kube-system # 绑定集群管理员权限 kubectl create clusterrolebinding argocd-manager-role --clusterrole=cluster-admin --serviceaccount=kube-system:argocd-manager # 获取ServiceAccount的token kubectl get secret $(kubectl get sa argocd-manager -n kube-system -o jsonpath='{.secrets[0].name}') -n kube-system -o jsonpath='{.data.token}' | base64 -d # 获取Minikube API Server地址 kubectl config view -o jsonpath='{.clusters[?(@.name=="minikube")].cluster.server}' # 获取Minikube集群CA证书并保存到文件 kubectl config view -o jsonpath='{.clusters[?(@.name=="minikube")].cluster.certificate-authority-data}' | base64 -d > minikube-ca.crt - 在Docker Desktop集群的ArgoCD中,通过手动导入kubeconfig的方式添加集群:
- 用上述获取的token、API Server地址、CA证书生成专属kubeconfig文件
- 执行
argocd cluster add --kubeconfig=./minikube-kubeconfig.yaml minikube
- 检查网络连通性:确保Docker Desktop集群的Pod能访问Minikube的API Server地址,可在Docker Desktop的任意Pod中执行
curl <minikube-api-server-address>测试。
问题2:同集群部署出现repo-server DNS解析失败
这是Docker Desktop集群的CoreDNS服务异常导致的,修复步骤:
- 检查CoreDNS Pod状态:
kubectl get pods -n kube-system -l k8s-app=kube-dns - 重启CoreDNS部署:
kubectl rollout restart deployment coredns -n kube-system - 验证ArgoCD repo-server服务的可访问性:
kubectl get svc argocd-repo-server -n argocd # 在集群内临时Pod测试DNS解析 kubectl run -it --rm --image=busybox dns-test -- nslookup argocd-repo-server.argocd.svc.cluster.local
场景二:ArgoCD部署在Minikube,向Docker Desktop集群部署应用
资源找不到错误(ConfigMap、AtlasMigration)
ConfigMap找不到:
- 核对应用清单中的ConfigMap名称、所属命名空间是否正确,先在Docker Desktop集群手动创建对应命名空间(如果未存在):
kubectl create namespace <应用命名空间> --context=docker-desktop - 确认ArgoCD应用配置中,目标集群、目标命名空间参数无误。
- 核对应用清单中的ConfigMap名称、所属命名空间是否正确,先在Docker Desktop集群手动创建对应命名空间(如果未存在):
AtlasMigration资源找不到:
Atlas的CRD(自定义资源定义)和控制器必须安装在目标集群(Docker Desktop),仅在ArgoCD所在的Minikube集群安装无效:- 从Atlas官方仓库下载CRD文件(
atlasmigrations.yaml)和控制器部署文件(controller.yaml) - 在Docker Desktop集群执行安装命令:
kubectl apply -f ./atlasmigrations.yaml --context=docker-desktop kubectl apply -f ./controller.yaml --context=docker-desktop - 验证CRD是否成功安装:
kubectl get crd atlasmigrations.db.atlasgo.io --context=docker-desktop
- 从Atlas官方仓库下载CRD文件(
内容的提问来源于stack exchange,提问作者Amit Limbasiya
相关产品推荐
相关产品推荐

