Ứng dụng CI/CD và GitOps trong triển khai Microservices trên Kubernetes

Application of CI/CD and GitOps in Deploying Microservices on Kubernetes

Nghiên cứu này nhằm mục đích xây dựng hệ thống CI/CD giúp tự động hóa quá trình xây dựng, kiểm thử và triển khai phần mềm, từ đó giảm thiểu lỗi con người và rút ngắn thời gian phát hành. Nhằm để quản lý toàn bộ hệ thống hạ tầng và ứng dụng, đảm bảo tính nhất quán, truy vết và rollback dễ dàng. Để đạt được mục tiêu ấy, nhóm chúng em đã ứng dụng CI/CD và GitOps để triển khai trên nền tảng Kubernetes, thông qua mô hình kiến trúc tổng quan, công cụ điển hình như ( ArgoCD, Helm, GKE,…) và một hệ thống demo thực tế sẽ được dùng cho mục đích công việc sau này.

TÁC GIẢ

Nguyễn Đăng Minh Hiếu, Dương Quốc Hưng

GIẢNG VIÊN HƯỚNG DẪN

NGÀNH

Năm:

TỔNG QUAN ĐỀ TÀI

Trong kỷ nguyên của điện toán đám mây và phát triển phần mềm hiện đại theo cấu trúc Microservices ngày càng phổ biến nhờ tính hoạt, khả năng mở rộng và dễ dàng triển khai độc lập từng thành phần nhanh chóng. Kiến trúc Microservices đã trở thành một xu hướng nổi bật, giúp chia nhỏ ứng dụng thành nhiều dịch vụ độc lập, dễ dàng phát triển, kiểm thử và triển khai riêng biệt.

Tuy nhiên, việc quản lý và triển khai hệ thống Microservices với hàng chục đến hàng trăm dịch vụ không phải là điều đơn giản. Các thao tác triển khai thủ công dễ dẫn dến lỗi, thiếu đồng bộ và khó kiểm soát khi hệ thống ngày càng mở rộng.

Để giải quyết vấn đề này, các phương pháp như CI/CD (Continuous Integration/ Continuous Deployment) ra đời nhằm tự động hóa quá trình xây dựng, kiểm thử và triển khai phần mềm. Đồng thời, GitOps, một hình mở rộng của DevOps, giúp quản lý cấu hình hạ tầng và triển khai ứng dụng một cách nhất quán thông qua Git. Bên cạnh đó, Kubernetes đã trở thành nền tảng điều phối container phổ biến nhất hiện nay, được sử dụng rộng rãi trong việc triển khai và quản lý Microservices nhờ khả năng tự động hóa, mở rộng và khôi phục lỗi linh hoạt.

Chính vì vậy, việc nghiên cứu và ứng dụng CI/CD kết hợp với GitOps trong triển khai Microservices trên Kubernetes không chỉ giúp nâng cao hiệu suất phát triển phần mềm, mà còn đảm bảo tính ổn định, minh bạch và khả năng mở rộng của hệ thống. Đây cũng là một hướng tiếp cận hiện đại, phù hợp với yêu cầu thực tiễn trong phát triển phần mềm hiện nay.

Mục tiêu nghiên cứu

Mục tiêu chính của đề tài là tìm hiểu và ứng dụng các kỹ thuật CI/CD và GitOps vào quá trình triển khai hệ thống Microservices trên nền tảng Kubernetes. Thông qua đề tài này, nhóm em mong muốn:

  • Hiểu rõ nguyên lý hoạt động và lợi ích của CI/CD và GitOps trong môi trường phát triển phần mềm hiện đại.
  • Xây dựng quy trình triển khai tự động từ mã nguồn đến môi trường vận hành thực tế (production).
  • Áp dụng GitOps để quản lý và đồng bộ cấu hình hệ thống một cách nhất quán và có thể kiểm soát dễ dàng.
  • Thực hiện một mô hình demo triển khai hệ thống Microservices sử dụng các công cụ phổ biến như Argo CD, GitHub Action, Terraform, Docker, và Kubernetes.

