Xây dựng và triển khai ứng dụng Java web trên Kubernetes dùng GitOps

Building and deploying a Java web application on Kubernetes using GitOps

Đề tài “Xây dựng và triển khai ứng dụng Java Web trên Kubernetes dùng Jenkins” tập trung nghiên cứu và thực hiện quy trình triển khai ứng dụng Java Web theo mô hình hiện đại, kết hợp giữa nền tảng Kubernetes và phương pháp Jenkins. Trong đồ án này, chúng em đã xây dựng một ứng dụng Java Web mẫu, đóng gói dưới dạng container Docker, lưu trữ mã nguồn và cấu hình trên GitHub. Quá trình triển khai và cập nhật ứng dụng trên cụm Kubernetes được thực hiện tự động thông qua Jenkins, giúp giảm thiểu rủi ro và cải thiện hiệu quả vận hành.

TÁC GIẢ

Tô Thị Hồng Anh, Lâm Quang Dũng

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

NGÀNH

Năm:

Tổng quan

Hiện nay, cùng với sự phát triển mạnh mẽ của công nghệ Cloud Computing và Microservices, các doanh nghiệp và tổ chức ngày càng chú trọng đến việc tối ưu hóa quy trình triển khai, vận hành và quản lý ứng dụng. Kubernetes đã trở thành một nền tảng mã nguồn mở hàng đầu cho việc quản lý container nhờ khả năng mở rộng linh hoạt, tính tự phục hồi và khả năng tự động hóa cao. Song song đó, Jenkins nổi lên như một công cụ tự động hoá quy trình CI/CD giúp đơn giản hóa việc build, kiểm thử và triển khai ứng dụng. Việc kết hợp Jenkins với Kubernetes giúp nâng cao khả năng kiểm soát quá trình triển khai, giảm thiểu lỗi phát sinh trong quá trình build và triển khai ứng dụng, đồng thời tăng cường tính tự động hóa và nhất quán cho toàn bộ hệ thống.

Ứng dụng Java Web vẫn chiếm một tỷ trọng lớn trong các hệ thống phần mềm hiện nay, đặc biệt trong các doanh nghiệp vừa và lớn. Tuy nhiên, việc triển khai và quản lý ứng dụng Java Web trên các môi trường phức tạp như Kubernetes không phải lúc nào cũng đơn giản, đòi hỏi một quy trình bài bản và tự động hóa để giảm thiểu sai sót và tăng hiệu quả vận hành.

Chính vì vậy, đề tài “Xây dựng và triển khai ứng dụng Java Web trên Kubernetes dùng Jenkins” được lựa chọn nhằm tìm hiểu và thực hành các công nghệ hiện đại, áp dụng vào bài toán thực tế. Thông qua đề tài này, chúng em mong muốn có thể nắm vững quy trình triển khai ứng dụng hiện đại, làm chủ các công cụ như Kubernetes, Jenkins, Docker… từ đó góp phần nâng cao năng lực chuyên môn và đáp ứng tốt hơn yêu cầu của các doanh nghiệp trong lĩnh vực phát triển phần mềm và vận hành hệ thống.

Đề tài “Xây dựng và triển khai ứng dụng Java Web trên Kubernetes dùng Jenkins” tập trung nghiên cứu và thực hiện quy trình triển khai ứng dụng Java Web theo mô hình hiện đại, kết hợp giữa nền tảng Kubernetes và phương pháp Jenkins. Trong đồ án này, chúng em đã xây dựng một ứng dụng Java Web mẫu, đóng gói dưới dạng container Docker, lưu trữ mã nguồn và cấu hình trên GitHub. Quá trình triển khai và cập nhật ứng dụng trên cụm Kubernetes được thực hiện tự động thông qua Jenkins, giúp giảm thiểu rủi ro và cải thiện hiệu quả vận hành.

Mục đích thực hiện đề tài

  • Xây dựng quy trình triển khai ứng dụng Java Web trên nền tảng Kubernetes một cách tự động và tối ưu, áp dụng phương pháp Jenkins để đảm bảo tính nhất quán và khả năng kiểm soát cấu hình.
  • Hiểu rõ và thực hành triển khai các thành phần cần thiết trong hệ sinh thái Kubernetes như: Pod, Deployment, Service, Ingress, ConfigMap, Secret…
  • Làm chủ quy trình tự động hoá việc triển khai và cập nhật ứng dụng thông qua Jenkin.
  • Nâng cao kiến thức và kỹ năng về phát triển và vận hành ứng dụng theo mô hình hiện đại CI/CD kết hợp với DevOps.
  • Đánh giá hiệu quả của mô hình triển khai Jenkins trong việc quản lý vòng đời ứng dụng Java Web trên Kubernetes.

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

  • Mô hình triển khai ứng dụng Java Web trên nền tảng Kubernetes.
  • Phương pháp Jenkins và các công cụ hỗ trợ.
  • Quy trình xây dựng pipeline CI/CD tích hợp với Jenkins.
  • Cách thức đóng gói và vận hành ứng dụng Java Web sử dụng container Docker.

