Bỏ qua

📅 Ngày 5: Kustomize — "Vũ Khí" Bí Mật

🎯 Mục tiêu hôm nay

  • Hiểu Kustomize là gì và Base/Overlays pattern
  • Tạo cấu trúc multi-environment (Dev, Prod) với Kustomize
  • Deploy 2 môi trường khác nhau từ cùng một code gốc qua ArgoCD

📖 Lý thuyết

Kustomize là gì?

Kustomize cho phép bạn tùy chỉnh Kubernetes YAML mà không cần template engine. Thay vì dùng biến {{ .Values.xxx }} như Helm, Kustomize dùng patchesoverlays.

┌──────────────────────────────────────────────────────┐
│                Kustomize Structure                    │
│                                                      │
│  base/                   ← Code gốc (chung)         │
│  ├── deployment.yaml                                 │
│  ├── service.yaml                                    │
│  └── kustomization.yaml                              │
│                                                      │
│  overlays/                                           │
│  ├── dev/                ← Tùy chỉnh cho Dev        │
│  │   └── kustomization.yaml  (replicas: 1)          │
│  └── prod/               ← Tùy chỉnh cho Prod      │
│      └── kustomization.yaml  (replicas: 5)          │
└──────────────────────────────────────────────────────┘

So sánh Helm vs Kustomize

Tiêu chí Helm Kustomize
Cách hoạt động Template engine (Go template) Patch overlays
Độ phức tạp Cao (cần học template syntax) Thấp (chỉ cần biết YAML)
Package sharing Tuyệt vời (Helm repos) Không phù hợp
Multi-env values-{env}.yaml overlays/{env}/
Tích hợp kubectl Cần cài riêng Built-in (kubectl -k)
ArgoCD support ✅ Tốt ✅ Tốt
Khi nào dùng Chia sẻ chart công khai Quản lý config nội bộ

Khi nào nên dùng Kustomize?

  • ✅ Quản lý nhiều môi trường (dev, staging, prod) từ cùng base
  • ✅ Không muốn học template syntax phức tạp
  • ✅ Team nhỏ, config nội bộ
  • ❌ Không phù hợp để chia sẻ package công khai (dùng Helm)

🔧 Thực hành

Bước 1: Xem cấu trúc Kustomize

# Cấu trúc đã chuẩn bị sẵn
tree kustomize/
# kustomize/
# ├── base/
# │   ├── deployment.yaml
# │   ├── service.yaml
# │   └── kustomization.yaml
# └── overlays/
#     ├── dev/
#     │   └── kustomization.yaml
#     └── prod/
#         └── kustomization.yaml

Bước 2: Test Kustomize locally

# Render cho môi trường Dev
kubectl kustomize kustomize/overlays/dev/

# Render cho môi trường Prod
kubectl kustomize kustomize/overlays/prod/

# So sánh 2 output → thấy sự khác biệt (replicas, labels, env vars)

Bước 3: Push lên Git & Deploy qua ArgoCD

# Push thư mục kustomize/ lên repo Git
# Sau đó tạo 2 ArgoCD Applications

# Deploy môi trường Dev
kubectl apply -f argocd/app-dev.yaml

# Deploy môi trường Prod
kubectl apply -f argocd/app-prod.yaml

# Sync cả hai
argocd app sync kustomize-dev
argocd app sync kustomize-prod

Bước 4: So sánh 2 môi trường

# Dev: 2 replicas
kubectl get pods -n kustomize-dev

# Prod: 5 replicas
kubectl get pods -n kustomize-prod

# Xem labels khác nhau
kubectl get deployment -n kustomize-dev -o jsonpath='{.items[0].metadata.labels}' | jq
kubectl get deployment -n kustomize-prod -o jsonpath='{.items[0].metadata.labels}' | jq

❓ FAQ

Q: Nên dùng Helm hay Kustomize?

A: Phụ thuộc vào use case: - Helm: Khi cần chia sẻ chart, deploy third-party apps (Redis, PostgreSQL), complex templating - Kustomize: Khi quản lý internal apps, multi-environment, đơn giản hơn

Nhiều team dùng cả hai: Helm cho third-party, Kustomize cho internal apps.

Q: ArgoCD tự detect Kustomize không cần cấu hình gì đặc biệt không?

A: Đúng! ArgoCD tự nhận diện thư mục có file kustomization.yaml và dùng Kustomize để render.


📚 Bài tập & Ôn tập


⏮️ Ngày trước: Day 04 — Làm việc với Helm Charts ⏭️ Ngày tiếp: Day 06 — Quản lý nhiều Cluster