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

Karify98 & Amy 🌸·
Cover Image for 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.