Lab 3 — Install ArgoCD
🎯 Mục tiêu
Sau lab này, bạn sẽ:
- Hiểu ArgoCD nằm ở đâu trong kiến trúc GitOps.
- Cài đặt ArgoCD lên Kubernetes Cluster.
- Truy cập được ArgoCD Web UI.
- Biết cách lấy mật khẩu
adminban đầu. - Kiểm tra ArgoCD bằng
kubectlvà CLI. - Hiểu các thành phần chính của ArgoCD thay vì chỉ biết cách chạy lệnh cài đặt.
🤔 1. Vấn đề thực tế
Ở các lab Kubernetes trước, chúng ta thường deploy application bằng:
kubectl apply -f deployment.yaml
Cách này hoạt động tốt khi học Kubernetes.
Nhưng hãy tưởng tượng bạn có:
20 Applications
3 Environments
5 Kubernetes Clusters
Developer liên tục thay đổi:
Deployment
Service
ConfigMap
Ingress
Helm values
...
Nếu một người phải tự chạy:
kubectl apply ...
kubectl apply ...
kubectl apply ...
thì rất dễ xảy ra:
- Deploy nhầm version.
- Quên deploy một file.
- Kubernetes khác với trạng thái trong Git.
- Khó biết ai đã deploy.
- Không có cơ chế tự động khôi phục khi resource bị thay đổi ngoài ý muốn.
Đây chính là vấn đề GitOps muốn giải quyết.
GitOps + ArgoCD
Thay vì:
Developer
│
│ kubectl apply
▼
Kubernetes
chúng ta muốn:
Developer
│
│ git push
▼
Git Repository
│
│ ArgoCD detects change
▼
ArgoCD
│
│ Sync
▼
Kubernetes
ArgoCD là thành phần đứng giữa Git Repository và Kubernetes, chịu trách nhiệm đảm bảo Kubernetes tiến tới trạng thái được khai báo trong Git.
Ở Lab này chúng ta chưa deploy Application bằng ArgoCD. Mục tiêu trước tiên là cài và hiểu ArgoCD.
🧠 2. Hiểu nhanh về ArgoCD
2.1. ArgoCD là gì?
ArgoCD là một GitOps Continuous Delivery tool dành cho Kubernetes.
Nói đơn giản:
Git nói Kubernetes nên như thế nào, ArgoCD đảm bảo Kubernetes thực sự giống như vậy.
Ví dụ Git chứa:
replicas: 3
image: my-app:v2
ArgoCD sẽ theo dõi trạng thái Kubernetes.
Nếu Kubernetes đang là:
replicas: 2
image: my-app:v1
ArgoCD phát hiện:
Git: v2 / 3 replicas
│
│ Difference
▼
Kubernetes: v1 / 2 replicas
Sau đó ArgoCD có thể Sync để đưa Kubernetes về trạng thái trong Git.
2.2. ArgoCD không phải CI
Đây là điểm người mới rất dễ nhầm.
CI thường làm:
Code
↓
Build
↓
Test
↓
Docker Image
Ví dụ:
GitHub Actions
Trong khi ArgoCD tập trung vào:
GitOps Repository
↓
ArgoCD
↓
Kubernetes
Một pipeline thực tế có thể là:
Developer
│
│ git push
▼
GitHub
│
▼
GitHub Actions
│
├── Test
├── Build
└── Push Docker Image
│
▼
Container Registry
│
▼
GitOps Repository
│
▼
ArgoCD
│
▼
Kubernetes
CI build application. ArgoCD deploy application.
🏗️ 3. Architecture
Sau khi cài đặt, kiến trúc cơ bản sẽ như sau:
Git Repository
│
│
│ GitOps
▼
┌─────────────────┐
│ ArgoCD │
│ │
│ Application │
│ Controller │
│ Repo Server │
│ API Server │
└────────┬────────┘
│
│ Sync
▼
┌─────────────────┐
│ Kubernetes │
│ │
│ Deployment │
│ Service │
│ ConfigMap │
│ Ingress │
└─────────────────┘
Ở lab này, chúng ta mới triển khai:
Kubernetes
│
└── ArgoCD
Git Repository sẽ được sử dụng ở các lab tiếp theo.
🛠️ 4. Chuẩn bị môi trường
Lab sử dụng:
- Kubernetes Cluster
kubectlhelm— tùy cách cài đặt- macOS/Linux
Kiểm tra Kubernetes:
kubectl cluster-info
Sau đó:
kubectl get nodes
Kết quả mong muốn:
NAME STATUS ROLES AGE
minikube Ready control-plane ...
Nếu node đang Ready, chúng ta có thể tiếp tục.
🚀 5. Cài đặt ArgoCD
5.1. Tạo namespace
🧠 Explain
ArgoCD là một hệ thống tương đối lớn, vì vậy chúng ta không nên cài các resource của nó trực tiếp vào namespace default.
Thông thường chúng ta tạo namespace riêng:
argocd
▶️ Do
kubectl create namespace argocd
Kiểm tra:
kubectl get namespace argocd
👀 See Result
NAME STATUS AGE
argocd Active ...
🧠 Understand
Bây giờ Kubernetes đã có một khu vực riêng để chứa toàn bộ thành phần của ArgoCD.
📦 6. Install ArgoCD
6.1. Cài bằng Kubernetes Manifest
Đây là cách đơn giản nhất để bắt đầu học ArgoCD.
▶️ Do
kubectl apply -n argocd \
-f https://raw.githubusercontent.com/argoproj/argo-cd/stable/manifests/install.yaml
Kubernetes sẽ tạo nhiều resource.
Kiểm tra:
kubectl get pods -n argocd
👀 6.2. See Result
Bạn có thể thấy:
NAME READY STATUS
argocd-application-controller-xxxxx 1/1 Running
argocd-applicationset-controller-xxxxx 1/1 Running
argocd-dex-server-xxxxx 1/1 Running
argocd-notifications-controller-xxxxx 1/1 Running
argocd-redis-xxxxx 1/1 Running
argocd-repo-server-xxxxx 1/1 Running
argocd-server-xxxxx 1/1 Running
Tên Pod có thể khác tùy version.
Điều quan trọng là:
STATUS = Running
READY = 1/1
🧩 7. Hiểu các thành phần của ArgoCD
Không cần nhớ tất cả ngay.
Ở giai đoạn này, chỉ cần hiểu 4 thành phần quan trọng:
ArgoCD
│
┌────────────┼────────────┐
│ │ │
▼ ▼ ▼
API Server Repo Server Application
Controller
🔹 1. ArgoCD API Server
Đây là nơi:
- Web UI giao tiếp.
- CLI giao tiếp.
- API request đi qua.
Có thể hình dung:
User
│
▼
ArgoCD UI / CLI
│
▼
API Server
🔹 2. Repo Server
Repo Server chịu trách nhiệm lấy configuration từ Git Repository và render chúng.
Ví dụ Git chứa:
deployment.yaml
service.yaml
hoặc:
helm/
Chart.yaml
values.yaml
Repo Server giúp ArgoCD biết:
"Git Repository hiện tại yêu cầu Kubernetes có trạng thái như thế nào?"
🔹 3. Application Controller
Đây là một trong những thành phần quan trọng nhất.
Nó liên tục so sánh:
Desired State
│
│
▼
Git
│
│ Compare
▼
Actual State
│
▼
Kubernetes
Ví dụ:
Git:
replicas = 3
Kubernetes:
replicas = 2
ArgoCD phát hiện:
OutOfSync
Nếu bật Auto Sync, Controller có thể tự động đưa Kubernetes về:
replicas = 3
🔹 4. ApplicationSet Controller
Thành phần này giúp tạo và quản lý nhiều ArgoCD Application tự động.
Ví dụ:
dev
staging
production
Thay vì tạo từng Application thủ công, ApplicationSet có thể giúp sinh chúng từ một template.
Phần này chúng ta sẽ học sâu hơn ở Lab 17.
🔐 8. Lấy mật khẩu ArgoCD
🤔 Tại sao cần làm việc này?
Sau khi cài ArgoCD, chúng ta cần đăng nhập vào Web UI.
ArgoCD tạo sẵn user:
admin
Mật khẩu ban đầu được lưu trong Kubernetes Secret.
▶️ Do
kubectl -n argocd get secret argocd-initial-admin-secret \
-o jsonpath="{.data.password}" | base64 -d
Kết quả sẽ là một chuỗi:
xxxxxxxxxxxxxxxxxxxxxxxx
Đây là mật khẩu tạm thời của:
Username: admin
Password: <giá trị ở trên>
⚠️ Production không nên giữ cách sử dụng
adminvới mật khẩu mặc định lâu dài. Sau khi bootstrap, nên quản lý authentication và RBAC đúng cách.
🌐 9. Truy cập ArgoCD Web UI
🤔 Tại sao dùng Port Forward?
Trong lab local, chúng ta chưa cần tạo LoadBalancer hay Ingress.
Có thể dùng:
localhost
│
│ port-forward
▼
ArgoCD Server
▶️ Do
kubectl port-forward svc/argocd-server -n argocd 8080:443
Giữ terminal này chạy.
Sau đó mở:
https://localhost:8080
Trình duyệt có thể cảnh báo certificate.
Đây là điều bình thường trong môi trường local vì ArgoCD đang sử dụng certificate mặc định.
🔑 10. Đăng nhập
Sử dụng:
Username:
admin
Password:
<password lấy ở bước 8>
Sau khi đăng nhập, bạn sẽ thấy ArgoCD UI.
Ban đầu có thể chưa có Application:
Applications: 0
Điều này hoàn toàn bình thường.
Chúng ta mới chỉ cài ArgoCD.
🔍 11. Kiểm tra ArgoCD bằng CLI
11.1. Kiểm tra version
Nếu máy đã có ArgoCD CLI:
argocd version --client
Nếu chưa có, bạn có thể cài CLI theo hướng dẫn chính thức của ArgoCD.
11.2. Login
Port-forward vẫn đang chạy:
kubectl port-forward svc/argocd-server -n argocd 8080:443
Login:
argocd login localhost:8080 --username admin --password <PASSWORD> --insecure
Kiểm tra:
argocd account get-user-info
Nếu login thành công, bạn sẽ thấy thông tin user:
Logged In: true
Username: admin
🧪 12. Lab Exercise
Bây giờ hãy tự kiểm tra hệ thống.
Exercise 1 — Kiểm tra ArgoCD
Chạy:
kubectl get pods -n argocd
Yêu cầu:
- Tất cả Pod quan trọng phải
Running. - Không có Pod ở trạng thái
CrashLoopBackOff. - Không có Pod bị
Pending.
Exercise 2 — Kiểm tra Service
kubectl get svc -n argocd
Bạn sẽ thấy các Service như:
argocd-server
argocd-repo-server
argocd-redis
...
Hãy xác định:
Service nào dùng để truy cập ArgoCD UI?
Đáp án:
argocd-server
Exercise 3 — Kiểm tra ArgoCD UI
Chạy:
kubectl port-forward svc/argocd-server -n argocd 8080:443
Sau đó truy cập:
https://localhost:8080
Đăng nhập bằng:
admin
và password lấy từ Secret.
🧯 13. Troubleshooting
❌ 13.1. Pod ArgoCD không Running
Kiểm tra:
kubectl get pods -n argocd
Sau đó xem Pod:
kubectl describe pod <pod-name> -n argocd
Xem log:
kubectl logs <pod-name> -n argocd
Đừng vội restart Pod.
Trước tiên hãy tìm:
Events
Logs
Resource
Image
Network
❌ 13.2. argocd-server không truy cập được
Kiểm tra Service:
kubectl get svc argocd-server -n argocd
Kiểm tra Pod:
kubectl get pods -n argocd
Sau đó thử lại:
kubectl port-forward svc/argocd-server -n argocd 8080:443
❌ 13.3. Quên password
Không cần cài lại ArgoCD.
Lấy lại:
kubectl -n argocd get secret argocd-initial-admin-secret \
-o jsonpath="{.data.password}" | base64 -d
💡 14. Kinh nghiệm thực tế
🔥 14.1. Không nên dùng admin lâu dài
Trong lab:
admin
là đủ.
Trong production, nên sử dụng:
SSO
RBAC
OIDC
LDAP
để kiểm soát:
Ai được login?
Ai được deploy?
Ai được sync?
Ai được delete?
🔥 14.2. ArgoCD không thay thế Git
Một hiểu lầm phổ biến:
"Cài ArgoCD xong thì Kubernetes đã trở thành GitOps."
Chưa.
ArgoCD chỉ là công cụ thực hiện GitOps.
Một hệ thống GitOps hoàn chỉnh cần:
Git
│
│ Desired State
▼
ArgoCD
│
│ Reconcile
▼
Kubernetes
Ở Lab 3 chúng ta mới hoàn thành:
┌──────────────┐
│ ArgoCD │
└──────┬───────┘
│
▼
┌──────────────┐
│ Kubernetes │
└──────────────┘
Lab tiếp theo mới bắt đầu đưa Git Repository vào flow.
🧠 15. Tổng kết
Điều quan trọng nhất của Lab này không phải là nhớ:
kubectl apply -f ...
mà là hiểu ArgoCD đang làm nhiệm vụ gì.
Trước ArgoCD
Developer
│
│ kubectl apply
▼
Kubernetes
Developer phải chủ động deploy.
Sau khi sử dụng GitOps + ArgoCD
Developer
│
│ git push
▼
Git
│
▼
ArgoCD
│
│ reconcile
▼
Kubernetes
Git trở thành Source of Truth.
ArgoCD liên tục quan sát sự khác biệt giữa:
Desired State
vs
Actual State
và có thể đưa Kubernetes trở lại trạng thái mong muốn.
📝 16. Checklist hoàn thành Lab
- [ ] Hiểu ArgoCD giải quyết vấn đề gì.
- [ ] Hiểu sự khác nhau giữa CI và ArgoCD.
- [ ] Tạo namespace
argocd. - [ ] Cài đặt ArgoCD.
- [ ] Kiểm tra ArgoCD Pods.
- [ ] Lấy được initial admin password.
- [ ] Truy cập được ArgoCD Web UI.
- [ ] Login được bằng ArgoCD CLI.
- [ ] Hiểu vai trò của API Server, Repo Server và Application Controller.
- [ ] Hiểu rằng GitOps chưa hoàn chỉnh nếu chưa có Git làm Source of Truth.
Lab tiếp theo: chúng ta sẽ đưa Kubernetes Manifest vào Git Repository và tạo ArgoCD Application đầu tiên, từ đó thấy được flow thực tế: Git → ArgoCD → Kubernetes.
All rights reserved