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 -ftừ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.
- Trang chủ: https://minikube.sigs.k8s.io/docs/start/
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.
- Trang chủ: https://helm.sh/docs/intro/install/
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ư filepackage.jsontrong 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ừ filevalues.yaml. Ví dụ, trongdeployment.yaml, bạn sẽ thấyreplicaCount: {{ .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.typetừClusterIPthànhNodePortđể có thể truy cập từ bên ngoài Minikube. - Đổi
service.porttừ80thành8080.
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 listhelm 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.
- Mở lại file
my-first-app/values.yaml. - Tìm dòng
replicaCount: 1và sửa thànhreplicaCount: 2. - Lưu file lại và chạy lệnh sau:Bash
helm upgrade my-app ./my-first-app - Kiểm tra lại số lượng Pod:Bash
kubectl get podsBạ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.
- Đầu tiên, hãy xem lịch sử các phiên bản của release:Bash
helm history my-appBạ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. - Bây giờ, hãy rollback về phiên bản 1:Bash
helm rollback my-app 1 - Kiểm tra lại số lượng Pod:Bash
kubectl 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.
- Tạo 2 file mới:
values.dev.yamlvàvalues.prod.yaml.values.dev.yaml:replicaCount: 1values.prod.yaml:replicaCount: 5
- Để развертывание môi trường prod, bạn dùng cờ
-f(hoặc--values):Bashhelm upgrade my-app ./my-first-app -f values.prod.yamlCá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:
- Xem trạng thái release:Bash
helm status my-app - 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 - Xem chi tiết Pod: Lệnh
describesẽ 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> - 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ó.Bash
kubectl 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ư
--setvà 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ệ!

