๐Ÿท๏ธ Use Helm and Kustomize to install cluster components

๐Ÿท๏ธ Use Helm and Kustomize to install cluster components#

Helm

  • https://helm.sh/docs/

  • Helm charts are a package format for Kubernetes that bundle related resources into a versioned, distributable unit, serving as blueprints for deploying applications or services to Kubernetes clusters.

  • They encapsulate pre-configured Kubernetes manifests, dependencies, and documentation, allowing for standardized, reproducible, and configurable deployments across different environments.

  • A Helm chart is essentially a directory containing a Chart.yaml file for metadata, a values.yaml file for default configuration values, and a templates/ directory with Kubernetes manifest templates written in YAML and Go templating syntax.

  • This templating enables dynamic generation of valid Kubernetes manifests by combining templates with user-provided values, facilitating easy customization for various environments like development, staging, or production.

  • Charts can be versioned, shared via repositories, and managed through Helmโ€™s client, which handles installation, upgrades, and rollbacks, significantly simplifying the management of complex Kubernetes applications.

     foo/
    โ”œโ”€โ”€ .helmignore   # Contains patterns to ignore when packaging Helm charts.
    โ”œโ”€โ”€ Chart.yaml    # Information about your chart
    โ”œโ”€โ”€ values.yaml   # The default values for your templates
    โ”œโ”€โ”€ charts/       # Charts that this chart depends on
    โ””โ”€โ”€ templates/    # The template files
        โ””โ”€โ”€ tests/    # The test files

Install Helm#

แ… curl -fsSL -o get_helm.sh https://raw.githubusercontent.com/helm/helm/main/scripts/get-helm-3
แ… chmod +x get_helm.sh
แ… ./get_helm.sh && rm get_helm.sh
แ… which helm
/usr/local/bin/helm

Helm usage#

Add, list, search repo.#

แ… helm repo add cilium https://helm.cilium.io/
แ… helm repo update
แ… helm repo list
แ… helm search repo cilium
แ… helm search hub nginx

Template, install.#

แ… helm template cilium cilium/cilium \
--version 1.18.2 --namespace kube-system \
| tee cilium-cni.yaml
แ… helm upgrade cilium cilium/cilium --version 1.18.2 \
--set hubble.relay.enabled=true -n kube-system \
--install -n kube-system

List, uninstall.#

แ… helm list
แ… helm unistall my-app

Manage chart.#

แ… helm show chart ingress-nginx/ingress-nginx --version 4.13.4
แ… helm show values metrics-server/metrics-server
แ… helm status cilium -n kube-system
แ… helm upgrade metrics-server metrics-server/metrics-server -n kube-system --set 'args={--bad-option}'
แ… k get po -n kube-system -l app.kubernetes.io/name=metrics-server
NAME                              READY   STATUS             RESTARTS       AGE
metrics-server-5dd7b49d79-z6mjg   1/1     Running            3 (129m ago)   4d22h
metrics-server-7444fdc647-krhd4   0/1     CrashLoopBackOff   4 (30s ago)    2m13s
แ… helm -n kube-system history metrics-server
REVISION        UPDATED                         STATUS          CHART                   APP VERSION     DESCRIPTION
1               Fri Oct 31 18:17:51 2025        superseded      metrics-server-3.13.0   0.8.0           Install complete
2               Wed Nov  5 16:57:28 2025        deployed        metrics-server-3.13.0   0.8.0           Upgrade complete
แ… helm -n kube-system rollback metrics-server 1
Rollback was a success! Happy Helming!
แ… helm -n kube-system history metrics-server
REVISION        UPDATED                         STATUS          CHART                   APP VERSION     DESCRIPTION
1               Fri Oct 31 18:17:51 2025        superseded      metrics-server-3.13.0   0.8.0           Install complete
2               Wed Nov  5 16:57:28 2025        superseded      metrics-server-3.13.0   0.8.0           Upgrade complete
3               Wed Nov  5 17:00:35 2025        deployed        metrics-server-3.13.0   0.8.0           Rollback to 1
แ… k get po -n kube-system -l app.kubernetes.io/name=metrics-server
NAME                              READY   STATUS    RESTARTS       AGE
metrics-server-5dd7b49d79-z6mjg   1/1     Running   3 (130m ago)   4d22h
แ… helm get manifest
แ… helm get values

Fetch a package.#

แ… helm fetch metrics-server/metrics-server --version 3.13.0 --untar
แ… tree -L 1 --noreport metrics-server
metrics-server
โ”œโ”€โ”€ CHANGELOG.md
โ”œโ”€โ”€ Chart.yaml
โ”œโ”€โ”€ README.md
โ”œโ”€โ”€ RELEASE.md
โ”œโ”€โ”€ ci
โ”œโ”€โ”€ templates
โ””โ”€โ”€ values.yaml

Or

แ… tar tzf .cache/helm/repository/metrics-server-3.13.0.tgz
metrics-server/Chart.yaml
metrics-server/values.yaml
[...]

Kustomize#

Kustomize is a tool for customizing Kubernetes configurations.

แ… tree --noreport
.
โ”œโ”€โ”€ base
โ”‚ย ย  โ”œโ”€โ”€ deployment.yaml
โ”‚ย ย  โ”œโ”€โ”€ hpa.yaml
โ”‚ย ย  โ”œโ”€โ”€ kustomization.yaml
โ”‚ย ย  โ””โ”€โ”€ service.yaml
โ”œโ”€โ”€ dev
โ”‚ย ย  โ””โ”€โ”€ kustomization.yaml
โ””โ”€โ”€ prod
    โ””โ”€โ”€ kustomization.yaml
แ… find . -name kustomization.yaml | \
while read f; do echo ---;echo "$f";cat "$f";done
---
./dev/kustomization.yaml
resources:
  - ../base
namePrefix: dev-
generแ… atorOptions:
  labels:
    env: dev
---
./base/kustomization.yaml
resources:
- deployment.yaml
- service.yaml
- hpa.yaml
---
./prod/kustomization.yaml
resources:
  - ../base
namePrefix: prod-
generatorOptions:
  labels:
    env: prod
แ… k kustomize ./prod
แ… k kustomize ./dev