Tự động hóa quy trình triển khai ứng dụng Microservicetrên môi trường Kubernetes với Jenkins và Terraform

Automate Process of Microservice Application Deployment on Kubernetes with Jenkins and Terraform

Tầm quan trọng của CI/CD trong quy trình phát triển phần mềm: Trong môi trường phát triển phần mềm hiện đại, sự cạnh tranh rất cao. Các công ty cần phải phát triển và cập nhật ứng dụng của họ một cách nhanh chóng để giữ chân người dùng và thu hút người dùng mới. CI/CD giúp tự động hóa quá trình xây dựng, kiểm thử và triển khai ứng dụng, đảm bảo rằng mỗi thay đổi nhỏ đều được kiểm tra kỹ lưỡng và có thể triển khai ngay lập tức nếu không có lỗi. Điều này giúp các công ty phản ứng nhanh với các phản hồi của người dùng và cập nhật ứng dụng liên tục để giữ vững vị thế trên thị trường.Trong thị trường cạnh tranh hiện nay, khả năng phản hồi nhanh chóng và điều chỉnh sản phẩm theo yêu cầu người dùng là rất quan trọng.

TÁC GIẢ

Hoàng Đình Cẩm, Hoàng Tất Quý

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

NGÀNH

Năm:

Đặt vấn đề

Sự phát triển của kiến trúc Microservices và Kubernetes: Hiện nay, việc phát triển ứng dụng theo kiến trúc Microservices và triển khai trên nền tảng Kubernetes đang ngày càng trở nên phổ biến. Đây là một xu hướng mạnh mẽ trong ngành công nghệ vì khả năng linh hoạt, mở rộng và đảm bảo tính sẵn sàng cao.

Đòi hỏi về tự động hóa và quản lý hạ tầng: Việc triển khai các ứng dụng Microservices trên Kubernetes đòi hỏi các quy trình triển khai phải được tự động hóa để đảm bảo tính nhất quán và tính đáng tin cậy của hệ thống. Jenkins và Terraform là hai công cụ phổ biến được sử dụng để thực hiện các quy trình này.

Nhu cầu của doanh nghiệp và cộng đồng công nghệ: Các công ty công nghệ và tổ chức phần mềm đang tìm cách tối ưu hóa quy trình phát triển và triển khai để nhanh chóng mang sản phẩm đến thị trường và giảm thiểu rủi ro.

Tầm quan trọng của CI/CD trong quy trình phát triển phần mềm: Trong môi trường phát triển phần mềm hiện đại, sự cạnh tranh rất cao. Các công ty cần phải phát triển và cập nhật ứng dụng của họ một cách nhanh chóng để giữ chân người dùng và thu hút người dùng mới. CI/CD giúp tự động hóa quá trình xây dựng, kiểm thử và triển khai ứng dụng, đảm bảo rằng mỗi thay đổi nhỏ đều được kiểm tra kỹ lưỡng và có thể triển khai ngay lập tức nếu không có lỗi. Điều này giúp các công ty phản ứng nhanh với các phản hồi của người dùng và cập nhật ứng dụng liên tục để giữ vững vị thế trên thị trường.Trong thị trường cạnh tranh hiện nay, khả năng phản hồi nhanh chóng và điều chỉnh sản phẩm theo yêu cầu người dùng là rất quan trọng

Tổng quan lý thuyết

Terraform là một công cụ mã nguồn mở được phát triển bởi HashiCorp, cho phép người dùng định nghĩa và cung cấp cơ sở hạ tầng IT thông qua mã (Infrastructure as Code – IaC). Với Terraform, chúng ta có thể tạo, cập nhật và quản lý một cách hiệu quả các tài nguyên trên các dịch vụ đám mây, chẳng hạn như AWS, Azure, Google Cloud Platform, và nhiều dịch vụ khác.

Terraform sử dụng một ngôn ngữ cấu hình riêng gọi là HashiCorp Configuration Language (HCL), cho phép mô tả cơ sở hạ tầng một cách khai báo. Điều này giúp việc quản lý và tái tạo cơ sở hạ tầng trở nên dễ dàng và nhất quán hơn.

Kubernetes (hay k8s) là một nền tảng open-source được dùng để quản lý container và được phát triển bởi google. Có thể dùng Kubernetes để phát triển ứng dụng trên nhiều nền tảng khác nhau như on-premise, cloud, or virtual machines. Với việc xu hướng phát triển các ứng dụng theo kiến trúc Microservice với nền tảng là các Container thì hiện nay Kubernetes được sử dụng bởi nhiều công ty lớn trong việc vận hành phần mềm, phát triển ứng dụng và có cộng đồng rất lớn.

