Chuyển tới nội dung

Cài đặt Argo CD trên Kubernetes (K8S) chi tiết từng bước

Argo CD là gì? Tại sao nên dùng trong GitOps?

Argo CD là một công cụ Continuous Delivery (CD) dành cho Kubernetes, được xây dựng theo triết lý GitOps. Thay vì bạn phải tự chạy lệnh kubectl apply thủ công, Argo CD sẽ đồng bộ (sync) trạng thái thực tế của cluster với trạng thái mong muốn được khai báo trong Git repository.

Điều quan trọng cần nhớ:

  • Argo CD chỉ làm CD – nó không build image, không chạy test.
  • CI (build image, chạy test, push image…) bạn thường dùng Jenkins, GitLab CI, GitHub Actions… để làm.
  • Argo CD sẽ pull manifest từ Git và tự động deploy/update ứng dụng lên cluster K8S.

Trong bài viết này, chúng ta tập trung vào cách cài đặt Argo CD trên Kubernetes và cấu hình cơ bản để truy cập giao diện Web.

Yêu cầu trước khi cài đặt Argo CD trên K8S

Trước khi bắt đầu, bạn cần chuẩn bị:

  • Một cụm Kubernetes cluster đã hoạt động (tối thiểu 1 master, 2 worker).
  • Đã cài kubectl và kết nối được với cluster (file ~/.kube/config hoạt động bình thường).
  • Đã cấu hình CoreDNS và kiểm tra lại bằng lệnh:
kubectl get pods -n kube-system
  • Nên có sẵn Ingress Nginx nếu bạn muốn truy cập Argo CD qua domain (có thể xem lại bài hướng dẫn Ingress của bạn).

Bước 1 – Tạo namespace và cài đặt Argo CD với kubectl

Trên node master (hoặc bất kỳ máy nào cài kubectl trỏ vào cluster), bạn chạy:

kubectl create namespace argocd
kubectl apply -n argocd -f https://raw.githubusercontent.com/argoproj/argo-cd/stable/manifests/install.yaml

Lệnh trên sẽ:

  • Tạo namespace argocd.
  • Deploy toàn bộ các thành phần Argo CD (API server, repo server, application controller, server UI…) vào namespace này.

Bước 2 – Kiểm tra các thành phần Argo CD trong cluster

Sau khi apply manifest, bạn kiểm tra lại pod:

kubectl get all -n argocd

Hãy đợi đến khi tất cả pod chuyển sang trạng thái Running hoặc Ready.

Nếu có pod bị lỗi CrashLoopBackOff hoặc ImagePullBackOff, hãy kiểm tra lại:

  • Kết nối internet của node.
  • Quyền pull image từ Docker Hub hoặc registry tương ứng.

Bước 3 – Expose Argo CD Server qua NodePort hoặc Ingress

Mặc định, service argocd-server là kiểu ClusterIP nên chỉ truy cập được bên trong cluster. Để dùng giao diện web từ bên ngoài, bạn có thể:

  1. Đổi sang NodePort:
kubectl patch svc argocd-server -n argocd -p '{
  "spec": {
    "type": "NodePort",
    "ports": [
      {
        "name": "https",
        "port": 443,
        "targetPort": 8080,
        "nodePort": 32141
      }
    ]
  }
}'
  1. Hoặc tạo Ingress trỏ đến service argocd-server (kết hợp với Ingress Nginx)
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
  name: argocd-ingress
  namespace: argocd #
  annotations:
    # Tells Ingress Controller the backend protocol is HTTP
    nginx.ingress.kubernetes.io/backend-protocol: "HTTP"
    # ENABLE gRPC: Required for Argo CD CLI and some UI features
    nginx.ingress.kubernetes.io/grpc-backend: "true"
spec:
  ingressClassName: nginx # Based on your K8s cluster configuration
  rules:
  - host: "argocd.diendo.pro.vn"
    http:
      paths:
      - path: /
        pathType: Prefix
        backend:
          service:
            name: argocd-server # Service name from Rancher
            port:
              number: 80 # HTTP port of the service

Do ta đang chạy ssl bằng self-cert lên ta sẽ cấu hình đẻ cho phép inscure chạy bằng lệnh

kubectl patch configmap argocd-cmd-params-cm -n argocd -p '{"data":{"server.insecure":"true"}}'

Và tiến hành Khởi động lại (Restart) Argo CD Server

kubectl rollout restart deployment argocd-server -n argocd

Gợi ý: Nếu đang lab trong mạng nội bộ, dùng NodePort là nhanh nhất. Nếu chạy production, hãy dùng Ingress kèm TLS.

Bước 4 – Lấy mật khẩu admin mặc định của Argo CD

Sau khi Argo CD chạy xong, tài khoản mặc định là:

  • Username: admin
  • Password: lưu trong secret argocd-initial-admin-secret.

Bạn lấy password bằng lệnh:

kubectl get secret -n argocd argocd-initial-admin-secret \
  -o jsonpath="{.data.password}" | base64 -d && echo

Copy password này và lưu lại để sử dụng ở bước đăng nhập.

Bước 5 – Đăng nhập giao diện Web UI của Argo CD

Nếu bạn expose bằng NodePort port 30080, với IP node là 10.100.1.22, bạn truy cập:

https://10.100.1.22:32141

Hoặc nếu dùng domain + Ingress (ví dụ https://argocd.your-domain.com) thì truy cập theo domain tương ứng.

Tại màn hình login:

  • Username: admin
  • Password: password vừa lấy ở bước trên.

Đăng nhập thành công, bạn sẽ thấy dashboard của Argo CD, từ đây có thể:

  • Tạo Application mới trỏ đến Git repo chứa manifest Helm/Kustomize.
  • Cấu hình Sync policy (tự động hay manual).
  • Theo dõi trạng thái deploy của ứng dụng trên các namespace/cluster khác nhau.

Bước 6 – Cấu hình trên Cloudflare zero trust:

  • Tại cloudflare zero trust phần server tiến hành tạo Published application routes cho argocd.
  • Vào Zero trust -> Network -> Tunnel sau đó chọn tunnel và bấm Edit
  • Tại tab Published application routes bạn bấm vào Add a published application routes
  • Sau đó bạn tạo 2 record cho argocd tương ứng có bao nhiêu worker thì bạn tạo bấy nhiêu record. ở đây mình có 2 node woker ip là 10.100.1.22 và 10.100.1.23 như vậy mình lần lượt tạo 2 record trỏ tới 2 worker này.

Kết quả

Kết luận: Sau khi cài Argo CD trên Kubernetes thì làm gì tiếp?

Sau khi hoàn tất việc cài đặt Argo CD trên K8S, các bước tiếp theo bạn nên thực hiện:

  • Kết nối Argo CD với Git repository (GitHub, GitLab…).
  • Tổ chức lại thư mục manifest / Helm chart theo môi trường (dev, staging, prod).
  • Kết hợp với CI tool (Jenkins, GitLab CI, GitHub Actions) để build & push image, sau đó dùng Argo CD làm CD.

Bằng cách tách CICD, bạn có một quy trình GitOps rõ ràng, dễ kiểm soát và rollback an toàn trên Kubernetes.

Liên hệ