Helm là một trình quản lý gói dành cho Kubernetes, cho phép các nhà phát triển và quản trị viên dễ dàng đóng gói, cấu hình và triển khai các ứng dụng cũng như dịch vụ lên các cluster Kubernetes.
Helm hiện là một dự án chính thức của Kubernetes và là một phần của Cloud Native Computing Foundation – một tổ chức phi lợi nhuận hỗ trợ các dự án mã nguồn mở trong hệ sinh thái Kubernetes.
Để triển khai Kubernetes hiệu quả, việc sử dụng Helm là lựa chọn tối ưu. Nếu bạn đang tìm kiếm hạ tầng mạnh mẽ, VPS Việt Nam từ DataOnline cung cấp giải pháp đáng tin cậy, tốc độ cao, hỗ trợ triển khai ứng dụng container hóa mượt mà, đáp ứng mọi nhu cầu doanh nghiệp.
Trong bài viết này, chúng ta sẽ cùng nhau tổng quan về Helm và các trừu tượng mà nó sử dụng để đơn giản hóa việc triển khai các ứng dụng lên Kubernetes.
Nếu bạn đang tìm kiếm một dịch vụ lưu trữ Kubernetes được quản lý, hãy xem dịch vụ Kubernetes được quản lý đơn giản của chúng tôi, được xây dựng dành cho sự phát triển.
Tổng quan về Helm
Hầu hết mọi ngôn ngữ lập trình và hệ điều hành đều có trình quản lý gói riêng giúp cài đặt và bảo trì phần mềm. Helm cung cấp những tính năng cơ bản tương tự như nhiều trình quản lý gói mà bạn có thể đã quen thuộc, chẳng hạn như apt của Debian hay pip
của Python.
Helm có thể:
● Cài đặt phần mềm.
● Tự động cài đặt các phụ thuộc của phần mềm.
● Nâng cấp phần mềm.
● Cấu hình các bản phát hành phần mềm.
● Tải các gói phần mềm từ các kho lưu trữ.
Helm cung cấp những chức năng này thông qua các thành phần sau:
● Một công cụ dòng lệnh, helm
, cung cấp giao diện người dùng cho tất cả các chức năng của Helm.
● Một thành phần máy chủ đi kèm, tiller
, chạy trên cluster Kubernetes của bạn, lắng nghe các lệnh từ helm và xử lý việc cấu hình và triển khai các bản phát hành phần mềm trên cluster.
● Định dạng đóng gói của Helm
, được gọi là charts.
● Một kho charts được quản lý chính thức với các charts được đóng gói sẵn cho các dự án phần mềm mã nguồn mở phổ biến.
Chúng ta sẽ cùng đi sâu vào định dạng charts ngay sau đây.
Charts
Các gói Helm được gọi là charts, và chúng bao gồm một số tệp cấu hình YAML cùng với các template được biên dịch thành các tệp manifest của Kubernetes. Dưới đây là cấu trúc thư mục cơ bản của một chart:
Example chart directory package-name/ charts/ templates/ Chart.yaml LICENSE README.md requirements.yaml values.yaml
Các thư mục và tệp này có chức năng như sau:
● charts/: Các phụ thuộc của chart được quản lý thủ công có thể được đặt trong thư mục này, mặc dù thông thường bạn nên sử dụng tệp requirements.yaml để liên kết phụ thuộc một cách động.
● templates/: Thư mục này chứa các tệp template được kết hợp với các giá trị cấu hình (từ values.yaml và dòng lệnh) và được biên dịch thành các manifest của Kubernetes. Các template này sử dụng định dạng template của ngôn ngữ lập trình Go.
● Chart.yaml: Một tệp YAML chứa thông tin meta của chart, chẳng hạn như tên chart, phiên bản, thông tin người bảo trì, website liên quan, và các từ khóa tìm kiếm.
● LICENSE: Tệp giấy phép ở dạng văn bản thuần cho chart.
● README.md: Tệp readme chứa thông tin cho người dùng của chart.
● requirements.yaml: Tệp YAML liệt kê các phụ thuộc của chart.
● values.yaml: Tệp YAML chứa các giá trị cấu hình mặc định cho chart.
Lệnh helm có thể cài đặt một chart từ thư mục cục bộ, hoặc từ một phiên bản được đóng gói dưới dạng .tar.gz của cấu trúc thư mục này. Các chart đã được đóng gói cũng có thể được tải xuống và cài đặt tự động từ các kho chart hoặc repos.
Chúng ta sẽ cùng tìm hiểu về các kho chart ngay sau đây.
Kho Chart
Một kho chart của Helm là một trang web HTTP đơn giản cung cấp tệp index.yaml
và các charts được đóng gói dạng .tar.gz
. Lệnh helm có các lệnh phụ trợ giúp bạn đóng gói charts và tạo ra tệp index.yaml
cần thiết. Các tệp này có thể được phục vụ bởi bất kỳ máy chủ web nào, dịch vụ lưu trữ đối tượng nào, hoặc một dịch vụ lưu trữ tĩnh như GitHub Pages.
Helm được cấu hình sẵn với một kho chart mặc định, được gọi là stable. Kho này trỏ đến một bucket Google Storage tại https://kubernetes-charts.storage.googleapis.com
. Nguồn của kho stable có thể được tìm thấy trong kho Git của helm/charts trên GitHub.
Các kho thay thế có thể được thêm vào bằng lệnh helm repo add
. Một số kho thay thế phổ biến là:
● Kho incubator chính thức chứa các charts chưa sẵn sàng cho phiên bản ổn định.
Hướng dẫn sử dụng incubator có thể được tìm thấy trên trang GitHub chính thức của Helm charts.
● Bitnami Helm Charts cung cấp một số charts không có trong kho stable chính thức.
Dù bạn cài đặt một chart mà bạn đã phát triển cục bộ hay một chart từ kho, bạn đều cần cấu hình nó phù hợp với thiết lập cụ thể của bạn. Chúng ta sẽ đi sâu vào cấu hình ngay sau đây.
Cấu hình Chart
Một chart thường đi kèm với các giá trị cấu hình mặc định trong tệp values.yaml
. Một số ứng dụng có thể được triển khai đầy đủ với các giá trị mặc định, nhưng thông thường bạn sẽ cần ghi đè một số cấu hình để đáp ứng nhu cầu của mình.
Các giá trị được mở ra để cấu hình được xác định bởi tác giả của chart. Một số giá trị được sử dụng để cấu hình các đối tượng cơ bản của Kubernetes, và một số có thể được truyền xuống container để cấu hình ứng dụng cụ thể.
Dưới đây là một đoạn trích ví dụ về các giá trị cấu hình:
service: type: ClusterIP port: 3306
Đây là các tùy chọn để cấu hình một tài nguyên Service của Kubernetes. Bạn có thể sử dụng lệnh helm inspect values chart-name
để xem toàn bộ các giá trị cấu hình có sẵn của một chart.
Những giá trị này có thể được ghi đè bằng cách tạo tệp YAML riêng của bạn và sử dụng nó khi chạy lệnh helm install
, hoặc bằng cách đặt các tùy chọn riêng lẻ trên dòng lệnh với tham số --set
. Bạn chỉ cần chỉ định những giá trị mà bạn muốn thay đổi so với mặc định.
Một bản phát hành (release) của Helm là một chart được triển khai với cấu hình cụ thể. Chúng ta sẽ cùng tìm hiểu về bản phát hành ngay sau đây.
Bản phát hành
Trong quá trình cài đặt một chart, Helm kết hợp các template của chart với cấu hình do người dùng cung cấp cùng các giá trị mặc định trong file values.yaml
. Sau đó, các tệp này được biên dịch thành các manifest của Kubernetes và được triển khai qua API của Kubernetes. Quá trình này tạo ra một bản phát hành – một cấu hình và bản triển khai cụ thể của một chart.
Khái niệm bản phát hành rất quan trọng vì bạn có thể muốn triển khai cùng một ứng dụng nhiều lần trên một cluster. Ví dụ, bạn có thể cần nhiều máy chủ MySQL với các cấu hình khác nhau.
Bạn cũng có thể muốn nâng cấp các phiên bản khác nhau của một chart một cách riêng biệt. Có thể một ứng dụng đã sẵn sàng cho việc nâng cấp lên máy chủ MySQL mới nhưng ứng dụng khác thì chưa. Với Helm, bạn nâng cấp từng bản phát hành một cách riêng lẻ.
Bạn có thể nâng cấp bản phát hành vì chart của nó đã được cập nhật, hoặc vì bạn muốn cập nhật cấu hình của bản phát hành. Dù theo cách nào, mỗi lần nâng cấp sẽ tạo ra một phiên bản mới của bản phát hành, và Helm cho phép bạn dễ dàng quay lại phiên bản trước đó trong trường hợp có sự cố.
Tạo Charts
Nếu bạn không tìm thấy một chart nào có sẵn cho phần mềm bạn đang triển khai, bạn có thể muốn tạo chart của riêng mình. Helm có thể tạo khung sườn của thư mục chart bằng lệnh helm create chart-name
. Lệnh này sẽ tạo ra một thư mục chứa các tệp và thư mục như đã thảo luận ở phần Charts phía trên.
Từ đó, bạn sẽ muốn điền thông tin meta của chart vào tệp Chart.yaml và đưa các tệp manifest của Kubernetes vào thư mục templates. Sau đó, bạn cần tách các biến cấu hình liên quan ra khỏi các manifest và đặt chúng vào file values.yaml, sau đó sử dụng hệ thống templating để chèn lại chúng vào các template manifest của bạn.
Lệnh helm có nhiều lệnh phụ trợ giúp bạn kiểm tra, đóng gói và phục vụ các chart của mình. Để biết thêm thông tin, hãy tham khảo tài liệu chính thức của Helm về phát triển charts.
Kết luận
Cuối cùng, chúng ta đã đề cập đến những điều cơ bản khi tạo một chart khi không có chart phù hợp nào có sẵn.