go微服务不应集成argo cd,因其是独立控制器,只从git拉取yaml并同步;ci需完成构建与镜像推送,argo cd仅响应git变更,不感知registry;eks部署需irsa权限配置,确保git、ci、registry、k8s节奏一致。

Go 微服务不该、也不能在代码里集成 Argo CD——它不是 SDK,不是中间件,更不是你 main.go 里要 import 的包。Argo CD 是独立运行在集群里的控制器,只负责从 Git 拉 YAML、比对状态、调用 apply。所有构建、打包、镜像推送,必须由 CI 完成;Go 服务本身只管启动 HTTP、响应请求。
spec.source.path 指向空目录或未提交路径就报 failed to load manifests
这是最常见也最容易卡住的错误。Argo CD 不读你本地磁盘,也不等你 git add 完再拉取,它只认远程仓库里已 git push 的内容。
- 错例:
spec.source.path: "manifests/prod"→ 但该目录只在你本地,没git commit -m "add prod manifests"推送 - 错例:
spec.source.path: "."→ 根目录下只有go.mod和main.go,没有deployment.yaml - 正例:确保
manifests/prod/deployment.yaml已提交,且能被kubectl apply -f manifests/prod/直接执行 - 验证命令:
argocd app get myapp --show-labels看status.sync.status;若为Pending或Unknown,先跑argocd repo list确认仓库连通性
CI 构建完镜像后 Argo CD 不同步?autoSync 只监听 Git,不监听 Registry
Argo CD 的 syncPolicy.automated 只响应 Git 仓库的 commit 变更,不会感知镜像仓库(如 Harbor、ECR)里的新 tag。如果你只打 git tag v1.2.3 或只推镜像,Argo CD 完全无感。
- 推荐方案:CI 脚本用
sed -i或envsubst更新manifests/prod/kustomization.yaml中的images:列表,然后git commit -m "chore(release): update myapp to v1.2.3"并git push - 自动化方案:部署
argocd-image-updater,它轮询镜像仓库,匹配kustomization.yaml里的name: myapp,自动 patch 并提交 PR(需配 GitHub/GitLab webhook 或定时 job) - 绝对避免写死
image: myapp:latest——latest标签不可追溯,且argocd-image-updater默认忽略它 - 若用 Helm,确保
spec.source.helm.valueFiles显式指定values-prod.yaml,否则 updater 找不到image.tag字段
EKS 上 Argo CD 安装失败,90% 是 IRSA 权限链断裂
不是 Helm 命令写错了,而是 ServiceAccount 没绑定 IAM Role。EKS 上 argocd-server 和 argocd-application-controller 默认用 default SA,但生产必须用 IRSA(IAM Roles for Service Accounts)。
- 先创建 OIDC Provider 并关联 EKS Cluster:
aws eks describe-cluster --name xxx --query "cluster.identity.oidc.issuer" - 为
argocdnamespace 创建 annotated SA:eksctl create iamserviceaccount --name argocd-server --namespace argocd --cluster xxx --attach-policy-arn arn:aws:iam::xxx:policy/ArgoCD-ClusterAdmin --approve - 安装时显式指定 SA:
helm install argocd argo/argo-cd --set server.serviceAccount.name=argocd-server --set controller.serviceAccount.name=argocd-application-controller - 跳过这步,你会看到
AccessDenied: User: anonymous或Unauthorized,但错误只出现在 Application 同步日志里,不是 Helm 输出
真正难的不是写 YAML,而是让 Git、CI、Registry、K8s、Argo CD 四者节奏一致:Git 提交触发 CI,CI 更新 Git 配置并推镜像,Argo CD 只盯着 Git 配置变更,绝不越界去查 Registry。任何一环试图“绕开 Git”做决策,都会导致 drift 和不可追溯。
golang免费学习笔记(深入):立即使用
在学习笔记中,你将探索golang的核心概念和高级技巧!











