Khai triển và giám sát một hệ thống ứng dụngđơn giản trên nền tảng Kubernetes sử dụng AWS

This project aims to deploy and monitor a basic web application on a Kubernetes cluster using AWS infrastructure, with tools like Prometheus and Grafana for system observability.

Việc kết hợp giữa Kubernetes (K8s) – nền tảng orchestration container phổ biến nhất hiện nay – với các dịch vụ đám mây như AWS mang lại giải pháp khai triển ứng dụng web hiệu quả, chuyên nghiệp, và mang tính thực tế cao. Đề tài này được thực hiện với mục tiêu áp dụng các kiến thức đã học vào khai triển một ứng dụng web thực tế – WordPress – trong môi trường Kubernetes, kết hợp với Prometheus và Grafana để giám sát tài nguyên hệ thống. Việc sử dụng công cụ kOps và các dịch vụ AWS như EC2, Route53, IAM, S3, ELB… giúp mô phỏng môi trường khai triển sản phẩm trong doanh nghiệp vừa và nhỏ.

TÁC GIẢ

Hồ Hải Dương, Trần Ngọc Phương Anh

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

NGÀNH

Năm:

Tổng quan

Trong bối cảnh nhu cầu phát triển ứng dụng web và dịch vụ số ngày càng tăng cao, các tổ chức/doanh nghiệp đòi hỏi hạ tầng khai triển phải bảo đảm tính linh hoạt, khả năng mở rộng và dễ giám sát. Đồng thời, công nghệ điện toán đám mây và container hóa đang ngày càng phổ biến trong thực tế nhờ các ưu điểm về chi phí, tốc độ khai triển và khả năng tự động hóa.

Việc kết hợp giữa Kubernetes (K8s) – nền tảng orchestration container phổ biến nhất hiện nay – với các dịch vụ đám mây như AWS mang lại giải pháp khai triển ứng dụng web hiệu quả, chuyên nghiệp, và mang tính thực tế cao. Đề tài này được thực hiện với mục tiêu áp dụng các kiến thức đã học vào khai triển một ứng dụng web thực tế – WordPress – trong môi trường Kubernetes, kết hợp với Prometheus và Grafana để giám sát tài nguyên hệ thống. Việc sử dụng công cụ kOps và các dịch vụ AWS như EC2, Route53, IAM, S3, ELB… giúp mô phỏng môi trường khai triển sản phẩm trong doanh nghiệp vừa và nhỏ.

Mục tiêu đề tài

Khai triển một hệ thống WordPress hoạt động ổn định trên cụm Kubernetes do công cụ kOps tạo ra trên nền tảng AWS. Kết hợp Prometheus và Grafana để thu thập và trực quan hóa dữ liệu giám sát tài nguyên hệ thống, giúp theo dõi hiệu năng và trạng thái của cụm. Cấu hình tên miền thân thiện (ví dụ: blog.gr2p11.site) trỏ đến dịch vụ WordPress thông qua AWS Route 53 và Elastic Load Balancer (ELB).

Làm quen với quy trình khai triển thực tế trên nền tảng cloud, thông qua việc sử dụng các dịch vụ như IAM, S3, EC2, Route53…

Thể hiện năng lực tổng hợp và áp dụng kiến thức từ nhiều môn học: Điện toán đám mây, Quản trị hệ thống, Thiết kế mạng, Mô hình hóa hệ thống phân tán…

Phạm vi thực hiện

Đề tài tập trung vào việc khai triển và giám sát một ứng dụng web cụ thể là WordPress, không phát triển nội dung hoặc chức năng riêng cho hệ thống này. Hệ thống được khai triển trên cụm Kubernetes được tạo bằng kOps, chạy trên hạ tầng AWS EC2 với cấu hình nhỏ gọn nhằm tối ưu chi phí sử dụng.

Việc giám sát hệ thống chỉ giới hạn ở mức sử dụng Prometheus để thu thập số liệu và Grafana để hiển thị dashboard cơ bản (CPU, Memory, Pod status). Tên miền có sẵn được sử dụng để cấu hình DNS thông qua Route53, nhằm mục đích truy cập hệ thống bằng đường dẫn rõ ràng và chuyên nghiệp.

Hệ thống không khai triển SSL, CI/CD pipeline, autoscaling hoặc backup tự động, nhưng có thể phát triển mở rộng trong tương lai.

