---
id: kubernetes-helm
title: "Helm"
shortTitle: "Helm"
track: kubernetes
trackTitle: "Kubernetes"
order: 8
level: important
status: published
estimatedMinutes: 35
prerequisites:
  - kubernetes-init-sidecar
next: kubernetes-ingress
reviewedAgainst: 2026-10-12
sources:
  - title: "Helm charts"
    url: https://helm.sh/docs/topics/charts/
  - title: "helm template"
    url: https://helm.sh/docs/helm/helm_template/
---

# Helm

Helm đóng một bộ manifest Kubernetes thành chart và điền giá trị lúc cài. `helm template` in YAML mà không cần cluster. Lab dùng lệnh đó.

## Để làm gì

Tạo một chart local, đổi một giá trị, và xem Deployment sinh ra. Không `helm install` lên cluster.

## Gồm những gì

- `Chart.yaml`, `values.yaml`, `templates/`.
- `helm create`, `helm template`.
- Release là một lần cài có tên.

Không gồm chart repo công cộng và không gồm Helm 2. Bản 3 không còn Tiller.

## Dùng khi nào

Cùng một app cần hai bộ value, lab và production: image tag, số replica, host. Copy hai thư mục YAML sẽ lệch. Chart giữ một template.

Đừng `helm install` một chart tải từ mạng vào cluster production khi bạn chưa đọc template. Nhiều chart tạo ClusterRole và CRD.

## Kiến thức cốt lõi

Chart là thư mục. `Chart.yaml` có `name` và `version` của chart, khác `appVersion` là version app. `values.yaml` là mặc định. `-f prod.yaml` đè từng khóa lúc gọi lệnh.

Template dùng giá trị đó để ra manifest. `helm template lab ./lab-chart` in ra stdout, không gọi API Kubernetes. `helm install` mới tạo release trên cluster. `helm upgrade` đổi release. `helm uninstall` xóa resource của release, không xóa resource bạn đã apply bằng kubectl bên ngoài.

Helm 3 chạy client. Không có Tiller trong cluster. Quyền là quyền kubeconfig của bạn.

## Lệnh và code mẫu

Cần `helm` trên PATH. Chưa có thì đọc cấu trúc, không cài cả Kubernetes.

```bash
mkdir -p ~/devops-lab/helm && cd ~/devops-lab/helm
helm create lab-chart
helm template lab ./lab-chart --set replicaCount=2 | findstr /C:"replicas:"
```

Trên bash, đổi `findstr` thành `grep replicas:`.

Dọn `~/devops-lab/helm` khi xong. Không cần cluster nên không có gì để uninstall.

## Thực hành

1. Nếu có Helm, chạy ba lệnh và tìm `replicas: 2`.
2. Mở `values.yaml` và thấy khóa `replicaCount` mặc định là 1 trước khi `--set`.
3. Không `helm install`.

## Kết quả mong đợi

YAML in ra có `replicas: 2`. Cluster không đổi.

## Checklist

- [ ] `helm template` trước `helm install` với chart chưa đọc.
- [ ] Value production nằm trong file được review, không chỉ `--set` trên máy một người.
- [ ] Không dùng Helm 2.

## Lỗi thường gặp

**Sửa template xong không nâng version chart.** Người khác vẫn kéo bản cũ từ repo chart. Tăng version khi nội dung chart đổi.

**`helm uninstall` tưởng chỉ xóa Deployment.** Nó xóa resource thuộc release, kể cả Service và PVC nếu chart đã tạo và không để annotation giữ lại. Đọc `helm template` trước khi uninstall trên môi trường có dữ liệu.

## Nguồn

1. [Charts](https://helm.sh/docs/topics/charts/) — cấu trúc chart và values.
2. [helm template](https://helm.sh/docs/helm/helm_template/) — render local, không cần cluster.

## Tiếp theo

[Ingress](./05-ingress.md)