Thông qua quá trình thực hiện, đề tài không chỉ mang tính học thuật mà còn hướng đến thực tiễn, giúp tụi em hình dung được cách triển khai các mô hình DevOps hiện đại tại doanh nghiệp.

Đối tượng nghiên cứu

Đối tượng nghiên cứu của đề tài bao gồm:

  • Các công cụ và quy trình CI/CD, đặc biệt là GitHub Actions, ArgoCD .
  • Mô hình GitOps và cách vận hành thông qua công cụ như Argo CD .
  • Hệ thống Kubernetes – nền tảng điều phối container, nơi triển khai và vận hành các Microservices.
  • Cấu trúc và hoạt động của kiến trúc Microservices, đặc biệt là các đặc trưng trong quá trình triển khai và quản lý.

Phạm vi nghiên cứu

Đề tài tập trung vào việc tích hợp CI/CD và GitOps để triển khai một hệ thống microservices mô phỏng trên môi trường Kubernetes. Phạm vi không bao gồm:

  • Tối ưu hiệu năng từng microservice ở mức độ code chi tiết.
  • Bảo mật nâng cao cho toàn bộ pipeline (chỉ dừng ở mức cấu hình cơ bản).
  • Quản lý hệ thống Kubernetes ở quy mô lớn (đa cluster, đa vùng địa lý).
    Môi trường thực hiện chủ yếu là dịch vụ cloud miễn phí cụ thể là Google Computing Services, đảm bảo có thể triển khai được hệ thống mẫu nhưng không yêu cầu chi phí cao.

Phương pháp nghiên cứu

Để thực hiện đồ án này, em đã áp dụng phương pháp nghiên cứu thực nghiệm kết hợp với phân tích dữ liệu. Quá trình nghiên cứu được chia thành các bước chính sau:

  • Tìm hiểu lý thuyết và công nghệ nền tảng
  • Lựa chọn công cụ và môi trường phù hợp.
  • Xây dựng kiến trúc hệ thống và quy trình triển khai.
  • Triển khai và thử nghiệm thực tế.
  • Đánh giá và rút ra kết luận.

PHÂN TÍCH THIẾT KẾ HỆ THỐNG

Kiến trúc tổng thể hệ thống

image 60

Giải thích về các thành phần trong hệ thống:

  • Developer: Phát triển và đẩy mã nguồn lên Source repo
  • CI Pipeline: Tự động xây Docker image, đẩy image lên Dockerhub và cập nhật các file cấu hình trên Config repo
  • ArgoCD: Quan sát các thay đổi trên Config repo và tự động áp dụng các thay đổi trên GKE Cluster
  • GKE Cluster: Chạy các pod và logs được thu thập bởi Fluentd
  • Fluentd: Thu thập logs và gửi đến Elasticsearch
  • Elasticsearch và Kibana: Lưu trữ và hiển thị logs
  • Prometheus và Grafana: Thu thập và mô hình hóa các metrics, đồng thời gửi các cảnh báo thông qua Alertmanager

Quy trình hoạt động của hệ thống:

  • Lập trình viên đẩy mã nguồn lên GitHub Source Repo trên nhánh Dev
  • GitHub Actions sẽ xây dựng Docker image cho các thay đổi, cập nhật image tag và đẩy lên Registry là Dockerhub.
  • Sau khi các thay đổi được xem xét và merge vào nhánh Main, GitHub Actions sẽ cập nhật image tags mới nhất cho Config repo
  • ArgoCD sẽ lắng nghe các thay đổi trên Config repo và tự động áp dụng các thay đổi lên GKE Cluster
  • Ứng dụng được chạy trên GKE Cluster, các logs sẽ được thu thập bởi Fluentd, lưu trữ với Elasticsearch và được hiển thị bằng Kibana (EFK stack)
  • GKE Cluster được giám sát và thiếp lập cảnh báo với Prometheus và Grafana.

Kiến trúc ứng dụng Microservices

