Tự động triển khai ứng dụng trên Azure Kubernetes Service bằng Jenkins

Continuous deploy application on Azure Kubernetes Service by using Jenkins

Trong bối cảnh phát triển phần mềm hiện đại, việc áp dụng DevOps và các công cụ tự động hóa CI/CD (Continuous Integration/Continuous Deployment) đã trở thành tiêu chuẩn trong ngành công nghiệp. CI/CD không chỉ giúp cải thiện tốc độ triển khai mà còn đảm bảo chất lượng sản phẩm thông qua các bước kiểm thử tự động, giảm thiểu rủi ro và thời gian đưa ứng dụng vào môi trường sản xuất.

TÁC GIẢ

NGUYỄN TẤN THUẬN

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

NGÀNH

Năm:

Tổng quan đồ án

Trong bối cảnh phát triển phần mềm hiện đại, việc áp dụng DevOps và các công cụ tự động hóa CI/CD (Continuous Integration/Continuous Deployment) đã trở thành tiêu chuẩn trong ngành công nghiệp. CI/CD không chỉ giúp cải thiện tốc độ triển khai mà còn đảm bảo chất lượng sản phẩm thông qua các bước kiểm thử tự động, giảm thiểu rủi ro và thời gian đưa ứng dụng vào môi trường sản xuất.

Kubernetes (K8s) cũng nổi lên như một giải pháp hiệu quả cho việc quản lý và triển khai các ứng dụng container hóa. Azure Kubernetes Service (AKS), một dịch vụ quản lý Kubernetes trên nền tảng Azure, cung cấp môi trường mạnh mẽ và dễ dàng để triển khai, mở rộng và giám sát các ứng dụng cloud-native.

Tuy nhiên, việc triển khai và quản lý các ứng dụng trên AKS không đơn thuần chỉ là viết mã. Nó yêu cầu một hệ thống CI/CD tự động, hiệu quả và tích hợp sâu với các công cụ quản lý hạ tầng như Terraform và các công cụ triển khai như Helm.

Nhu cầu thực tiễn

Trong thực tế, nhiều tổ chức đang gặp khó khăn với:

  • Quy trình triển khai thủ công: Dễ mắc lỗi, tốn thời gian, khó mở rộng.
  • Đồng bộ hóa các công cụ: Việc tích hợp nhiều công cụ như Jenkins, GitHub Actions, Azure DevOps thường phức tạp, yêu cầu kinh nghiệm và sự phối hợp chặt chẽ.
  • Quản lý hạ tầng: Tạo và quản lý tài nguyên Azure như AKS, ACR thủ công không chỉ mất nhiều thời gian mà còn dễ dẫn đến lỗi cấu hình.
  • Tự động hóa toàn diện: Khó khăn trong việc đồng bộ hóa quy trình từ viết mã, kiểm thử, triển khai đến giám sát.

Mục tiêu cá nhân

Trong thực tế, nhiều tổ chức đang gặp khó khăn với:

  • Quy trình triển khai thủ công: Dễ mắc lỗi, tốn thời gian, khó mở rộng.
  • Đồng bộ hóa các công cụ: Việc tích hợp nhiều công cụ như Jenkins, GitHub Actions, Azure DevOps thường phức tạp, yêu cầu kinh nghiệm và sự phối hợp chặt chẽ.
  • Quản lý hạ tầng: Tạo và quản lý tài nguyên Azure như AKS, ACR thủ công không chỉ mất nhiều thời gian mà còn dễ dẫn đến lỗi cấu hình.
  • Tự động hóa toàn diện: Khó khăn trong việc đồng bộ hóa quy trình từ viết mã, kiểm thử, triển khai đến giám sát.

Mục đích nghiên cứu

1. Tự động hóa quy trình triển khai ứng dụng

