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, Staging và Production 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