ArgoCD容器持续交付配置:零基础GitOps实战指南
开始前你要准备什么
动手之前先确认三样东西:一个正常运行的Kubernetes集群(比如Minikube或云上的托管集群)、kubectl命令行工具已配置好连接、以及一个存放Kubernetes清单文件的Git仓库(推荐GitHub或GitLab)。
如果你对K8s还不太熟,跟着步骤来也够用,因为ArgoCD会帮你管理大部分细节。
在集群上安装ArgoCD
安装过程很简单,用一条命令就能把ArgoCD部署到集群中。
在终端里执行:
kubectl create namespace argocd
kubectl apply -n argocd -f https://raw.githubusercontent.com/argoproj/argo-cd/stable/manifests/install.yaml
等几分钟后检查Pod状态,确保全部Running:
kubectl get pods -n argocd
接着暴露服务以便访问UI。
生产环境建议用Ingress,这里为了方便用端口转发:
kubectl port-forward svc/argocd-server -n argocd 8080:443
然后打开浏览器访问 https://localhost:8080。
默认管理员账号是 admin,密码通过下面命令获取:
kubectl -n argocd get secret argocd-initial-admin-secret -o jsonpath="{.data.password}" | base64 -d
登录后建议立刻修改密码。
创建你的第一个GitOps应用
把应用代码和K8s清单放在同一个Git仓库里,比如一个简单的Nginx部署。
在ArgoCD UI里点“+ NEW APP”,填入:
- Application Name:
my-nginx - Project:
default - Sync Policy:
Automatic(自动同步) - Source Repository URL:你的Git仓库地址
- Path:存放清单文件的目录(比如
./k8s) - Destination Cluster URL:
https://kubernetes.default.svc(当前集群) - Namespace:你要部署的目标命名空间(比如
default)
保存后点击“SYNC”,ArgoCD会自动从Git仓库拉取清单并应用到集群。
如果Git里没有清单文件,可以先手动创建一个:
apiVersion: apps/v1
kind: Deployment
metadata:
name: nginx
spec:
replicas: 2
selector:
matchLabels:
app: nginx
template:
metadata:
labels:
app: nginx
spec:
containers:
- name: nginx
image: nginx:latest
---
apiVersion: v1
kind: Service
metadata:
name: nginx-service
spec:
ports:
- port: 80
targetPort: 80
selector:
app: nginx
将这个YAML文件提交到Git仓库的 k8s/ 目录下,ArgoCD检测到仓库变化后会自动同步(如果设置了自动同步策略)。
同步与验证:确保配置生效
同步成功后,在ArgoCD UI上可以看到Application状态变为“Synced”和“Healthy”。
你也可以用kubectl确认Pod是否启动:
kubectl get pods -n default | grep nginx
如果Pod没有如预期运行,先检查同步日志:点进Application -> APP DETAILS -> EVENTS/LOCS。
常见原因是清单文件里引用的镜像不存在或资源冲突,根据错误提示改仓库文件,再手动触发SYNC。
为了测试GitOps实效,可以改一下副本数(比如replicas从2改为3),提交到Git仓库,几秒后ArgoCD自动更新Pod数量。
验证:
kubectl get deployment nginx -o jsonpath='{.spec.replicas}'
输出应该变成3。
避坑与高频问题解答
问题1:连接Git仓库超时或认证失败
确保仓库是公开的,或者使用SSH Key / Token。在Settings -> Repositories里配置连接凭据。
问题2:应用一直处于OutOfSync状态
检查集群中是否有手动修改过资源(比如用kubectl edit)。GitOps要求所有变更都通过Git仓库驱动,手动修改会导致偏离。建议将同步策略从“Automatic”临时改为“Manual”,然后对比差异并手动同步一次,再改回自动。
问题3:ArgoCD服务无法访问
如果是端口转发方式,确认本地端口未被占用;生产环境推荐用Ingress并配置TLS。
避坑提醒: 不要在非目标集群上执行安装命令;
修改仓库文件后一定要git push,ArgoCD懒加载默认每3分钟检查一次仓库,也可以手动刷新或缩短轮训间隔。
如果你正在处理ArgoCD容器持续交付配置,建议先按本文步骤完整执行,再根据自己的环境做微调;
遇到异常时优先回看避坑和高频问题部分。