Xây dựng một hệ thống CI/CD hoàn chỉnh nhằm tự động hóa các công đoạn từ kiểm thử, đóng gói, đến triển khai ứng dụng lên Azure Kubernetes Service (AKS). Giảm thiểu lỗi con người thông qua tự động hóa và cải thiện tốc độ triển khai.

2. Tích hợp các công cụ CI/CD

Khai thác và triển khai ba công cụ chính gồm Jenkins, GitHub Actions, và Azure DevOps để tạo nên một hệ thống CI/CD thống nhất và hiệu quả. So sánh, đánh giá ưu và nhược điểm của từng công cụ trong việc xây dựng pipeline CI/CD.

3. Quản lý hạ tầng với Terraform

Sử dụng Terraform để tự động hóa việc tạo và quản lý tài nguyên trên Azure, bao gồm AKS, Azure Container Registry (ACR), Azure DevOps và các dịch vụ liên quan.

Đảm bảo rằng hạ tầng có thể được quản lý dễ dàng và tái sử dụng bằng mã (Infrastructure as Code).

4. Đánh giá hiệu quả triển khai CI/CD

Xác định hiệu quả của hệ thống CI/CD trong việc triển khai ứng dụng:

  • Thời gian triển khai.
  • Độ tin cậy trong quá trình triển khai.
  • Khả năng mở rộng và tối ưu hóa chi phí trên Azure.

5. Nâng cao kiến thức và kỹ năng thực tiễn

Hiểu rõ cách sử dụng Kubernetes, AKS và các công cụ hiện đại trong việc triển khai ứng dụng.

Phát triển khả năng tích hợp nhiều công cụ CI/CD và quản lý hạ tầng hiệu quả.

Nội dung đồ án

1. Giới thiệu CI/CD và Tầm Quan Trọng trong Phát Triển Phần Mềm

Continuous Integration (CI): Là quá trình tích hợp mã nguồn liên tục, trong đó các thay đổi từ nhiều nhà phát triển được hợp nhất vào một nhánh chung một cách tự động. CI đảm bảo rằng mã nguồn được kiểm thử và xây dựng thường xuyên, giảm thiểu lỗi tích hợp.

Tăng hiệu suất phát triển: Rút ngắn thời gian triển khai từ phát triển đến sản xuất.

Cải thiện chất lượng phần mềm: Phát hiện lỗi sớm trong chu trình phát triển.

Tự động hóa: Giảm thiểu các thao tác thủ công, tăng độ tin cậy.

Hỗ trợ DevOps: CI/CD là một phần cốt lõi của DevOps, giúp đội ngũ phát triển và vận hành làm việc hiệu quả hơn.

2. Kubernetes và Azure Kubernetes Service (AKS)

Định nghĩa: Kubernetes là một nền tảng mã nguồn mở để quản lý container. Nó cung cấp các tính năng như triển khai, scaling, và quản lý ứng dụng containerization

Định nghĩa: AKS là dịch vụ Kubernetes được quản lý bởi Microsoft Azure, giúp đơn giản hóa việc triển khai và vận hành Kubernetes trên đám mây.

Tính năng nổi bật:

  • Dễ dàng triển khai: Tự động hóa việc thiết lập và quản lý cụm Kubernetes.
  • Tích hợp Azure: Liên kết với các dịch vụ Azure như Azure Container Registry (ACR), Azure Monitor.
  • Bảo mật: Cung cấp tính năng RBAC, quản lý truy cập, và tích hợp Azure Active Directory (AAD).
  • Hiệu suất cao: Hỗ trợ auto-scaling và tối ưu hóa tài nguyên.

Kiến trúc tổng thể

image 108