image 44

Trước khi khái niệm tích hợp liên tục (Continuous Integration – CI) ra đời, có một quy tắc mà các developer phải luôn nhớ là “Don’t break the nightly build!”. Trước kia, hầu hết việc deploy một sản phẩm phần mềm đều dựa theo một quy trình gọi là “Nightly build”- người tiền nhiệm của Continuous Integration. Cụ thể về quy trình này là mỗi đêm hệ thống sẽ pull code của tất cả các developer đã viết trong ngày hôm đó về và build để có thể deploy phiên bản mới nhất của sản phầm cho các tester vào ngày tiếp theo. Tuy nhiên quy trình này có một rủi ro là nếu có bất kỳ một đoạn code lỗi nào thì quá trình build sẽ trở thành công cốc và để tìm được đoạn code lỗi đó nằm ở commit nào thì rất phức tạp cũng như tốn rất nhiều thời gian, vì vậy, để đảm bảo quá trình triển khai ứng dụng được thành công và hoạt động bình thường thì các developer phải build và test thật kỹ trước khi đẩy code của mình lên. Nhưng tất nhiên điều này không thể chính xác hoàn toàn vì không ai có thể đảm bảo trong quá trình phát triển và duy trì ứng dụng, tất cả các lỗi đều được phát hiện và sửa trước khi build cả. Vì thế Jenkins và CI ra đời, giúp giải quyết tất cả các vấn đề trên.

image 45

Hạn chế

Trong quá trình thực hiện đồ án, việc hạn chế trong tài nguyên để triển khai hệ thống là điều không thể tránh khỏi nên chưa thể phát huy được hết các tính năng mà các công cụ, ứng dụng cũng như các use-case thực tế của các công cụ, phần mềm đó trong quy trình phát triển phần mềm.

Jenkins là một công cụ mã nguồn mở miễn phí, dễ dàng triển khai và không phụ thuộc vào bên thứ hai, nhưng cũng chính vì điểm này mà việc cập nhật, bảo trì một hệ thống Jenkins trong thực tế đòi hỏi khá nhiều thời gian cũng như công sức. Vì vậy trong thực tế, tùy vào nhu cầu của doanh nghiệp mà sử dụng Jenkins hay các dịch vụ CI do các bên khác cung cấp có trả phí như Github Action, Travis CI,…

Hướng phát triển

  • Việc triển khai ứng dụng Microservice theo cách thủ công với các file “*.yaml” còn chưa linh hoạt, với các ứng dụng lớn, số lượng service khổng lồ thì cần các giải pháp để triển khai, duy trì ứng dụng Microservice linh hoạt hơn, cụ thể là sử dụng Helm Chart. Với việc sử dụng các template trong Chart sẽ giúp quá trình triển khai, cập nhật ứng dụng Microservice linh hoạt, nhanh chóng hơn bằng việc truyền vào các thông số như “replicas, image, image tag, các label, version,…” theo cách thuận tiện hơn.
  • Bên cạnh quá trình triển khai, thì quá trình giám sát hệ thống, ứng dụng sau khi triển khai cũng là một bước hết sức quan trọng trong quy trình phát triển phần mềm, vì thế nên triển khai các hệ thống giám sát với các công cụ như Prometheus & Grafana, ngoài ra có thểgiám sát nhiều cluster tập trung với Thanos – một phiên bản khác của Prometheus.
  • Có thể triển khai Jenkins thành dạng Cluster, bao gồm một Master và nhiều Slaves, sẽ tăng năng suất cũng như hiệu suất để xử lý các pipeline, vì trong thực tế thì một CI server sẽ xử lý không chỉ một, hai mà có thể là rất nhiều các CI pipeline khác nhau cho từng dự án lớn nhỏ khác nhau của doanh nghiệp.
  • Việc triển khai hệ thống trên AWS trong thực tế sẽ đòi hỏi rất cao về quá trình giám sát hiệu năng hệ thống, cũng như theo dõi, tối ưu chi phí cho các dịch vụ thuê trên AWS. Vì vậy trong tương lai, việc triển khai các giải pháp để giám sát, tối ưu chi phí sử dụng dịch vụ trên các nền tảng Cloud cũng là một vấn đề mà nhóm em quan tâm và muốn phát triển trong tương lai.