Hotline:
08.8803.8803
T2-T7:
8h30 - 20h30
| CN:
8h30 - 17h00

Tutorial Thực Hành: Làm Chủ Helm Chart với Minikube từ A-Z

admin . 2:18 pm

Nếu bạn đã từng làm việc với Kubernetes, bạn sẽ biết rằng việc quản lý hàng chục, thậm chí hàng trăm file YAML cho các resource khác nhau (Deployment, Service, Ingress,…) là một cơn ác mộng. Làm sao để đóng gói, phiên bản hóa, và chia sẻ ứng dụng một cách nhất quán? Câu trả lời chính là Helm.

Để thực hành một cách an toàn và hiệu quả mà không cần một cluster Kubernetes “hàng thật”, chúng ta sẽ sử dụng Minikube – một phòng thí nghiệm Kubernetes mini chạy ngay trên máy tính của bạn.

Hãy cùng bắt đầu!


## 1. Giới thiệu: Helm và Minikube là gì?

Helm: Trình quản lý gói cho Kubernetes

Hãy tưởng tượng bạn đang quản lý một server Linux. Khi muốn cài đặt NGINX, bạn không tự mình tải mã nguồn về biên dịch, mà chỉ cần gõ sudo apt-get install nginx hoặc sudo yum install nginx. Các công cụ apt hay yum này được gọi là trình quản lý gói (package manager).

Helm chính là trình quản lý gói cho Kubernetes.

  • Đóng gói: Helm cho phép bạn đóng gói tất cả các file YAML cần thiết của một ứng dụng vào một đơn vị duy nhất gọi là Chart.
  • Quản lý: Bạn có thể cài đặt, nâng cấp, rollback, và xóa toàn bộ ứng dụng chỉ bằng một vài lệnh đơn giản, thay vì phải kubectl apply -f từng file một.
  • Tùy biến: Helm sử dụng cơ chế template, cho phép bạn dễ dàng tùy chỉnh cấu hình cho các môi trường khác nhau (dev, staging, production) mà không cần sửa đổi file YAML gốc.

Minikube: Kubernetes trên máy tính của bạn

Minikube là một công cụ giúp bạn tạo ra một cluster Kubernetes chỉ có một node ngay trên máy tính cá nhân (laptop, PC). Nó chạy bên trong một máy ảo (VM) hoặc container, cung cấp một môi trường Kubernetes đầy đủ tính năng để học tập, phát triển và thử nghiệm.

Sử dụng Minikube giúp chúng ta:

  • An toàn: Thỏa sức “vọc vạch” mà không sợ làm hỏng cluster thật.
  • Tiện lợi: Không cần chi phí cho cloud hay hạ tầng phức tạp.
  • Nhanh chóng: Dễ dàng cài đặt và khởi tạo một môi trường Kubernetes trong vài phút.

## 2. Chuẩn bị môi trường

Trước khi bắt đầu, chúng ta cần cài đặt 3 công cụ chính.

Lưu ý: Luôn tham khảo trang chủ của các công cụ để có hướng dẫn cài đặt mới và chính xác nhất cho hệ điều hành của bạn.

Cài đặt Minikube

Minikube sẽ tạo ra cluster Kubernetes cho chúng ta.

Cài đặt kubectl

kubectl là công cụ dòng lệnh (CLI) chính để tương tác với bất kỳ cluster Kubernetes nào, bao gồm cả Minikube.

Cài đặt Helm

Và đây là nhân vật chính của chúng ta.

Kiểm tra các phiên bản

Sau khi cài đặt xong, hãy mở terminal và chạy các lệnh sau để xác nhận mọi thứ đã sẵn sàng.

Bash

# Kiểm tra phiên bản Minikube
minikube version

# Kiểm tra phiên bản kubectl
kubectl version --client

# Kiểm tra phiên bản Helm
helm version

Nếu tất cả các lệnh đều trả về thông tin phiên bản mà không báo lỗi, xin chúc mừng, môi trường của bạn đã sẵn sàng!


## 3. Bắt đầu với Minikube + Helm

Khởi động Minikube

Bây giờ, hãy tạo cluster Kubernetes đầu tiên của bạn.

Bash

# Lệnh này sẽ tải về image cần thiết và khởi tạo một cluster
minikube start

Lần đầu tiên chạy lệnh này có thể mất vài phút. Minikube sẽ tự động cấu hình kubectl để trỏ vào cluster vừa tạo.

Cài đặt một Helm chart sẵn có

Cách nhanh nhất để trải nghiệm Helm là cài đặt một chart đã được cộng đồng tạo sẵn. Chúng ta sẽ cài đặt NGINX từ repository của Bitnami.