Thành phần và luồng dữ liệu

  • Kiến trúc ứng dụng Bookstore được xây dựng theo mô hình Microservices, kết hợp frontend-backend tách biệt nhằm đảm bảo tính linh hoạt, dễ dàng mở rộng và bảo trì.
  • Phần Frontend sử dụng React kết hợp với Vite, hỗ trợ cả render phía server và client, giúp đảm bảo tốc độ tải trang nhanh và dễ dàng tối ưu UI/UX.
  • Phần Backend được phát triển trên nền tảng Python with FastAPI, Nodejs with Express, Go with Gin, chia thành các tác vụ nhỏ (microservices) như:
    o API Gateway (Port 8000): Điểm vào cho tất cả các requests của khách hàng, định tuyến yêu cầu đến các services thích hợp và xử lý xác thực và ủy quyền.
    o Auth Service (Port 8001): Xác thực và ủy quyền người dùng, đăng ký người dùng và quản lý hồ sơ, xác minh email và chức năng đặt lại mật khẩu.
    o Book Service (Port 8002): Quản lý danh mục sách, tìm kiếm và lọc sách, chi tiết và đánh giá sách.
    o Cart Service (Port 8003): Quản lý giỏ hàng, thêm/xóa sản phẩm khỏi giỏ hàng, cập nhật số lượng sản phẩm và lưu trữ giỏ hàng.
  • Hệ thống cũng tích hợp các dịch vụ hỗ trợ như:
    o Prometheus+Grafana: Dùng để giám sát hiệu suất hệ thống, tạo dashboard trực quan.
    o Elk Stack: Để giám sát logs của cluster, pods, request của clients.
  • Tất cả các thành phần đều được container hóa bằng Docker, sau đó triển khai lên cụm Kubernetes (Google Cloud Platform). Việc triển khai và cấu hình hạ tầng được thực hiện tự động thông qua:
    o Terraform để quản lý hạ tầng dạng code (Infrastructure as Code).
    o ArgoCD đảm nhiệm việc tự động triển khai ứng dụng lên Kubernetes.
  • Kiến trúc này đảm bảo tính hiện đại, mở rộng, hiệu quả trong triển khai và các công nghệ mới vào trải nghiệm người dùng.
image 61
image 62

KẾT LUẬN

Trong khuôn khổ đồ án, nhóm chúng em đã nghiên cứu và xây dựng thành công một quy trình triển khai ứng dụng microservices trên nền tảng Kubernetes, kết hợp giữa CI/CD và GitOps nhằm tối ưu hoá quy trình phát triển và vận hành phần mềm. Việc tích hợp các công cụ như GitHub Actions, ArgoCD cùng với hệ thống quản lý cấu hình và container hóa đã giúp đảm bảo tính tự động, tái lập và an toàn trong triển khai. Mô hình đề xuất không chỉ rút ngắn thời gian từ khâu phát triển đến triển khai mà còn hỗ trợ kiểm soát thay đổi tốt hơn, giảm thiểu rủi ro và tăng cường khả năng mở rộng hệ thống.

Thông qua đồ án này, nhóm chúng em đã có cơ hội tiếp cận và thực hành các công nghệ hiện đại trong lĩnh vực DevOps và Cloud Native, góp phần tạo nền tảng vững chắc cho việc ứng dụng vào các dự án thực tế trong tương lai. Tuy nhiên, đồ án vẫn còn một số hạn chế nhất định. Trong tương lai, nhóm dự định sẽ khắc phục các vấn đề còn đang gặp phải, đồng thời sẽ phát triển thêm các tính năng như sử dụng Kyverno hoặc OPA để kiểm soát chính sách bảo mật, và mở rộng mô hình GitOps để hỗ trợ triển khai đa môi trường (multi-environment deployments). Ngoài ra, việc áp dụng các công nghệ như progressive delivery (canary, blue-green) sẽ được xem xét nhằm nâng cao tính an toàn và linh hoạt trong quá trình triển khai.