0

Bài 31. Helm - Nói lời tạm biệt với hàng trăm file YAML

"Bạn vừa triển khai xong ứng dụng đầu tiên lên Kubernetes. Mọi thứ đều ổn... cho đến khi số lượng file YAML tăng lên."


Mở đầu

Hãy tưởng tượng bạn có một ứng dụng gồm:

  • 1 Deployment
  • 2 Service
  • 1 Ingress
  • 1 ConfigMap
  • 2 Secret
  • 1 HorizontalPodAutoscaler

Ngay lập tức bạn đã có 8 file YAML.

Nếu hệ thống có 20 microservices thì sao?

Bạn sẽ phải quản lý hơn 160 file YAML.

Chưa kể mỗi môi trường (Development, Staging, Production) lại có cấu hình khác nhau.

Lúc này, việc copy rồi sửa từng file YAML trở thành một cơn ác mộng.

Đó chính là lý do Helm ra đời.


1. Helm là gì?

Có thể xem Helm giống như apt trên Ubuntu hay npm của Node.js, nhưng dành cho Kubernetes.

Thay vì viết và quản lý hàng chục file YAML thủ công, bạn chỉ cần cài đặt một Chart.

helm install my-app ./my-chart

Helm sẽ tự tạo toàn bộ Deployment, Service, ConfigMap, Secret... từ các template đã chuẩn bị sẵn.


2. Vấn đề của YAML thuần

Giả sử bạn có một Deployment.

replicas: 2

image:
  repository: my-app
  tag: v1.0.0

Đến môi trường Production.

replicas: 5

image:
  repository: my-app
  tag: v1.0.0

Đến Staging.

replicas: 3

image:
  repository: my-app
  tag: v1.0.0

Bạn bắt đầu tạo:

deployment-dev.yaml

deployment-staging.yaml

deployment-prod.yaml

Rồi Service.

Rồi Ingress.

Rồi ConfigMap.

Số lượng file tăng lên rất nhanh.


3. Helm giải quyết như thế nào?

Helm biến YAML thành mẫu (template).

Thay vì viết:

replicas: 3

Bạn viết:

replicas: {{ .Values.replicaCount }}

Giá trị thật sẽ nằm trong file:

values.yaml

Ví dụ:

replicaCount: 3

image:
  repository: my-app
  tag: v1.0.0

Muốn Production chạy 10 Pod?

Chỉ cần đổi:

replicaCount: 10

Không cần sửa Deployment nữa.


4. Chart là gì?

Một Chart là một gói cài đặt Kubernetes.

Bên trong thường có cấu trúc như sau:

my-chart/

├── Chart.yaml
├── values.yaml
└── templates/
    ├── deployment.yaml
    ├── service.yaml
    ├── ingress.yaml
    └── configmap.yaml

Có thể hiểu đơn giản:

  • templates/ → bản thiết kế
  • values.yaml → dữ liệu đầu vào
  • Chart.yaml → thông tin của Chart

5. Ví dụ thực tế

Giả sử nhóm của bạn phát triển một ứng dụng.

Development:

replicas = 1

Production:

replicas = 5

Nếu không dùng Helm:

Bạn phải duy trì nhiều file YAML khác nhau.

Nếu dùng Helm:

values-dev.yaml

values-prod.yaml

Triển khai chỉ còn:

helm install my-app ./chart -f values-dev.yaml

hoặc

helm install my-app ./chart -f values-prod.yaml

Cùng một bộ template, nhưng cấu hình khác nhau.


6. Lợi ích của Helm

Sau khi sử dụng Helm, bạn sẽ thấy:

  • Không còn phải copy hàng loạt file YAML.
  • Dễ tái sử dụng cho nhiều dự án.
  • Quản lý nhiều môi trường đơn giản hơn.
  • Nâng cấp hoặc rollback ứng dụng dễ dàng.
  • Chia sẻ Chart cho cả nhóm cùng sử dụng.

7. Khi nào nên dùng Helm?

Nếu ứng dụng của bạn chỉ có vài file YAML để học hoặc thử nghiệm, Helm có thể chưa thật sự cần thiết.

Nhưng khi bắt đầu làm việc với nhiều dịch vụ, nhiều môi trường hoặc nhiều thành viên trong nhóm, Helm gần như trở thành tiêu chuẩn để quản lý cấu hình Kubernetes.


Tổng kết

Helm không thay thế Kubernetes.

Helm chỉ giúp bạn quản lý Kubernetes thông minh hơn.

Thay vì phải chỉnh sửa hàng chục file YAML mỗi lần triển khai, bạn chỉ cần thay đổi vài giá trị trong values.yaml, còn Helm sẽ lo phần còn lại.

Đó là lý do Helm thường được ví như "Package Manager của Kubernetes".


Bài tiếp theo

Helm giúp chúng ta quản lý YAML hiệu quả hơn.

Nhưng nếu có Development, StagingProduction với rất nhiều điểm khác nhau thì sao? Chẳng lẽ mỗi môi trường lại cần một bộ values.yaml riêng?

Trong bài tiếp theo, chúng ta sẽ tìm hiểu Kustomize – một cách tiếp cận khác để quản lý nhiều môi trường mà không cần sao chép các file YAML.


All rights reserved

Viblo
Hãy đăng ký một tài khoản Viblo để nhận được nhiều bài viết thú vị hơn.
Đăng kí