0

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 ChartRelease.
  • 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.yaml là 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 template trướ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/_helpers.tpl.


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í