GitOps: Deploy Bằng Git Thay Vì Click Chuột

Tình Trạng Quen Thuộc
Đội ngũ có 5 developer. Mỗi người deploy một kiểu — người chạy CI/CD trên GitHub Actions, người SSH vào server chạy SSH kubectl apply. Production hôm qua chạy version nào? Không ai chắc.
GitOps giải quyết chính xác bài toán này: Git là single source of truth cho mọi thứ chạy trên production.
GitOps Là Gì?
TL;DR: Mọi thay đổi infrastructure và application đều bắt đầu từ một git commit. Hệ thống tự động sync trạng thái thực tế với trạng thái trong Git.
Thay vì con người chạy lệnh deploy, một agent (ArgoCD hoặc Flux) liên tục theo dõi Git repository. Khi phát hiện thay đổi — commit mới, branch merge — agent tự động apply lên Kubernetes cluster.
Developer ──commit──▶ Git Repo ──detect──▶ ArgoCD ──sync──▶ Kubernetes Cluster
▲ │
└──────────────── loop ────────────────┘
Vòng lặp đơn giản: Git thay đổi → agent sync → cluster đúng trạng thái. Muốn biết production đang chạy gì? Đọc Git.
Tại Sao Nên Dùng GitOps?
TL;RR: Audit trail, rollback dễ, không cần SSH vào server, nhiều người deploy cùng lúc không conflict.
- Version control cho infrastructure — mọi thay đổi có git history, biết ai sửa gì, lúc nào
- Rollback = git revert — gặp sự cố? Revert commit, agent tự sync về trạng thái cũ
- Không SSH vào server — giảm thiểu sai sót con người, tăng bảo mật
- Pull request = review process — thay đổi production phải qua code review trước khi merge
- Tự chữa lành (self-healing) — ai đó manual thay đổi trên cluster? Agent phát hiện drift và revert lại
ArgoCD — Công Cụ GitOps Phổ Biến Nhất
TL;DR: ArgoCD là open-source tool, chạy trên Kubernetes, theo dõi Git repo và tự động sync ứng dụng.
Cài đặt ArgoCD trên Kubernetes cluster chỉ cần vài lệnh:
# Cài ArgoCD
kubectl create namespace argocd
kubectl apply -n argocd -f https://raw.githubusercontent.com/argoproj/argo-cd/stable/manifests/install.yaml
# Truy cập UI
kubectl port-forward svc/argocd-server -n argocd 8080:443
Sau đó khai báo Application trong ArgoCD, trỏ đến Git repository chứa Kubernetes manifests hoặc Helm charts. ArgoCD sẽ tự động theo dõi và sync.
Workflow Thực Tế
TL;DR: Developer push code → CI build image → update manifest trong Git repo → ArgoCD sync lên cluster.
Bước 1: Developer push code lên feature branch, tạo pull request
Bước 2: CI chạy test, build container image mới, push lên container registry
Bước 3: CI cập nhật image tag trong Git repo chứa Kubernetes manifests
Bước 4: Merge vào main branch
Bước 5: ArgoCD phát hiện thay đổi, tự động sync ứng dụng lên cluster
Toàn bộ flow không có bước nào cần SSH hay chạy lệnh thủ công.
Lưu Ý Khi Bắt Đầu
- Bắt đầu với staging trước, chưa vội áp dụng production
- Monorepo hay multi-repo đều được — mỗi cách có trade-off riêng
- Secret không commit vào Git — dùng Sealed Secrets hoặc External Secrets Operator
- ArgoCD vs Flux — ArgoCD có UI trực quan, Flux lightweight hơn. Chọn theo nhu cầu đội ngũ
Bài viết thuộc series DevOps Handbook — hướng dẫn thực tế cho developer muốn mở rộng kỹ năng sang DevOps.