Tổng quan
Bài lab này hướng dẫn bạn thiết lập một quy trình CI/CD hoàn chỉnh sử dụng GitHub Actions và ArgoCD để triển khai ứng dụng vào cụm Kubernetes. Quy trình này tự động hóa việc xây dựng, kiểm thử và triển khai ứng dụng mỗi khi có thay đổi được đẩy lên các kho lưu trữ của bạn.
Kiến trúc
Quy trình CI/CD bao gồm ba thành phần chính:
Hai kho lưu trữ GitHub:
Kho lưu trữ ứng dụng (Application Repository): Lưu trữ mã nguồn ứng dụng, Dockerfile, và các quy trình làm việc GitHub Actions
Kho lưu trữ manifest (Manifest Repository): Lưu trữ các tệp YAML Kubernetes mà ArgoCD sẽ sử dụng để triển khai ứng dụng
GitHub Actions:
Tự động xây dựng các Docker image khi có thay đổi được đẩy lên Kho lưu trữ ứng dụng
Cập nhật các thẻ image trong Kho lưu trữ manifest
ArgoCD:
Liên tục giám sát Kho lưu trữ manifest
Tự động áp dụng các thay đổi vào cụm Kubernetes
Phần 1: Thiết lập môi trường
1.1 Cài đặt các công cụ cần thiết
AWS CLI
bashCopy# Làm theo hướng dẫn cài đặt tại:
# https://docs.aws.amazon.com/cli/latest/userguide/getting-started-install.html
kubectl
bashCopy# Cho Linux:
# https://kubernetes.io/docs/tasks/tools/install-kubectl-linux/
# Cho macOS:
# https://kubernetes.io/docs/tasks/tools/install-kubectl-macos/
# Cho Windows:
# https://kubernetes.io/docs/tasks/tools/install-kubectl-windows/
Helm
bashCopy# Làm theo hướng dẫn cài đặt tại:
# https://helm.sh/docs/intro/install/
1.2 Tạo IAM Role cho EKS
Truy cập IAM > Roles > Create role
Chọn "AWS service" và chọn "EKS" làm dịch vụ
Chọn "EKS Cluster" làm trường hợp sử dụng
Gắn chính sách "AmazonEKSClusterPolicy"
Đặt tên cho role của bạn (ví dụ: "EKSClusterRole") và tạo nó
1.3 Tạo cụm EKS
Mở bảng điều khiển Amazon EKS
Nhấp vào "Add cluster" > "Create"
Chọn "Custom configuration" và tắt "Use EKS Auto Mode"
Cấu hình chi tiết cụm:
Name: Chọn một tên duy nhất cho cụm của bạn
Cluster IAM role: Chọn vai trò đã tạo ở bước trước
Kubernetes version: Chọn phiên bản được khuyến nghị mới nhất
Để các cài đặt khác ở giá trị mặc định
Cấu hình quyền truy cập cụm:
- Giữ cài đặt mặc định cho quyền truy cập quản trị viên bootstrap
Cấu hình mạng:
Chọn một VPC thích hợp với ít nhất hai subnet
Chọn "IPv4" cho địa chỉ IP
Chọn cách truy cập điểm cuối cụm phù hợp với nhu cầu (Public, Private hoặc kết hợp)
Xem lại và tạo cụm:
Kiểm tra lại tất cả các cài đặt
Nhấp vào "Create" để bắt đầu triển khai
Tạo tệp kubeconfig để kết nối với cụm:
bashCopyaws eks update-kubeconfig --region <mã-vùng> --name <tên-cụm>
- Kiểm tra kết nối:
bashCopykubectl get svc
1.4 Tạo Node Group cho EKS
Trong bảng điều khiển EKS, chọn cụm của bạn
Chuyển đến phần "Compute" > "Node groups"
Nhấp vào "Add node group"
Cấu hình Node Group:
Đặt tên cho Node Group
Tạo và chọn IAM role được đề xuất
Cấu hình khả năng mở rộng:
Desired size: Số lượng node mong muốn
Minimum size: Số lượng node tối thiểu
Maximum size: Số lượng node tối đa
Xem lại và tạo Node Group
Phần 2: Cài đặt các công cụ cần thiết trên cụm EKS
2.1 Cài đặt Ingress Nginx Controller
bashCopyhelm repo add ingress-nginx https://kubernetes.github.io/ingress-nginx
helm repo update
helm install ingress-nginx ingress-nginx/ingress-nginx --namespace ingress-nginx --create-namespace
2.2 Cài đặt ArgoCD
bashCopy# Tạo namespace cho ArgoCD
kubectl create ns argocd
# Cài đặt ArgoCD
kubectl -n argocd apply -f https://raw.githubusercontent.com/argoproj/argo-cd/stable/manifests/install.yaml
# Lấy mật khẩu ban đầu (tên người dùng là admin)
kubectl -n argocd get secret argocd-initial-admin-secret -o jsonpath="{.data.password}" | base64 --decode
# Áp dụng cấu hình Ingress cho ArgoCD
kubectl -n argocd apply -f https://raw.githubusercontent.com/200lab-Education/kubernetes/refs/heads/master/simple-template/argocd-ingress.yaml
Phần 3: Cấu hình GitHub Repositories và Actions
3.1 Tạo hai kho lưu trữ GitHub
Tạo kho lưu trữ "application" để lưu trữ mã nguồn ứng dụng
Tạo kho lưu trữ "manifest" để lưu trữ tệp cấu hình Kubernetes
3.2 Cấu hình kho lưu trữ ứng dụng
Bạn có thể sử dụng mã nguồn mẫu từ https://github.com/200lab-Education/doa-cicd hoặc bất kỳ mã nguồn nào có thể được xây dựng bằng Docker.
3.3 Cấu hình kho lưu trữ manifest
Bạn có thể sử dụng mã nguồn mẫu từ https://github.com/200lab-Education/kubernetes/
3.4 Tạo GitHub Personal Access Token (PAT)
Truy cập Settings > Developer Settings
Chọn Personal access tokens > Tokens (classic) > Generate new token
Cấu hình token:
Note: Đặt tên cho token (ví dụ: "update-manifest")
Expiration: Chọn thời gian hết hạn
Scopes: Chọn "repo" (Quyền kiểm soát đầy đủ đối với kho lưu trữ riêng tư)
Nhấp vào "Generate token"
Sao chép token được tạo (lưu ý: bạn sẽ không thể xem lại token sau khi rời khỏi trang)
3.5 Tạo GitHub Secrets
Truy cập vào kho lưu trữ ứng dụng
Chuyển đến Settings > Secrets and variables > Actions > New repository secret
Tạo các secret sau:
ACCESS_TOKEN: Giá trị là token bạn đã tạo
GITHUB_USERNAME: Tên người dùng GitHub của bạn
DOCKER_USERNAME: Tên người dùng Docker Hub của bạn
DOCKER_PASSWORD: Mật khẩu Docker Hub của bạn
3.6 Kết nối kho lưu trữ với ArgoCD
- Chuyển tiếp cổng ArgoCD:
bashCopykubectl -n argocd port-forward svc/argocd-server -n argocd 8080:443
Đăng nhập vào ArgoCD thông qua http://localhost:8080 với tên người dùng "admin" và mật khẩu đã lấy trước đó
Nhấp vào biểu tượng cài đặt (bánh răng) > Repositories > Connect Repo using HTTPS
Điền thông tin kho lưu trữ:
Type: Git
Repository URL: URL của kho lưu trữ manifest (ví dụ: https://github.com/your-username/manifest.git)
Username: Tên người dùng GitHub của bạn
Password/Token: Token GitHub PAT của bạn
Nhấp vào "Connect" để thêm kho lưu trữ
3.7 Tạo ứng dụng ArgoCD
Nhấp vào "New App" và điền các thông tin:
Application Name: Đặt tên cho ứng dụng
Project: Chọn "default"
Sync Policy: Chọn "Automatic" để tự động đồng bộ khi phát hiện thay đổi
Cấu hình nguồn:
Repository URL: URL của kho lưu trữ manifest
Revision: Branch muốn theo dõi (ví dụ: master)
Path: Đường dẫn đến thư mục chứa tệp manifest (ví dụ: argocd)
Cấu hình đích:
Cluster: Chọn cụm Kubernetes đã được kết nối
Namespace: Không gian tên trong Kubernetes nơi ứng dụng sẽ được triển khai (ví dụ: default)
Nhấp vào "Create" để tạo ứng dụng
Kết luận
Sau khi hoàn thành các bước trên, bạn đã thiết lập thành công một quy trình CI/CD hoàn chỉnh. Khi bạn đẩy các thay đổi lên kho lưu trữ ứng dụng, GitHub Actions sẽ tự động xây dựng Docker image và cập nhật kho lưu trữ manifest. Sau đó, ArgoCD sẽ phát hiện những thay đổi này và tự động triển khai ứng dụng đã cập nhật vào cụm Kubernetes của bạn.
Quy trình này giúp đảm bảo rằng việc triển khai luôn đồng bộ với mã nguồn mới nhất, giảm thiểu lỗi thủ công và tăng tốc độ phát triển phần mềm.