深色模式
Argo CD 实战:部署并同步应用
摘要:Argo CD 是 Kubernetes 上最主流的 GitOps 工具。本文从安装、登录、创建 Application 开始,演示自动同步、漂移自愈和一条命令回滚,全程命令可直接复制。
适用环境
- 一个 Kubernetes 集群(minikube / kind / 云厂商集群均可)
- 已安装
kubectl且能访问集群 - 一个存放 manifest 的 Git 仓库
操作步骤
1. 安装与登录
bash
kubectl create namespace argocd
kubectl apply -n argocd -f https://raw.githubusercontent.com/argoproj/argo-cd/stable/manifests/install.yaml
kubectl wait --for=condition=available deployment/argocd-server -n argocd --timeout=300s
kubectl -n argocd get secret argocd-initial-admin-secret -o jsonpath="{.data.password}" | base64 -d; echo
kubectl port-forward svc/argocd-server -n argocd 8080:4431
2
3
4
5
2
3
4
5
浏览器打开 https://localhost:8080,用户 admin,登录后立刻改密码。
2. 准备 Git 中的 manifest
bash
mkdir -p dev && cat > dev/guestbook.yaml <<'EOF'
apiVersion: apps/v1
kind: Deployment
metadata: { name: guestbook }
spec:
replicas: 2
selector: { matchLabels: { app: guestbook } }
template:
metadata: { labels: { app: guestbook } }
spec:
containers: [{ name: guestbook, image: nginx:alpine }]
EOF
git add . && git commit -m "add guestbook" && git push1
2
3
4
5
6
7
8
9
10
11
12
13
2
3
4
5
6
7
8
9
10
11
12
13
3. 创建 Application(声明式,推荐入库)
yaml
apiVersion: argoproj.io/v1alpha1
kind: Application
metadata: { name: guestbook, namespace: argocd }
spec:
project: default
source:
repoURL: https://github.com/<账号>/<配置仓库>.git
targetRevision: main
path: dev
destination:
server: https://kubernetes.default.svc
namespace: default
syncPolicy:
automated:
prune: true # Git 中删除的资源也一并删除
selfHeal: true # 检测到漂移自动纠正1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
bash
kubectl apply -f app.yaml1
4. 同步与回滚
bash
argocd app sync guestbook
argocd app history guestbook
argocd app rollback guestbook 3 # 回滚到第 3 次部署1
2
3
2
3
危险
开启 prune: true 后,从 Git 中删除 manifest 会真的删除集群资源(含 PVC 数据风险)。生产启用前先确认删除保护策略。
验证
bash
argocd app get guestbook # Health: Healthy, Sync: Synced
kubectl scale deploy guestbook --replicas=5 && sleep 60 && kubectl get deploy guestbook1
2
2
- [ ] 应用状态为
Healthy且Synced - [ ] 手动改副本数后几十秒内被自动拉回 Git 声明值
- [ ] 改 Git 并推送后,集群在 3 分钟内自动更新
常见坑
私有仓库连不上
在 Settings → Repositories 用 HTTPS Token 或 SSH 私钥连接,确认仓库地址路径无误。
一直 OutOfSync
常见于 K8s 默认字段被回写。在 spec.ignoreDifferences 中忽略这些字段。
集群权限过大
多团队场景应用 AppProject 限制可部署的 namespace、资源类型和仓库。