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