Đầu tiên, chúng ta cần thêm repository của Bitnami vào Helm. Repository giống như một “kho ứng dụng” chứa các chart.

Bash

# Thêm repository Bitnami
helm repo add bitnami https://charts.bitnami.com/bitnami

# Cập nhật danh sách chart từ tất cả các repository
helm repo update

Bây giờ, hãy cài đặt NGINX.

Bash

# Cài đặt chart nginx của bitnami
# 'my-nginx' là tên release (bản cài đặt) của chúng ta
helm install my-nginx bitnami/nginx

Giải thích lệnh:

  • helm install: Lệnh để cài đặt một chart.
  • my-nginx: Đây là tên release. Bạn có thể đặt tên bất kỳ để quản lý bản cài đặt của mình.
  • bitnami/nginx: Tên của chart cần cài đặt, theo định dạng <tên-repository>/<tên-chart>.

Kiểm tra resource đã được deploy

Helm vừa tự động tạo ra các resource Kubernetes cần thiết cho NGINX. Hãy dùng kubectl để kiểm tra.

Bash

# Liệt kê tất cả các resource trong namespace mặc định
kubectl get all

Bạn sẽ thấy Pod, Service, Deployment,… của NGINX đã được tạo và đang chạy. Chỉ với một lệnh helm install, chúng ta đã развертывание một ứng dụng hoàn chỉnh!


## 4. Tạo Helm Chart đầu tiên

Bây giờ, chúng ta sẽ tự tạo một chart cho riêng mình.

Lệnh helm create

Helm cung cấp một lệnh tiện lợi để tạo ra cấu trúc thư mục chuẩn cho một chart mới.

Bash

# Tạo một chart mới có tên là my-first-app
helm create my-first-app

Lệnh này sẽ tạo một thư mục my-first-app với cấu trúc như sau:

my-first-app/
├── Chart.yaml          # Thông tin metadata về chart
├── charts/             # Nơi chứa các chart phụ thuộc (subcharts)
├── templates/          # Chứa các file template YAML của Kubernetes
│   ├── NOTES.txt
│   ├── _helpers.tpl
│   ├── deployment.yaml
│   ├── hpa.yaml
│   ├── ingress.yaml
│   ├── service.yaml
│   └── serviceaccount.yaml
└── values.yaml         # File cấu hình mặc định cho chart

Giải thích cấu trúc thư mục

  • Chart.yaml: Giống như file package.json trong Node.js, nó chứa các thông tin cơ bản về chart như tên, phiên bản, mô tả.
  • values.yaml: Đây là file quan trọng nhất khi bạn sử dụng chart. Nó chứa tất cả các giá trị cấu hình mà bạn có thể tùy chỉnh. Ví dụ: số lượng replica, phiên bản image, port,…
  • templates/: Thư mục này chứa các file manifest YAML của Kubernetes (Deployment, Service,…). Tuy nhiên, chúng không phải là file YAML tĩnh. Chúng chứa các biến (placeholder) để đọc giá trị từ file values.yaml. Ví dụ, trong deployment.yaml, bạn sẽ thấy replicaCount: {{ .Values.replicaCount }}.

Tùy chỉnh values.yaml

Hãy mở file my-first-app/values.yaml bằng trình soạn thảo văn bản yêu thích của bạn.

Tìm đến các dòng sau:

YAML

replicaCount: 1

image:
  repository: nginx
  pullPolicy: IfNotPresent
  tag: ""

service:
  type: ClusterIP
  port: 80

Chúng ta hãy thử thay đổi một vài giá trị:

  • Đổi service.type từ ClusterIP thành NodePort để có thể truy cập từ bên ngoài Minikube.
  • Đổi service.port từ 80 thành 8080.

Deploy chart vừa tạo

Bây giờ, hãy cài đặt chart “cây nhà lá vườn” này lên Minikube.

Bash

# 'my-app' là tên release
# './my-first-app' là đường dẫn đến thư mục chart của chúng ta
helm install my-app ./my-first-app

Vậy là bạn đã tạo và развертывание thành công chart đầu tiên của mình!


## 5. Quản lý Release

“Release” là một thực thể (instance) của một chart đang chạy trên cluster. Helm cung cấp đầy đủ công cụ để quản lý vòng đời của release.

  • helm list: Liệt kê tất cả các release đang được развертывание.Bashhelm list
  • helm upgrade: Nâng cấp một release với cấu hình mới.
  • helm rollback: Quay trở lại một phiên bản cũ của release.

Thực hành Upgrade Chart

