LAB CI/CD sử dụng GitHub Actions và ArgoCD

JustinJustin
6 min read

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:

  1. 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

  2. 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

  3. 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

  1. Truy cập IAM > Roles > Create role

  2. Chọn "AWS service" và chọn "EKS" làm dịch vụ

  3. Chọn "EKS Cluster" làm trường hợp sử dụng

  4. Gắn chính sách "AmazonEKSClusterPolicy"

  5. Đặt tên cho role của bạn (ví dụ: "EKSClusterRole") và tạo nó

1.3 Tạo cụm EKS

  1. Mở bảng điều khiển Amazon EKS

  2. Nhấp vào "Add cluster" > "Create"

  3. Chọn "Custom configuration" và tắt "Use EKS Auto Mode"

  4. 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

  5. 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
  6. 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)

  7. 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

  8. 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>
  1. Kiểm tra kết nối:
bashCopykubectl get svc

1.4 Tạo Node Group cho EKS

  1. Trong bảng điều khiển EKS, chọn cụm của bạn

  2. Chuyển đến phần "Compute" > "Node groups"

  3. Nhấp vào "Add node group"

  4. 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

  5. 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

  1. Tạo kho lưu trữ "application" để lưu trữ mã nguồn ứng dụng

  2. 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)

  1. Truy cập Settings > Developer Settings

  2. Chọn Personal access tokens > Tokens (classic) > Generate new token

  3. 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ư)

  4. Nhấp vào "Generate token"

  5. 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

  1. Truy cập vào kho lưu trữ ứng dụng

  2. Chuyển đến Settings > Secrets and variables > Actions > New repository secret

  3. 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

  1. Chuyển tiếp cổng ArgoCD:
bashCopykubectl -n argocd port-forward svc/argocd-server -n argocd 8080:443
  1. Đă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 đó

  2. Nhấp vào biểu tượng cài đặt (bánh răng) > Repositories > Connect Repo using HTTPS

  3. Điền thông tin kho lưu trữ:

  4. Nhấp vào "Connect" để thêm kho lưu trữ

3.7 Tạo ứng dụng ArgoCD

  1. 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

  2. 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)

  3. 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)

  4. 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.

0
Subscribe to my newsletter

Read articles from Justin directly inside your inbox. Subscribe to the newsletter, and don't miss out.

Written by

Justin
Justin