https://drive.google.com/drive/folders/1mt4Ra6kn_kKg74bLNYDDLiRsMFzgf9FK?usp=sharing

Kiến trúc tổng thể

image 20

Hệ thống được khai triển trên nền tảng đám mây AWS sử dụng công cụ kOps để tạo và quản lý một cụm Kubernetes. Cụm bao gồm 1 node điều khiển (control plane) và 2 node công việc (worker nodes). Mỗi node là một phiên bản EC2 được tự động cấu hình và liên kết trong cùng một vùng (availability zone) là ap-southeast-1a.

  • Các thành phần chính trong hệ thống bao gồm:
    WordPress: được khai triển dưới dạng một Deployment với Service kiểu LoadBalancer để cung cấp giao diện web cho người dùng cuối.
  • MariaDB: được khai triển như một Deployment nội bộ để làm cơ sở dữ liệu cho WordPress.
  • Prometheus và Grafana: được khai triển trong namespace riêng (monitoring) để giám sát hoạt động của các thành phần trong cụm.

AWS Route 53: dịch vụ DNS giúp ánh xạ tên miền phụ blog.gr2p11.site đến địa chỉ ELB của WordPress.

  • AWS S3: nơi lưu trữ trạng thái (state store) của cụm Kubernetes, giúp kOps quản lý trạng thái hệ thống.
  • IAM (Identity and Access Management): kiểm soát quyền truy cập từ CLI đến các dịch vụ AWS liên quan trong quá trình khai triển.

Hệ thống được thiết kế theo hướng module hóa, dễ dàng mở rộng, giám sát và tái sử dụng cho các mục đích học tập hoặc thực hành khai triển thực tế.

image 22
image 23

Các bước khai triển chi tiết

Chuẩn bị môi trường cài đặt

Để bảo đảm việc khai triển hệ thống diễn ra thuận lợi và đồng bộ, nhóm tiến hành chuẩn bị môi trường làm việc trên máy tính cá nhân chạy hệ điều hành Windows 11 với các bước sau:

  • WSL2 (Ubuntu): Cho phép sử dụng môi trường Linux thật bên trong Windows, hỗ trợ chạy các lệnh CLI hiệu quả.
  • AWS CLI: Giao tiếp với các dịch vụ của AWS từ dòng lệnh như tạo bucket, quản lý IAM, Route 53…
  • kubectl: Công cụ điều khiển và quản trị cụm Kubernetes.
  • kOps: Dùng để tạo và quản lý cụm Kubernetes trên AWS một cách tự động và linh hoạt.

Tạo IAM user và cấu hình AWS CLI

Tạo một IAM user mới với quyền AdministratorAccess.

Kích hoạt Access Key ID và Secret Access Key, sau đó cấu hình bằng lệnh aws configure

Tạo S3 và Route 53 cho kOps

Để kOps có thể lưu trữ trạng thái (state store) và cấu hình DNS cho cụm Kubernetes, nhóm thực hiện hai bước quan trọng: tạo S3 bucket và cấu hình Hosted Zone trên dịch vụ Route 53 của AWS.

Tạo cụm Kubernetes bằng kOps

Sau khi hoàn tất việc cấu hình S3 và Route 53, nhóm thực hiện bước tiếp theo là khởi tạo và khai triển cụm Kubernetes trên AWS bằng công cụ kOps. Cụm này sẽ bao gồm 1 node điều khiển (control plane) và 2 node làm việc (worker nodes), được khai triển tại vùng ap-southeast-1a (Singapore).

Khai triển MariaDB

MariaDB được khai triển thông qua một file YAML khai báo cả Deployment, PersistentVolumeClaim, và Service. Một số thông tin chính:
 Image: mariadb:10.6
 Tên database: wordpress
 User/password: wpuser / wppass
 PVC: Dung lượng 20Gi, gắn vào /var/lib/mysql

Câu lệnh áp dụng cấu hình:

image 24

Khai triển WordPress

WordPress cũng được khai triển với cách tương tự, có cấu hình kết nối đến MariaDB thông qua biến môi trường:
 Image: wordpress:6.1.1-apache
 Liên kết DB: thông qua WORDPRESS_DB_HOST = mariadb
 PVC: Dung lượng 20Gi, gắn vào /var/www/html

image 25