Giả sử ứng dụng của chúng ta cần tăng khả năng chịu tải. Chúng ta sẽ nâng cấp release my-app để tăng số replica từ 1 lên 2.

  1. Mở lại file my-first-app/values.yaml.
  2. Tìm dòng replicaCount: 1 và sửa thành replicaCount: 2.
  3. Lưu file lại và chạy lệnh sau:Bashhelm upgrade my-app ./my-first-app
  4. Kiểm tra lại số lượng Pod:Bashkubectl get pods Bạn sẽ thấy bây giờ có 2 Pod của ứng dụng đang chạy!

Thực hành Rollback

Ôi không! Phiên bản mới bị lỗi và chúng ta cần quay lại ngay lập tức.

  1. Đầu tiên, hãy xem lịch sử các phiên bản của release:Bashhelm history my-app Bạn sẽ thấy có 2 REVISION (phiên bản), 1 là bản cài đặt đầu tiên, 2 là bản vừa nâng cấp.
  2. Bây giờ, hãy rollback về phiên bản 1:Bashhelm rollback my-app 1
  3. Kiểm tra lại số lượng Pod:Bashkubectl get pods Ứng dụng đã quay trở lại trạng thái 1 Pod như ban đầu. Thật tuyệt vời!

## 6. Nâng cao

Override giá trị bằng --set

Đôi khi, bạn chỉ muốn thay đổi một giá trị nhỏ khi cài đặt mà không muốn sửa cả file values.yaml. Lệnh --set là dành cho bạn.

Bash

# Cài đặt chart nhưng ghi đè replicaCount thành 3
helm install another-app ./my-first-app --set replicaCount=3

Sử dụng nhiều file values khác nhau

Trong thực tế, môi trường dev và prod sẽ có cấu hình khác nhau. Helm cho phép bạn tạo nhiều file values và chọn file để sử dụng khi cài đặt.

  1. Tạo 2 file mới: values.dev.yamlvalues.prod.yaml.
    • values.dev.yaml: replicaCount: 1
    • values.prod.yaml: replicaCount: 5
  2. Để развертывание môi trường prod, bạn dùng cờ -f (hoặc --values):Bashhelm upgrade my-app ./my-first-app -f values.prod.yaml Cách làm này giúp quản lý cấu hình cho nhiều môi trường một cách cực kỳ hiệu quả.

Debug khi chart deploy thất bại

Khi helm install báo lỗi, đây là các bước debug cơ bản:

  1. Xem trạng thái release:Bashhelm status my-app
  2. Kiểm tra Pod: Lỗi thường xảy ra ở tầng Pod.Bash# Pod có đang chạy không? Hay bị kẹt ở Pending/CrashLoopBackOff? kubectl get pods
  3. Xem chi tiết Pod: Lệnh describe sẽ cho bạn biết lý do Pod không chạy được (ví dụ: không kéo được image, thiếu tài nguyên).Bashkubectl describe pod <tên-pod-bị-lỗi>
  4. Xem log của Pod: Nếu Pod chạy nhưng ứng dụng bên trong bị lỗi, hãy xem log của nó.Bashkubectl logs <tên-pod-bị-lỗi>

## 7. Kết luận

Qua buổi thực hành hôm nay, chúng ta đã cùng nhau đi qua những kiến thức nền tảng và quan trọng nhất về Helm:

  • Hiểu được vai trò của Helm như một trình quản lý gói cho Kubernetes.
  • Sử dụng Minikube để tạo môi trường thực hành an toàn.
  • Biết cách cài đặt, tạo mới, tùy chỉnh và развертывание một Helm chart.
  • Nắm vững các thao tác quản lý vòng đời release: install, list, upgrade, rollback.
  • Làm quen với các kỹ thuật nâng cao như --set và quản lý cấu hình đa môi trường.

Trong môi trường làm việc thực tế, các ứng dụng microservices phức tạp bao gồm hàng chục dịch vụ khác nhau. Việc quản lý chúng bằng kubectl thủ công là không thể. Helm chart chính là tiêu chuẩn vàng để đóng gói và quản lý những ứng dụng phức tạp đó một cách nhất quán và tự động hóa.

Các bước học tiếp theo:

  • Helm Repository: Tìm hiểu cách tự tạo và quản lý repository riêng cho team/công ty.
  • ChartMuseum: Một trong những công cụ phổ biến để host Helm repository của riêng bạn.
  • Helmfile: Một công cụ khai báo giúp bạn quản lý việc развертывание hàng loạt Helm chart cùng một lúc.

Cảm ơn các bạn đã tham gia buổi học. Hãy tiếp tục thực hành, vì đó là con đường duy nhất để làm chủ công nghệ!