Các ý tưởng dự án DevOps thực chiến dành cho trình độ trung cấp

Chào mọi người 👋,

Trong bài viết này, mình sẽ chia sẻ một số ý tưởng dự án mà mình đã thực hành trong hành trình học DevOps của mình. Tất cả các ý tưởng dưới đây đều ở mức độ trung cấp, phù hợp để bạn luyện tập nâng cao kỹ năng thực hành.

Mỗi ý tưởng đều đi kèm liên kết đến repository chứa mã nguồn, giúp bạn dễ dàng bắt đầu. Mình tin rằng phần hướng dẫn này sẽ giúp bạn nắm rõ cách xây dựng dự án từ đầu.

Tất cả dự án đều ở mức độ vừa phải. Hãy cố gắng tự mình triển khai từ đầu nhé. Mình hy vọng chúng sẽ hữu ích trong hành trình học DevOps của bạn và giúp cải thiện kỹ năng thực chiến. Nếu bạn gặp khó khăn khi phát triển các dự án này. Hãy để lại bình luận nơi bạn đang bị vướng mình sẵn sàng hỗ trợ.

Từng dự án với idea cụ thể nhưng mình cũng sẽ dành thời gian làm chi tiết từng dự án thực chiến để cả những bạn chưa có nhiều kinh nghiệm tham khảo và những bạn có kinh nghiệm thêm góc nhìn nha

1. Xây dựng Pipeline CI/CD End-to-End cho ứng dụng Flask dựa trên GitOps

5caf4a1b-f4d0-4deb-92d1-11fee728abad

Tổng quan kiến trúc

Chúng ta sẽ xây dựng một pipeline CI/CD được kích hoạt khi có thao tác push lên nhánh main của repository. Pipeline này sẽ thực hiện các bước: build ứng dụng, chạy test, và triển khai ứng dụng lên cụm Kubernetes theo mô hình GitOps. Toàn bộ pipeline sẽ được triển khai bằng GitHub Actions và ArgoCD.

Kiến trúc hệ thống được mô tả như sau:

Đầu tiên, chúng ta có một repository GitHub chứa mã nguồn của ứng dụng. Repository này được kết nối với GitHub Actions để thực hiện việc build và triển khai.

Khi có một push lên nhánh main, GitHub Actions sẽ được kích hoạt. Workflow sẽ thực hiện:

  • Build ứng dụng
  • Chạy test
  • Build image và đẩy lên Docker Hub
  • Cập nhật tag của image trong Manifest Repository

Manifest Repository là một repository GitHub riêng biệt, chứa các file manifest Kubernetes của ứng dụng. Argo CD sẽ theo dõi repository này để phát hiện thay đổi. Ngay khi image tag trong repository được cập nhật, Argo CD sẽ tự động triển khai phiên bản mới của ứng dụng lên cụm Kubernetes.

  • Link repository dự án: updating…
  • Repository chứa manifest: updating…
  • Link bài viết hướng dẫn chi tiết: updating…

2. Cân bằng tải với Dynamic Inventory bằng Ansible

32dd2ef7-2fd6-4471-a969-7065ed090914

Tổng quan kiến trúc

Chúng ta sẽ sử dụng Ansible để tự động cấu hình các máy chủ EC2 trên AWS. Sau khi các instance được tạo, Ansible sẽ cài đặt Httpd (máy chủ web) lên từng máy. Để cân bằng tải, chúng ta sử dụng HAProxy. Toàn bộ quy trình được tự động hóa, vì vậy bạn chỉ cần chạy các playbook là xong.

Dự án này tập trung vào việc tạo dynamic inventory để thiết lập hệ thống cân bằng tải với Ansible. Trong kiến trúc này:

  • Các máy chủ EC2 của AWS đóng vai trò là các host inventory.
  • HAProxy được sử dụng làm công cụ load balancer.

Quy trình triển khai được chia thành 2 phần:

  1. Tạo dynamic inventory: sử dụng script để tự động truy xuất thông tin các instance EC2 làm danh sách host.
  2. Cập nhật cấu hình HAProxy một cách động: tự động điều chỉnh file cấu hình HAProxy dựa trên danh sách host hiện có.
  • Link repository dự án: updating…
  • Link bài viết hướng dẫn chi tiết: updating…

3. Xây dựng ứng dụng Voting App với Kustomize và Kubernetes

d9be9728-9312-403d-b398-9de6ed4694d1

Tổng quan kiến trúc

Trong dự án này, chúng ta sẽ xây dựng một ứng dụng voting đơn giản cho phép người dùng bình chọn giữa mèo và chó. Đây là ví dụ tiêu chuẩn được cung cấp bởi Docker và rất phù hợp để tìm hiểu cách sử dụng Kustomize trong triển khai trên Kubernetes. (Docker cũng có phiên bản mẫu tương tự sử dụng Docker Swarm nếu bạn muốn tham khảo thêm.)

Ứng dụng Voting App bao gồm các thành phần sau:

  1. Frontend Service: Giao diện web cho phép người dùng bình chọn (mèo hoặc chó). Được phát triển bằng Python Flask.
  2. Redis Service: Lưu trữ tạm thời các lượt bình chọn.
  3. Worker Service: Xử lý các lượt bình chọn và ghi dữ liệu vào cơ sở dữ liệu Postgres.
  4. Postgres Service: Lưu trữ dữ liệu chi tiết các lượt bình chọn như tên con vật và số lượng phiếu.
  5. Result Service: Hiển thị kết quả bình chọn theo thời gian thực. Được phát triển bằng Node.js.

