Lab 20 – Helm release

Lab 20 – Helm release

Cíl: nainstalovat, nakonfigurovat, povýšit a vrátit zpět cizí chart. Kapitola: Základy Helmu

Helm už by měl být nainstalovaný z labu 14. Pokud ne:

curl -fsSL -o get_helm.sh https://raw.githubusercontent.com/helm/helm/main/scripts/get-helm-3
chmod +x get_helm.sh && sudo ./get_helm.sh && helm version
# 1 – repozitář
helm repo add podinfo https://stefanprodan.github.io/podinfo
helm repo update
helm repo list
helm search repo podinfo
helm search repo podinfo --versions | head -5

Repozitář je jen web server s index.yaml. helm repo update ten index znovu stáhne – jinam Helm nesahá, dokud něco neinstalujete.

# 2 – VŽDY se nejdřív podívejte
helm show chart podinfo/podinfo | head -15
helm show values podinfo/podinfo | head -30

show values je veřejné rozhraní chartu. Co v něm není, chart nepodporuje a --set na to tiše nezabere.

# 3 – vyrenderujte bez zásahu do clusteru
helm template web podinfo/podinfo | head -40
helm template web podinfo/podinfo | grep -c '^kind:'

Tolik objektů by jedna instalace vytvořila. Lokální render nepotřebuje cluster ani oprávnění – je to nejbezpečnější způsob, jak si chart projít.

# 4 – dry run na serveru: totéž, ale validuje to API server
helm install web podinfo/podinfo --dry-run --debug > /tmp/dryrun.yaml
head -30 /tmp/dryrun.yaml
# 5 – ostrá instalace
helm install web podinfo/podinfo --set replicaCount=2 -n helmlab --create-namespace
helm list -n helmlab
kubectl get all -n helmlab

Všechno v tom namespace vytvořil chart. Helm neudělal nic, co by nezvládl kubectl – vyrenderoval YAML a nasadil ho – ale udělal to konzistentně a pamatuje si to.

# 6 – co si Helm myslí, že nasadil?
helm get values web -n helmlab           # jen to, co jste přebili
helm get manifest web -n helmlab | grep -E '^(kind|  name):'
helm status web -n helmlab
# 7 – jeden chart, více release
helm install web2 podinfo/podinfo -n helmlab
helm list -n helmlab
kubectl get deploy -n helmlab
helm uninstall web2 -n helmlab

Dvě nezávislé instalace téhož chartu, rozlišené jménem release. Každý objekt je pojmenovaný podle release, a proto to funguje.

Upgrade a návrat zpět

# 8 – změna hodnoty → nová revize
helm upgrade web podinfo/podinfo --set replicaCount=4 -n helmlab
helm history web -n helmlab
kubectl get deploy -n helmlab
# 9 – hodnoty ze souboru (lepší než dlouhý --set)
cat > ~/podinfo-values.yaml <<'YAML'
replicaCount: 3
service:
  type: NodePort
  nodePort: 30090
YAML
helm upgrade web podinfo/podinfo -f ~/podinfo-values.yaml -n helmlab
kubectl get svc -n helmlab
curl -s http://worker01:30090 | head -5

Soubor s hodnotami patří do Gitu vedle kódu. --set je na jednorázovky a na tajemství, která nechcete mít v souboru.

# 10 – návrat zpět
helm history web -n helmlab
helm rollback web 1 -n helmlab
helm history web -n helmlab
kubectl get deploy -n helmlab

Všimněte si, že rollback je sám o sobě nová revize. Helm historii nikdy nepřepisuje, jen přidává – proto se na helm history dá při incidentu spolehnout.

Úklid

helm uninstall web -n helmlab
kubectl delete ns helmlab
Tip

Do pipeline patří helm upgrade --install <release> <chart> -f values.yaml. Funguje napoprvé i pokaždé potom.