Truy cập website từ domain tùy chỉnh Sau khi có địa chỉ ELB từ AWS, nhóm tạo bản ghi CNAME trên Route 53 để ánh xạ subdomain blog.gr2p11.site trỏ đến địa chỉ ELB. aws route53 change-resource-record-sets –hosted-zone-id … Sau khi DNS được cập nhật, người dùng có thể truy cập WordPress dễ dàng tại địa chỉ: http://blog.gr2p11.site

Khai triển hệ thống giám sát với Prometheus và Grafana

Để hỗ trợ việc theo dõi tình trạng hoạt động của các pod, cluster, và tài nguyên trong hệ thống Kubernetes, nhóm đã khai triển thêm hai công cụ giám sát phổ biến là Prometheus và Grafana. Hai công cụ này được khai triển trong namespace riêng tên là monitoring để dễ quản lý và phân tách chức năng với các dịch vụ khác như WordPress hay MariaDB.

Tạo namespace và khai triển Prometheus

Prometheus được khai triển dưới dạng một Deployment cùng với một Service kiểu ClusterIP. File cấu hình sử dụng ConfigMap để chỉ định các targets sẽ được theo dõi, bao gồm các node, pod, và metrics từ chính Kubernetes.

Khai triển Grafana

Grafana được khai triển tương tự như Prometheus nhưng sử dụng Service kiểu LoadBalancer để có thể truy cập qua internet. Grafana sử dụng ConfigMap để chỉ định kết nối đến Prometheus như một nguồn dữ liệu (Data Source).

Tạo dashboard giám sát cơ bản

Sau khi hoàn tất khai triển Prometheus và Grafana, nhóm đã truy cập vào giao diện web của Grafana thông qua địa chỉ LoadBalancer do Kubernetes cung cấp. Tại đây, nhóm tiến hành tạo một dashboard giám sát cơ bản để theo dõi tình trạng hoạt động của các pod trong namespace default.

Thay vì sử dụng truy vấn PromQL thủ công, nhóm sử dụng công cụ Builder có sẵn trong giao diện tạo biểu đồ của Grafana. Đây là một công cụ trực quan giúp người dùng lựa chọn các trường dữ liệu và điều kiện lọc mà không cần phải viết mã.

Mục đích của biểu đồ là cung cấp cái nhìn tổng quan về số lượng pod đang ở các trạng thái khác nhau. Grafana đã vẽ biểu đồ theo metric process_cpu_seconds_total, chứng tỏ hệ thống Prometheus ↔ Grafana hoạt động đúng:

image 26
image 27

Kết luận

image 21

NHỮNG HẠN CHẾ VÀ HƯỚNG PHÁT TRIỂN

Khó khăn và hạn chế khi thực hiện

Quá trình thiết lập cụm Kubernetes bằng kOps yêu cầu nhiều bước cấu hình như IAM, Route53, S3 và đòi hỏi sự chính xác cao. Những sai sót nhỏ cũng có thể dẫn đến lỗi khó phát hiện.

Trong quá trình mở rộng (scale-out), nhóm gặp vấn đề về PersistentVolumeClaim do hạn chế của chế độ truy cập RWO khiến không thể mount cùng lúc lên nhiều pod WordPress.

Trong quá trình mở rộng (scale-out), nhóm gặp vấn đề về PersistentVolumeClaim do hạn chế của chế độ truy cập RWO khiến không thể mount cùng lúc lên nhiều pod WordPress.

Hệ thống yêu cầu tài nguyên điện toán và chi phí cloud thực tế (AWS), nên việc giám sát sát sao thời gian hoạt động và chi phí phát sinh là cần thiết (nhóm đã tốn 23 USD để duy trì hệ thống dịch vụ AWS).

Đề xuất hướng phát triển

Thực hiện High Availability thực sự bằng cách khai triển cấu hình multi-AZ, kết hợp với auto scaling và sử dụng EFS (Elastic File System) để chia sẻ volume giữa các pod WordPress.

Tích hợp công cụ Alertmanager để cấu hình cảnh báo (notification) gửi qua email hoặc các ứng dụng chat (Slack, Telegram) khi hệ thống gặp sự cố.

Tự động hóa toàn bộ quy trình khai triển bằng các công cụ như Terraform, Helm, GitHub Actions để dễ dàng tái sử dụng và mở rộng hệ thống.

Bảo mật hệ thống tốt hơn bằng cách cấu hình SSL với Let’s Encrypt và kiểm soát truy cập thông qua RBAC, network policy.