Vai trò của các công cụ trong hệ thống triển khai:

  • Terraform: Thực hiện tạo các resource trên Azure bao gồm các dịch vụ AKS, ACR. Trong Azure DevOps, Terraform thực hiện tạo Project, quản lý các biến môi trường trong project, quản lý truy cập từ Pipeline Agent đến các resource thông quan các service endpoint.
  • Azure DevOps, Jenkins, GitHub Actions: Thực hiện chạy và quản lý các CI/CD pipelines.
  • Azure DevOps Agents: Nhận thông tin các Jobs từ Azure Pipelines Service và các thông tin cần thiết như biến môi trường. Sau đó, các Agents triển khai các Job nhận được và gửi kết quả về Azure Pipelines Service.
  • AKS: Vận hành các ứng được triển khai tỏng hệ thống.
  • ACR: Lưu trữ và quản lý các Container Images dùng để triển khai trong hệ thống.
  • Ngrok: Cho phép truy cập ứng dụng được triển khai trong AKS.
  • Helm: Quản lý Ngrok package triển khai trong hệ thống.
image 109

Đánh giá kết quả

Triển khai hạ tầng bằng Terraform

Thành công trong việc triển khai hạ tầng Azure, bao gồm:

  • Azure Kubernetes Service (AKS).
  • Azure Container Registry (ACR).
  • Quản lý project và các kết nối tới các dịch vụ trong Azure DevOps

Quá trình hoạt động của các CI/CD pipelines đảm bảo ổn định

Quá trình Build, Push Docker Image và triển khai ứng dụng trên AKS hoạt động hoàn tự động.

Ngrok Hỗ Trợ Kiểm Thử:

Tạo đường dẫn tạm thời để kiểm tra ứng dụng trước khi đưa vào production, bao gồm kiểm thử giao diện và khả năng hoạt động của ứng dụng
Minh chứng kết quả đạt được

image 110
image 111
image 112

Đánh giá hệ thống

Tính Tự Động Hóa: Toàn bộ quy trình triển khai từ việc tạo hạ tầng, xây dựng ứng dụng, đến triển khai lên AKS được tự động hóa hoàn toàn, giảm thiểu sai sót do con người.

Hiệu Suất: Thời gian triển khai từ khi bắt đầu pipeline đến khi ứng dụng hoạt động trên AKS trung bình là 5-7 phút, nhanh hơn nhiều so với phương pháp thủ công.

Khả Năng Mở Rộng:

  • Hệ thống dễ dàng mở rộng bằng cách cập nhật Terraform hoặc Helm chart.
  • Khả năng tích hợp thêm các ứng dụng và pipeline CI/CD mới mà không ảnh hưởng đến hệ thống hiện tại.

Hạn chế và vấn đề phát sinh

Chi Phí Vận Hành: Sử dụng nhiều dịch vụ Azure có thể dẫn đến chi phí cao, cần tối ưu hóa việc sử dụng tài nguyên.

Tích Hợp Ngrok: Ngrok chỉ phù hợp cho môi trường kiểm thử, không nên sử dụng trong production vì giới hạn về bảo mật.

Kết luận

Trong đồ án này, tôi đã xây dựng thành công hệ thống triển khai tích hợp và liên tục (CI/CD) cho ứng dụng web trên nền tảng Azure Kubernetes Service (AKS) với sự hỗ trợ của các công cụ như Jenkins, GitHub Actions, Azure DevOps, Terraform, Helm và Ngrok. Hệ thống này không chỉ đáp ứng các tiêu chí về tính tự động hóa, hiệu suất, mà còn đảm bảo khả năng mở rộng và độ tin cậy cao.

Cụ thể, các kết quả chính đạt được bao gồm:

  • Triển khai hạ tầng tự động hóa: Sử dụng Terraform để quản lý toàn bộ tài nguyên Azure như AKS, ACR, mạng và bảo mật.
  • Xây dựng pipeline CI/CD hoàn chỉnh: Tích hợp Jenkins, GitHub Actions, và Azure DevOps để triển khai ứng dụng nhanh chóng và chính xác.
    Kết quả đạt được đã chứng minh khả năng ứng dụng của hệ thống trong việc cải thiện quy trình phát triển và triển khai phần mềm, giảm thiểu sai sót và tối ưu hóa thời gian vận hành.