Toàn bộ kiến trúc được triển khai trên Kubernetes, và việc quản lý cấu hình (deployment, service, ingress,…) được thực hiện thông qua Kustomize – giúp tái sử dụng cấu hình theo từng môi trường (dev, staging, production…).

  • Link repository dự án: updating…
  • Link bài viết hướng dẫn chi tiết: updating…

4. Xây dựng Helm Chart cho ứng dụng giao diện quản trị MongoDB từ đầu

bf363673-9dcd-4867-8513-be6b6167e256

Tổng quan kiến trúc

Ứng dụng MongoDB Admin Interface là một giao diện web cho phép người dùng tương tác với cơ sở dữ liệu MongoDB thông qua trình duyệt. Giao diện này hỗ trợ thực hiện các thao tác phổ biến như truy vấn, chèn, cập nhật và xóa dữ liệu một cách trực quan.

Kiến trúc triển khai ứng dụng MongoDB Admin Interface trên Kubernetes bao gồm các thành phần sau:

Triển khai Web Application

  • Sử dụng image mongo-express:latest để triển khai giao diện quản trị.
  • Dùng đối tượng Deployment để đảm bảo khả năng tự động tạo lại pod khi có sự cố. Ngoài ra, Deployment hỗ trợ scale ứng dụng dễ dàng và đảm bảo tính sẵn sàng cao (high availability).
  • Để expose ứng dụng ra bên ngoài cụm, sử dụng Service loại NodePort.

    • NodePort: Là kiểu dịch vụ cho phép truy cập ứng dụng từ bên ngoài Kubernetes cluster thông qua một cổng trên node.

Triển khai Database (MongoDB)

  • Sử dụng image mongo:5.0 để triển khai database MongoDB.
  • Tương tự như ứng dụng, database cũng được triển khai thông qua Deployment để đảm bảo tính tự phục hồi.
  • Giao tiếp giữa database và ứng dụng được thực hiện thông qua Service loại ClusterIP.

    • ClusterIP: Là loại dịch vụ chỉ cho phép truy cập nội bộ trong cluster Kubernetes.

Các tài nguyên Kubernetes bổ trợ

  • Secrets: Lưu trữ các thông tin nhạy cảm như tên đăng nhập và mật khẩu.

  • ConfigMap: Lưu trữ các thông tin cấu hình không nhạy cảm ở dạng key-value, ví dụ URL kết nối tới database.

  • PersistentVolume (PV) và PersistentVolumeClaim (PVC): Dùng để lưu trữ dữ liệu MongoDB nhằm đảm bảo dữ liệu không bị mất nếu pod bị xoá hoặc khởi động lại.

  • Link repository dự án: updating…

  • Link bài viết hướng dẫn chi tiết: updating…

5. CI/CD Pipeline hoàn chỉnh cho ứng dụng Node.js sử dụng dịch vụ AWS CI/CD

0faaec67-8587-43c0-b4e7-805c9d8656df

Tổng quan kiến trúc

Kiến trúc tổng thể của pipeline CI/CD cho ứng dụng web Node.js được xây dựng dựa trên các dịch vụ gốc của AWS và bao gồm 3 giai đoạn chính: Source, BuildDeploy.

Quy trình triển khai cụ thể như sau:

  • Người dùng đẩy (push) một commit mới lên GitHub repository. Hành động này kích hoạt pipeline.

  • Giai đoạn Source: AWS CodePipeline sẽ tự động lấy mã nguồn từ repository GitHub đã được cấu hình.

  • Giai đoạn Build: Sử dụng AWS CodeBuild để kiểm thử ứng dụng Node.js. (Lưu ý: Trong môi trường thực tế, giai đoạn này thường bao gồm cả quá trình build source code thành artifact.)

  • Giai đoạn Deploy: Sử dụng AWS CodeDeploy để triển khai ứng dụng Node.js lên môi trường AWS Elastic Beanstalk.

Lưu ý: Trong dự án này, giai đoạn Build chỉ thực hiện kiểm thử. Trong môi trường sản xuất thực tế, bạn nên bổ sung bước biên dịch mã nguồn và tạo ra artifact để triển khai.

  • Link repository dự án: updating…
  • Link bài viết hướng dẫn chi tiết: updating…


Như mình nói những ý tưởng trên bạn hoàn toàn có thể tự làm nhưng mình cũng sẽ tiến hành làm từng dự án một ở các bài viết riêng trong thời gian tới để cả những bạn chưa có nhiều kinh nghiệm tham khảo và những bạn có kinh nghiệm thêm góc nhìn. Mọi người có thể bookmark bài viết này lại vào tài khoản để thuận tiện theo dõi nha.

Chia sẻ bài viết:
Theo dõi
Thông báo của
0 Góp ý
Được bỏ phiếu nhiều nhất
Mới nhất Cũ nhất
Phản hồi nội tuyến
Xem tất cả bình luận

Có thể bạn quan tâm