0

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 admin ban đầu.
  • Kiểm tra ArgoCD bằng kubectl và 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
  • kubectl
  • helm — 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 admin vớ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.

ArgoCD Documentation


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

Viblo
Hãy đăng ký một tài khoản Viblo để nhận được nhiều bài viết thú vị hơn.
Đăng kí