Skip to main content

Command Palette

Search for a command to run...

Implementing CI/CD Workflows Using GitHub Actions and ArgoCD

Updated
6 min readView as Markdown
Implementing CI/CD Workflows Using GitHub Actions and ArgoCD

Overview

This lab guides you through setting up a complete CI/CD workflow using GitHub Actions and ArgoCD to deploy applications to a Kubernetes cluster. The process automates building, testing, and deploying applications whenever changes are pushed to your repositories.

Architech

CI/CD process includes three main components:

  1. Two GitHub Repositories:

    • Application Repository: Stores application source code, Dockerfile, and GitHub Actions workflows

    • Manifest Repository: Stores Kubernetes YAML files that ArgoCD will use to deploy the application

  2. GitHub Actions:

    • Automatically builds Docker images when changes are pushed to the Application Repository

    • Updates image tags in the Manifest Repository

  3. ArgoCD:

    • Continuously monitors the Manifest Repository

    • Automatically applies changes to the Kubernetes cluster

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

No.ToolPurposeURL
1AWS CLIA command-line tool for managing AWS services and resources.AWS CLI Installation Guide
2kubectlA command-line tool for controlling Kubernetes clusters.kubectl Installation Guide
3helmA package manager for Kubernetes, used to manage Kubernetes applications.Helm Installation Guide

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ó

💡
Tham khảo bài viết: Cách tạo và phân quyền IAM trên AWS

1.3 Tạo cụm EKS

Để tạo cụm K8S trên AWS chúng ta có nhiều cách

Cách 1: dùng giao diện UI trên AWS

Cách 2: dùng ekscli

Cách 3: dùng terraform

  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:

aws eks update-kubeconfig --region <mã-vùng> --name <tên-cụm>
  1. Kiểm tra kết nối:
kubectl 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

helm 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

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

CICD

Part 1 of 1

More from this blog

Justin Notes

10 posts