Lab 1 — Helm Fundamentals
🎯 Mục tiêu
Sau Lab này, bạn sẽ:
- Hiểu Helm giải quyết vấn đề gì trong Kubernetes.
- Phân biệt được Chart và Release.
- Biết các thao tác Helm cơ bản:
install,upgrade,uninstall,list,status. - Hiểu Helm hoạt động như thế nào ở mức tổng quát.
- Biết cách kiểm tra một Helm Release thay vì "chạy lệnh rồi hy vọng nó hoạt động".
Mục tiêu của Lab này không phải học thuộc command.
Bạn chỉ cần hiểu được:
Helm dùng Chart ↓ tạo ra Kubernetes resources ↓ và quản lý chúng theo Release
1. 🤔 Vấn đề thực tế
Giả sử bạn có một application đơn giản gồm:
Todo Application
│
├── Deployment
├── Service
├── ConfigMap
└── Ingress
Nếu deploy thủ công, bạn có thể có:
kubernetes/
├── deployment.yaml
├── service.yaml
├── configmap.yaml
└── ingress.yaml
Sau đó:
kubectl apply -f kubernetes/
Ban đầu cách này hoàn toàn ổn.
Nhưng một thời gian sau, application có nhiều environment:
dev
staging
production
và mỗi environment lại khác nhau:
dev
├── replicas: 1
└── image: todo-api:dev
staging
├── replicas: 2
└── image: todo-api:staging
production
├── replicas: 5
└── image: todo-api:1.5.0
Nếu tiếp tục copy YAML:
deployment-dev.yaml
deployment-staging.yaml
deployment-prod.yaml
rất dễ xảy ra:
❌ YAML bị duplicate
❌ sửa một nơi nhưng quên sửa nơi khác
❌ khó maintain
❌ khó version
❌ khó rollback
Đây là lúc Helm trở nên hữu ích.
2. 🧠 Helm giải quyết vấn đề gì?
Hãy coi Kubernetes YAML là bản thiết kế.
Ví dụ:
replicas: 3
image: todo-api:1.5.0
Helm cho phép bạn biến những phần có thể thay đổi thành configuration:
replicaCount: 3
image:
repository: todo-api
tag: "1.5.0"
Sau đó Helm sử dụng configuration này để tạo Kubernetes manifest.
Có thể hình dung:
Helm Chart
│
┌────────┴────────┐
│ │
templates/ values.yaml
│ │
└────────┬────────┘
│
▼
Helm rendering
│
▼
Kubernetes Manifest
│
▼
Kubernetes
Điểm quan trọng
Helm không thay thế Kubernetes.
Helm chỉ giúp bạn:
Tạo và quản lý Kubernetes manifests một cách có tổ chức và reusable hơn.
3. 🧠 Helm Chart là gì?
Trước tiên hãy hiểu Chart.
Một Helm Chart có thể hiểu đơn giản là:
Một package chứa template và configuration để deploy một application lên Kubernetes.
Ví dụ:
todo-chart/
├── Chart.yaml
├── values.yaml
└── templates/
├── deployment.yaml
└── service.yaml
Chart giống như một bộ khuôn.
Ví dụ cùng một Chart:
todo-chart
│
├── values-dev.yaml
│ ↓
│ Todo Dev
│
├── values-staging.yaml
│ ↓
│ Todo Staging
│
└── values-prod.yaml
↓
Todo Production
Thay vì tạo 3 bộ YAML riêng biệt, chúng ta có thể sử dụng cùng một Chart với configuration khác nhau.
Chart = package / template để deploy application.
4. 🧠 Release là gì?
Đây là khái niệm rất quan trọng.
Nếu Chart là bộ khuôn, thì Release là một instance cụ thể được deploy từ bộ khuôn đó.
Ví dụ:
helm install todo-dev ./todo-chart
Bạn tạo Release:
todo-dev
Sau đó:
helm install todo-prod ./todo-chart
Bạn lại có:
todo-prod
Hai Release sử dụng cùng một Chart:
todo-chart
/ \
/ \
▼ ▼
todo-dev todo-prod
│ │
▼ ▼
Kubernetes Kubernetes
Vì vậy:
Chart = Cách deploy application
Release = Một lần deploy cụ thể của Chart
Đây là hai khái niệm bạn cần nhớ nhất trong Lab này.
5. 🏗️ Helm hoạt động như thế nào?
Ở mức đơn giản:
Helm Chart
│
┌───────┴────────┐
│ │
templates/ values.yaml
│ │
└───────┬────────┘
│
▼
Helm Engine
│
▼
Kubernetes YAML
│
▼
Kubernetes API
│
▼
Deployment / Service
/ \
/ \
Pod Pod
Helm lấy:
templates
+
values
sau đó render thành Kubernetes YAML.
Cuối cùng Kubernetes mới thực sự tạo:
Deployment
Service
Pod
ConfigMap
...
Điều này rất quan trọng khi debug
Nếu Helm deployment bị lỗi, bạn không nên nghĩ:
"Helm bị lỗi."
Hãy chia thành hai phần:
Helm
↓
Render YAML
↓
Kubernetes
↓
Create resources
Có thể lỗi nằm ở:
Helm template
hoặc:
Kubernetes manifest
hoặc:
Application
Sau này đây sẽ là cách tư duy rất quan trọng khi troubleshooting.
6. 🛠️ Chuẩn bị môi trường
Bạn cần có:
✓ Kubernetes Cluster
✓ kubectl
✓ Helm
Kiểm tra:
kubectl version --client
và:
helm version
Kiểm tra Kubernetes:
kubectl get nodes
Nếu thấy node ở trạng thái:
STATUS
Ready
là có thể bắt đầu.
7. 🧪 Lab — Tạo Helm Chart đầu tiên
Bước 1 — Tạo Chart
Tạo một Chart mới:
helm create my-app
Kiểm tra:
ls my-app
Bạn sẽ thấy đại khái:
my-app/
├── Chart.yaml
├── values.yaml
├── charts/
├── templates/
└── ...
Helm đã tạo sẵn một Chart mẫu.
Bước 2 — Xem Chart
Di chuyển vào thư mục:
cd my-app
Xem Chart.yaml:
cat Chart.yaml
Đây là nơi chứa thông tin metadata của Chart như:
name
version
description
Bạn chưa cần nhớ chi tiết.
Chỉ cần hiểu:
Chart.yamllà thông tin mô tả Chart.
8. 🔍 Xem Helm sẽ tạo ra gì
Đây là một command cực kỳ hữu ích:
helm template my-app .
Helm sẽ render Chart thành Kubernetes YAML.
Bạn có thể thấy:
apiVersion: apps/v1
kind: Deployment
...
và:
apiVersion: v1
kind: Service
...
Điều gì vừa xảy ra?
Chưa có Pod nào được tạo.
Helm chỉ làm:
Chart
↓
Render
↓
YAML
Đây là một trong những command bạn sẽ sử dụng rất nhiều khi debug Helm:
helm template
Mẹo thực tế: Khi một Helm Chart được viết bởi AI hoặc một người khác, hãy
helm templatetrước để xem nó thực sự generate ra Kubernetes manifest gì.
9. 🚀 Helm Install
Bây giờ chúng ta thực sự deploy Chart.
helm install my-app .
Nếu thành công, Helm sẽ tạo một Release có tên:
my-app
Kiểm tra:
helm list
Bạn sẽ thấy:
NAME
my-app
10. 🔍 Kiểm tra Release
Đây là command rất quan trọng:
helm status my-app
Bạn sẽ thấy thông tin về Release:
NAME: my-app
STATUS: deployed
Có thể kiểm tra Kubernetes:
kubectl get pods
và:
kubectl get svc
Bạn sẽ thấy các resources được tạo bởi Chart.
Có thể hình dung:
helm install
│
▼
Release
my-app
│
▼
Kubernetes Resources
│
├── Deployment
├── Service
└── Pod
11. 🔄 Helm Upgrade
Trong production, application liên tục thay đổi.
Ví dụ bạn muốn deploy version mới:
v1.0.0
↓
v1.1.0
Với Helm, bạn có thể upgrade Release:
helm upgrade my-app .
Helm sẽ cập nhật Release thay vì tạo một Release hoàn toàn mới.
my-app
│
├── v1
│
└── v2
Kiểm tra:
helm status my-app
và:
helm history my-app
12. 📜 Helm History
Tại sao cần history?
Hãy tưởng tượng production:
Deploy v1.0
↓
Deploy v1.1
↓
Deploy v1.2
↓
🔥 Application lỗi
Bạn cần biết:
"Production đang ở revision nào?"
Chạy:
helm history my-app
Bạn sẽ thấy các revision.
Ví dụ:
REVISION STATUS
1 superseded
2 superseded
3 deployed
Đây là một trong những lý do Helm hữu ích hơn việc chỉ:
kubectl apply -f ...
Helm quản lý lịch sử của Release.
13. ↩️ Helm Rollback
Nếu revision mới bị lỗi:
helm rollback my-app 2
Helm sẽ quay lại revision 2.
Kiểm tra:
helm history my-app
Bạn có thể hình dung:
Revision 1
↓
Revision 2
↓
Revision 3 ← Production bị lỗi
│
│ rollback
▼
Revision 2
Production Tip
Rollback là một trong những tính năng rất đáng giá của Helm.
Tuy nhiên:
Rollback Helm không có nghĩa mọi thứ trong application đều tự động quay lại hoàn toàn như cũ.
Ví dụ database migration đã chạy:
Helm Release
│
├── Deployment
└── DB Migration
Bạn rollback Deployment nhưng database schema có thể đã thay đổi.
Vì vậy production vẫn cần:
Helm rollback
+
Database migration strategy
+
Application compatibility
Đừng xem helm rollback là "nút Undo tuyệt đối".
14. 🗑️ Helm Uninstall
Khi không cần Release nữa:
helm uninstall my-app
Kiểm tra:
helm list
và:
kubectl get pods
Các resources được Helm quản lý sẽ được gỡ bỏ theo lifecycle của Release.
15. 🔁 Thực hành lại từ đầu
Hãy thử toàn bộ lifecycle:
helm create my-app
cd my-app
helm install my-app .
helm list
helm status my-app
helm history my-app
helm upgrade my-app .
helm history my-app
helm rollback my-app 1
helm uninstall my-app
Bạn không cần học thuộc tất cả.
Hãy nhớ lifecycle:
helm install
│
▼
Release
│
▼
helm upgrade
│
▼
Revision
│
┌────┴────┐
│ │
helm history │
│ │
▼ ▼
Revision rollback
│
▼
Previous
Revision
│
▼
uninstall
16. 🧠 Một vài command quan trọng cần nhớ
Không cần nhớ hàng chục command Helm.
Ở giai đoạn đầu, chỉ cần nhóm này:
| Command | Dùng để làm gì? |
|---|---|
helm create |
Tạo Chart |
helm install |
Deploy Chart |
helm upgrade |
Update Release |
helm list |
Xem các Release |
helm status |
Xem trạng thái Release |
helm history |
Xem lịch sử Release |
helm rollback |
Quay lại revision trước |
helm uninstall |
Xóa Release |
helm template |
Render Chart thành YAML |
Đặc biệt nhớ:
helm template
vì đây là command rất hữu ích khi review và debug Chart.
17. 🧩 Helm Repository là gì?
Một khái niệm khác bạn sẽ gặp khi sử dụng Helm là Helm Repository.
Nếu Chart là package:
my-app
thì Helm Repository giống như:
Package Repository
Ví dụ:
Helm Repository
│
┌─────────────┼─────────────┐
▼ ▼ ▼
Redis Nginx Prometheus
Chart Chart Chart
Bạn có thể thêm một repository:
helm repo add <repo-name> <repo-url>
Sau đó tìm Chart:
helm search repo <repo-name>
và sử dụng Chart từ repository.
Ở Lab này bạn chưa cần đi sâu vào Repository. Chúng ta sẽ quay lại chủ đề này ở các Lab sau.
18. ⚠️ Production Tips
1. Đừng helm upgrade một cách mù quáng
Trước khi upgrade production, nên kiểm tra:
helm template ...
hoặc:
helm upgrade --dry-run ...
Mục tiêu là biết:
"Helm sắp gửi manifest gì cho Kubernetes?"
2. Luôn biết Release nào đang chạy
Khi production có nhiều application:
payment-api
user-api
todo-api
order-api
hãy sử dụng:
helm list
và:
helm status <release>
để xác định đúng Release.
Tránh việc đang debug:
production
nhưng lại vô tình kiểm tra:
staging
3. Release name rất quan trọng
Ví dụ:
helm install todo-api-prod ./todo-chart
thì:
todo-api-prod
là tên Release.
Nó giúp bạn dễ dàng quản lý:
helm status todo-api-prod
helm history todo-api-prod
helm rollback todo-api-prod 2
Trong production nên đặt tên Release có ý nghĩa.
19. 🧠 Helm vs kubectl
Đây là điểm người mới rất dễ nhầm.
kubectl
Dùng để:
Làm việc trực tiếp với Kubernetes.
Ví dụ:
kubectl get pods
kubectl describe pod
kubectl logs
kubectl apply
Helm
Dùng để:
Package và quản lý việc deploy application lên Kubernetes.
Ví dụ:
helm install
helm upgrade
helm rollback
Có thể hình dung:
Helm
│
│ deploy/manage
▼
Kubernetes
│
┌───────┼───────┐
▼ ▼ ▼
Pod Service ConfigMap
│
│ inspect/debug
▼
kubectl
Trong công việc thực tế, bạn thường dùng cả hai:
Helm
↓
Deploy application
kubectl
↓
Inspect / Debug application
Không phải:
Helm vs kubectl
mà là:
Helm + kubectl
20. 🧪 Bài tập thực hành
Exercise 1 — Helm Lifecycle
Thực hiện:
Create
↓
Install
↓
Status
↓
Upgrade
↓
History
↓
Rollback
↓
Uninstall
Mục tiêu là hiểu lifecycle của một Helm Release.
Exercise 2 — Inspect Rendered Manifest
Chạy:
helm template my-app .
Sau đó tìm:
Deployment
Service
và trả lời:
Helm đã generate những Kubernetes resources nào?
Exercise 3 — So sánh Helm và Kubernetes
Hãy tự trả lời:
helm install làm gì?
helm upgrade làm gì?
helm rollback làm gì?
helm template làm gì?
kubectl get pods dùng để làm gì?
Nếu bạn giải thích được bằng lời mà không cần nhìn tài liệu, bạn đã đạt mục tiêu Lab.
21. 🎯 Tổng kết
Sau Lab này, bạn chỉ cần nhớ 5 ý chính:
1. Helm là package/deployment manager cho Kubernetes.
2. Chart là package/template để deploy application.
3. Release là một instance cụ thể của Chart.
4. Helm render Chart → Kubernetes Manifest → Kubernetes.
5. Helm giúp quản lý lifecycle:
install → upgrade → history → rollback → uninstall
Toàn bộ Lab có thể cô đọng thành một diagram:
Helm Chart
│
┌───────┴────────┐
│ │
templates/ values.yaml
│ │
└───────┬────────┘
│
▼
Helm Render
│
▼
Kubernetes YAML
│
▼
Kubernetes
│
▼
Release
│
┌──────────┼──────────┐
│ │ │
upgrade history rollback
│ │
└──────────┬──────────┘
▼
uninstall
Mental model cần nhớ:
Chart = Blueprint Release = Deployed instance Helm = Tool quản lý lifecycle Kubernetes = Nơi application thực sự chạyỞ các Lab tiếp theo, chúng ta sẽ bắt đầu đi vào Chart Structure và hiểu tại sao một Helm Chart lại có
Chart.yaml,values.yaml,templates/và_helpers.tpl.
All rights reserved