ArgoCD và GitOps cho Kubernetes: Hướng dẫn triển khai liên tục và câu hỏi phỏng vấn 2026
Tìm hiểu cách sử dụng ArgoCD để triển khai GitOps trên Kubernetes. Bài viết bao gồm cấu hình Application, Sync Waves, ApplicationSet và các câu hỏi phỏng vấn thường gặp.

Trong thế giới DevOps hiện đại, việc quản lý và triển khai ứng dụng trên Kubernetes đã trở thành một thách thức đáng kể khi quy mô hệ thống ngày càng mở rộng. ArgoCD đã nổi lên như một công cụ hàng đầu giúp các đội ngũ kỹ thuật áp dụng phương pháp GitOps một cách hiệu quả. Với khả năng tự động hóa việc đồng bộ trạng thái mong muốn từ Git repository đến Kubernetes cluster, ArgoCD mang đến sự minh bạch, khả năng kiểm soát và tính nhất quán cho quy trình triển khai liên tục.
GitOps là phương pháp vận hành hạ tầng và ứng dụng sử dụng Git làm nguồn chân lý duy nhất (single source of truth). Mọi thay đổi về cấu hình và trạng thái hệ thống đều được thực hiện thông qua Git commits, cho phép theo dõi lịch sử đầy đủ, rollback dễ dàng và tự động hóa triển khai thông qua các công cụ như ArgoCD.
Hiểu về ArgoCD Application
ArgoCD Application là đơn vị cơ bản nhất trong hệ sinh thái ArgoCD. Mỗi Application định nghĩa mối quan hệ giữa một source repository chứa cấu hình Kubernetes và destination cluster nơi các tài nguyên sẽ được triển khai. Việc hiểu rõ cấu trúc của Application manifest là nền tảng quan trọng để làm việc hiệu quả với ArgoCD.
# argocd-application.yaml
apiVersion: argoproj.io/v1alpha1
kind: Application
metadata:
name: my-web-app
namespace: argocd
spec:
project: default
source:
repoURL: https://github.com/acme/my-web-app-config
targetRevision: main
path: overlays/production
destination:
server: https://kubernetes.default.svc
namespace: production
syncPolicy:
automated:
prune: true # Remove resources deleted from Git
selfHeal: true # Revert manual changes in the cluster
syncOptions:
- CreateNamespace=trueTrong cấu hình trên, trường syncPolicy.automated cho phép ArgoCD tự động đồng bộ khi phát hiện sự khác biệt giữa Git và cluster. Tùy chọn prune: true đảm bảo rằng các tài nguyên đã bị xóa khỏi Git cũng sẽ được xóa khỏi cluster, trong khi selfHeal: true sẽ hoàn tác mọi thay đổi thủ công được thực hiện trực tiếp trên cluster.
Sync Waves và Resource Hooks
Một trong những tính năng mạnh mẽ nhất của ArgoCD là khả năng kiểm soát thứ tự triển khai các tài nguyên thông qua Sync Waves và Resource Hooks. Điều này đặc biệt quan trọng khi cần thực hiện các tác vụ như database migration trước khi triển khai ứng dụng mới.
# migration-job.yaml
apiVersion: batch/v1
kind: Job
metadata:
name: db-migrate
annotations:
argocd.argoproj.io/sync-wave: "-1" # Runs before wave 0
argocd.argoproj.io/hook: PreSync # Executes before main sync
argocd.argoproj.io/hook-delete-policy: HookSucceeded
spec:
template:
spec:
containers:
- name: migrate
image: acme/my-web-app:latest
command: ["python", "manage.py", "migrate"]
restartPolicy: NeverAnnotation sync-wave: "-1" đảm bảo rằng Job này sẽ chạy trước các tài nguyên ở wave 0 (mặc định). Hook PreSync chỉ định rằng Job sẽ được thực thi trước khi quá trình sync chính bắt đầu. Chính sách HookSucceeded sẽ tự động xóa Job sau khi hoàn thành thành công, giữ cho cluster luôn gọn gàng.
Sẵn sàng chinh phục phỏng vấn DevOps?
Luyện tập với mô phỏng tương tác, flashcards và bài kiểm tra kỹ thuật.
ApplicationSet cho Multi-cluster Deployment
Khi quản lý nhiều cluster hoặc môi trường khác nhau, việc tạo và duy trì nhiều Application manifest riêng lẻ trở nên cồng kềnh và dễ xảy ra sai sót. ApplicationSet giải quyết vấn đề này bằng cách cho phép định nghĩa một template duy nhất và tự động tạo ra các Application dựa trên các generators khác nhau.
# applicationset-clusters.yaml
apiVersion: argoproj.io/v1alpha1
kind: ApplicationSet
metadata:
name: my-web-app-all-clusters
namespace: argocd
spec:
generators:
- clusters:
selector:
matchLabels:
env: production
template:
metadata:
name: 'my-web-app-{{name}}'
spec:
project: default
source:
repoURL: https://github.com/acme/my-web-app-config
targetRevision: main
path: 'overlays/{{metadata.labels.region}}'
destination:
server: '{{server}}'
namespace: production
syncPolicy:
automated:
prune: true
selfHeal: trueVới cấu hình này, ArgoCD sẽ tự động tạo một Application cho mỗi cluster được gắn label env: production. Các biến như {{name}}, {{server}} và {{metadata.labels.region}} sẽ được thay thế bằng giá trị thực tế từ mỗi cluster, cho phép triển khai đồng nhất nhưng vẫn có thể tùy chỉnh theo từng vùng hoặc môi trường.
Cấu trúc Repository được khuyến nghị
Việc tổ chức cấu trúc repository một cách hợp lý là yếu tố then chốt để quản lý GitOps hiệu quả. Phương pháp phổ biến nhất là sử dụng Kustomize với cấu trúc base và overlays.
# Recommended repository structure
my-web-app-config/
base/
deployment.yaml
service.yaml
kustomization.yaml
overlays/
staging/
kustomization.yaml # Patches for staging
replica-count.yaml
production/
kustomization.yaml # Patches for production
replica-count.yaml
hpa.yamlThư mục base chứa các manifest chung được chia sẻ giữa tất cả môi trường. Mỗi thư mục trong overlays chứa các patches đặc thù cho từng môi trường, cho phép tùy chỉnh số replica, resource limits, hoặc thêm các tài nguyên riêng như HorizontalPodAutoscaler cho production.
So sánh ArgoCD và Flux
Khi lựa chọn công cụ GitOps cho Kubernetes, ArgoCD và Flux là hai ứng cử viên hàng đầu. Mỗi công cụ có những ưu điểm và nhược điểm riêng phù hợp với các trường hợp sử dụng khác nhau.
| Feature | ArgoCD 3.4 | Flux 2.8 | |---------|-----------|----------| | Architecture | Centralized server with UI | Distributed controllers per cluster | | Web UI | Built-in, polished dashboard | No built-in UI (third-party options) | | Helm support | Renders templates server-side | Native Helm SDK integration | | Multi-cluster | Hub-and-spoke from single instance | Independent installation per cluster | | RBAC | Application-level with SSO | Kubernetes-native RBAC only | | Image automation | Separate Image Updater component | Built-in image reflector/automation | | Progressive delivery | Argo Rollouts integration | Flagger integration | | Resource footprint | Higher (API server, repo server, Redis) | Lower (only needed controllers) |
ArgoCD phù hợp hơn cho các tổ chức cần giao diện web trực quan, quản lý multi-cluster tập trung và tích hợp SSO phức tạp. Trong khi đó, Flux là lựa chọn tốt hơn cho các đội ngũ ưu tiên kiến trúc phân tán, resource footprint thấp và tự động hóa cập nhật image container.
Để ArgoCD phản hồi ngay lập tức với các thay đổi trên Git, việc cấu hình webhook từ Git provider (GitHub, GitLab, Bitbucket) là cần thiết. Webhook sẽ thông báo cho ArgoCD mỗi khi có push event, giảm đáng kể thời gian chờ so với cơ chế polling mặc định (3 phút).
Tạm dừng Reconciliation
Trong một số tình huống như bảo trì cluster hoặc debug, việc tạm dừng quá trình reconciliation của ArgoCD là cần thiết. ArgoCD cung cấp annotation đặc biệt để thực hiện điều này ở cấp độ cluster.
# Pause reconciliation on a specific cluster
apiVersion: v1
kind: Secret
metadata:
name: prod-cluster
namespace: argocd
labels:
argocd.argoproj.io/secret-type: cluster
annotations:
argocd.argoproj.io/pause-reconciliation: "true"
stringData:
server: https://prod-cluster.example.com
config: |
{ "tlsClientConfig": { "insecure": false } }Khi annotation pause-reconciliation được đặt thành "true", ArgoCD sẽ ngừng đồng bộ tất cả các Application được triển khai đến cluster đó. Đây là tính năng hữu ích khi cần thực hiện các thay đổi thủ công tạm thời hoặc khắc phục sự cố mà không bị ArgoCD tự động hoàn tác.
Tính năng mới trong ArgoCD 3.4: Value Globs
ArgoCD 3.4 giới thiệu tính năng Value Globs cho Helm charts, giúp đơn giản hóa đáng kể việc quản lý nhiều value files. Thay vì phải liệt kê từng file một cách thủ công, giờ đây có thể sử dụng wildcard patterns.
# Before ArgoCD 3.4
source:
helm:
valueFiles:
- values.yaml
- values-production.yaml
- values-production-eu.yaml
- values-production-eu-secrets.yaml
# With ArgoCD 3.4 value globs
source:
helm:
valueFiles:
- values.yaml
- values-production*.yamlTính năng này không chỉ giảm độ dài của manifest mà còn tự động bao gồm các value files mới được thêm vào mà không cần cập nhật Application manifest. Điều này đặc biệt hữu ích trong môi trường enterprise với nhiều cấu hình khác nhau cho từng region hoặc customer.
Câu hỏi phỏng vấn thường gặp về ArgoCD và GitOps
Các câu hỏi dưới đây thường xuất hiện trong các buổi phỏng vấn vị trí DevOps Engineer và Platform Engineer. Việc nắm vững không chỉ lý thuyết mà còn kinh nghiệm thực hành với ArgoCD sẽ tạo lợi thế đáng kể trong quá trình phỏng vấn.
1. GitOps khác gì so với CI/CD truyền thống?
CI/CD truyền thống thường sử dụng mô hình push-based, trong đó pipeline chủ động đẩy thay đổi đến môi trường đích. GitOps áp dụng mô hình pull-based, nơi một operator (như ArgoCD) liên tục so sánh trạng thái thực tế của cluster với trạng thái mong muốn được định nghĩa trong Git và tự động điều chỉnh để đạt được sự đồng nhất.
2. ArgoCD xử lý secrets như thế nào?
ArgoCD không mã hóa secrets một cách native. Các giải pháp phổ biến bao gồm: Sealed Secrets (mã hóa secrets với public key, chỉ có thể giải mã trong cluster), SOPS với Age hoặc AWS KMS, External Secrets Operator (đồng bộ secrets từ HashiCorp Vault, AWS Secrets Manager), và Vault Agent Injector.
3. Làm thế nào để rollback với ArgoCD?
Có nhiều phương pháp rollback: sử dụng Git revert để tạo commit mới hoàn tác thay đổi, sử dụng ArgoCD UI/CLI để sync với revision cũ hơn, hoặc cấu hình revision history limit để giữ lại các phiên bản trước đó. Phương pháp Git revert được khuyến nghị vì đảm bảo Git luôn là nguồn chân lý duy nhất.
4. Sync Waves hoạt động như thế nào?
Sync Waves cho phép kiểm soát thứ tự triển khai các tài nguyên. Mỗi tài nguyên có thể được gán một wave number thông qua annotation. ArgoCD sẽ triển khai theo thứ tự wave từ thấp đến cao, chờ mỗi wave hoàn thành và healthy trước khi tiến hành wave tiếp theo. Wave numbers có thể là số âm.
5. ArgoCD ApplicationSet generators có những loại nào?
Các generators phổ biến bao gồm: List (danh sách tĩnh), Cluster (dựa trên registered clusters), Git Directory (dựa trên cấu trúc thư mục), Git File (dựa trên file JSON/YAML), Matrix (kết hợp nhiều generators), và Merge (hợp nhất kết quả từ nhiều generators).
6. Làm thế nào để đảm bảo zero-downtime deployment với ArgoCD?
Kết hợp ArgoCD với Argo Rollouts để thực hiện canary hoặc blue-green deployment. Cấu hình proper readiness và liveness probes, sử dụng PodDisruptionBudget, và đảm bảo rolling update strategy được cấu hình đúng trong Deployment manifest.
7. ArgoCD Projects dùng để làm gì?
Projects cung cấp logical grouping và security boundaries cho các Applications. Chúng cho phép định nghĩa: allowed source repositories, allowed destination clusters và namespaces, allowed/denied Kubernetes resources, và RBAC policies riêng cho từng project.
Bắt đầu luyện tập!
Kiểm tra kiến thức với mô phỏng phỏng vấn và bài kiểm tra kỹ thuật.
Kết luận
ArgoCD đã khẳng định vị thế là công cụ GitOps hàng đầu cho Kubernetes với bộ tính năng phong phú và cộng đồng phát triển mạnh mẽ. Qua bài viết này, các điểm quan trọng cần ghi nhớ bao gồm:
- Application manifest là đơn vị cơ bản định nghĩa mối quan hệ giữa Git repository và Kubernetes cluster
- Sync Waves và Hooks cho phép kiểm soát chính xác thứ tự triển khai, đặc biệt quan trọng cho database migrations
- ApplicationSet là giải pháp tối ưu cho multi-cluster và multi-environment deployment
- Cấu trúc repository với Kustomize base/overlays giúp quản lý cấu hình hiệu quả và tái sử dụng cao
- So sánh với Flux cho thấy mỗi công cụ có ưu điểm riêng phù hợp với các nhu cầu khác nhau
- Tính năng mới như Value Globs trong ArgoCD 3.4 tiếp tục cải thiện trải nghiệm người dùng
Việc nắm vững ArgoCD không chỉ giúp triển khai ứng dụng một cách nhất quán và an toàn mà còn là kỹ năng quan trọng được nhiều nhà tuyển dụng đánh giá cao trong lĩnh vực DevOps và Platform Engineering.
Bắt đầu luyện tập!
Kiểm tra kiến thức với mô phỏng phỏng vấn và bài kiểm tra kỹ thuật.
Thẻ
Chia sẻ
Bài viết liên quan

Câu hỏi Phỏng vấn DevOps Thiết yếu: Hướng dẫn Đầy đủ 2026
Chuẩn bị phỏng vấn DevOps với những câu hỏi bắt buộc về CI/CD, Kubernetes, Docker, Terraform và các thực tiễn SRE. Có câu trả lời chi tiết.

Phong van Kubernetes: Giai thich chi tiet Pods, Services va Deployments
Cac cau hoi phong van Kubernetes ve Pods, Services va Deployments — voi vi du YAML, co che networking noi bo va chien luoc scaling cho nam 2026.

Kubernetes: Triển khai ứng dụng đầu tiên
Hướng dẫn thực hành để triển khai ứng dụng trên Kubernetes. Từ cài đặt minikube đến Deployments, Services và ConfigMaps với các ví dụ cụ thể.