Phạm vi nghiên cứu

  • Ứng dụng Java Web mẫu được xây dựng với một framework phổ biến như Spring Boot hoặc Servlet/JSP.
  • Môi trường triển khai Kubernetes: có thể là Minikube, k3s, Kind hoặc cluster Kubernetes thực tế (local hoặc cloud).
  • Triển khai Jenkins kết nối với repository GitHub.
  • Nghiên cứu và triển khai các thành phần cơ bản, không đi sâu vào các khía cạnh phức tạp như Service Mesh (Istio), autoscaling nâng cao hoặc bảo mật chuyên sâu.
  • Không tập trung vào tối ưu hiệu năng sâu mà chủ yếu nhấn mạnh quy trình triển khai tự động, tái sử dụng được.

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

Hệ thống được xây dựng theo mô hình CI/CD tự động hóa toàn bộ quy trình từ phát triển, kiểm thử, đóng gói, đến triển khai ứng dụng Java Web lên Kubernetes Cluster. Kiến trúc tổng thể bao gồm các thành phần: GitHub, Jenkins, Docker Registry, Kubernetes Cluster và người dùng cuối.

image 71

  • Developer: Commit mã nguồn và Jenkinsfile lên GitHub.
  • Jenkins Server: Tự động clone code từ GitHub, build và test ứng dụng, đóng gói image và triển khai lên Kubernetes.
  • Docker Registry: Lưu trữ Docker Image được Jenkins tạo ra.
  • Kubernetes Cluster: Môi trường chạy ứng dụng với các Pod chứa container Java Web.
  • User: Truy cập ứng dụng từ bên ngoài thông qua Service hoặc Ingress.
image 72

Thành phần và chức năng:

  • GitHub: Lưu trữ source code ứng dụng Java Web và Jenkinsfile (pipeline).
  • Jenkins Server: Thực hiện build ứng dụng, kiểm thử, tạo Docker image và triển khai ứng dụng lên Kubernetes Cluster.
  • Docker Registry (Docker Hub hoặc Nexus/Harbor): Lưu trữ Docker Image sau khi build từ Jenkins để phục vụ triển khai.
  • Kubernetes Cluster (Minikube / Kind / EKS / GKE…): Môi trường chạy ứng dụng Java Web dưới dạng container trên các Pod.
  • Prometheus: Thu thập số liệu (metrics) từ Kubernetes Cluster và các Pod ứng dụng.
  • Grafana: Hiển thị dashboard giám sát hệ thống dựa trên dữ liệu từ Prometheus.
  • User: Truy cập ứng dụng qua Service hoặc Ingress của Kubernetes bằng trình duyệt Web.
    Kết nối:
  • Jenkins Server → GitHub: Jenkins server kết nối Internet để clone source code từ GitHub repository.
  • Jenkins Server → Docker Registry: Build ứng dụng → tạo Docker Image → push image lên Docker Registry.
  • Jenkins Server → Kubernetes Cluster: Deploy ứng dụng từ Docker Image vào Kubernetes

Prometheus + Grafana:

  • Prometheus thu thập metrics từ Kubernetes Cluster.
  • Grafana hiển thị dashboard giám sát.
  • User → Service/Ingress: Người dùng cuối truy cập ứng dụng thông qua Service hoặc Ingress Controller của Kubernetes (qua IP Public hoặc domain)

Các chức năng chính

image 73
image 74
image 75

Kết luận

Qua quá trình thực hiện đề tài “Xây dựng và triển khai ứng dụng Java Web trên Kubernetes dùng GitOps”, chúng em đã nắm được cách áp dụng các công cụ Jenkins, Docker, Kubernetes, GitOps vào quy trình triển khai ứng dụng. Sau khi hoàn thành, hệ thống đã tự động hóa được các bước: lấy mã nguồn từ GitHub, build Docker image, đẩy lên Docker Registry, triển khai lên Kubernetes Cluster, và giám sát bằng Prometheus, Grafana.

Trong quá trình làm, chúng em cũng gặp một số khó khăn như:

Quản lý cấu hình deployment bằng Helm

Cấu hình tích hợp giữa Jenkins và Kubernetes.

Quản lý thông tin bảo mật khi push/pull Docker image.

Thiết lập các công cụ monitoring và đảm bảo đồng bộ giữa các thành phần. Qua đề tài này, chúng em đã hiểu rõ hơn về CI/CD, GitOps, và cách triển khai ứng dụng Java Web trong môi trường container.

Hướng phát triển:

Bổ sung thêm các bước kiểm thử tự động.

Triển khai trên môi trường cloud thực tế như AWS EKS hoặc GKE.