Validarea și instalarea release-ului
Înainte de instalare separăm trei niveluri de verificare: validarea chart-ului, inspectarea YAML-ului randat și observarea resurselor create în cluster.
1. Validarea statică
Rulați:
helm lint charts/ticketing --strict
Rezultatul așteptat este:
1 chart(s) linted, 0 chart(s) failed
helm lint verifică structura chart-ului, metadatele, schema valorilor și o
parte dintre erorile de templating.
2. Randarea fără instalare
Generați manifestele local:
helm template ticketing charts/ticketing \
--namespace cc-lab4 \
> rendered.yaml
Inspectați câteva elemente:
grep '^kind:' rendered.yaml
grep 'image:' rendered.yaml
grep 'replicas:' rendered.yaml
Ar trebui să vedeți, printre altele, un Secret, un ConfigMap, două Services, un Deployment, un StatefulSet și Pod-ul folosit de testul Helm.
helm template, helm get manifest și modurile debug pot afișa conținutul
Secret-urilor randate. În laborator parola este fictivă, deci nu distribuiți astfel
de ieșiri atunci când lucrați cu date reale.
3. Instalarea
Instalați chart-ul ca release numit ticketing:
helm upgrade --install ticketing charts/ticketing \
--namespace cc-lab4 \
--create-namespace \
--wait \
--timeout 3m
Am folosit upgrade --install în loc de install: aceeași comandă poate crea
release-ul dacă lipsește sau îl poate actualiza dacă există deja.
Opțiunea --wait face comanda să aștepte resursele Ready, iar --timeout
limitează așteptarea. Statusul deployed înseamnă că manifestele au fost
acceptate și condițiile urmărite de Helm au fost îndeplinite.
Inspectarea release-ului
helm list -n cc-lab4
helm status ticketing -n cc-lab4
helm get values ticketing -n cc-lab4 --all
Comparați perspectiva Helm cu perspectiva Kubernetes:
kubectl get deployments,statefulsets,pods,services,pvc -n cc-lab4
kubectl get pods -n cc-lab4 \
-l app.kubernetes.io/instance=ticketing --show-labels
Starea așteptată este:
- două Pod-uri pentru
ticketing-api - un Pod
ticketing-postgresql-0 - un PVC în starea
Bound - toate containerele în starea Ready.
Accesarea API-ului
Porniți port-forward într-un terminal:
kubectl port-forward service/ticketing-api -n cc-lab4 8080:80
În alt terminal:
curl http://localhost:8080/livez
curl http://localhost:8080/readyz
curl http://localhost:8080/info
Creați și listați un tichet:
curl -X POST http://localhost:8080/tickets \
-H 'Content-Type: application/json' \
-d '{"title":"Instalare cu Helm","priority":"high","reporter":"student"}'
curl http://localhost:8080/tickets
Testul chart-ului
Chart-ul conține un Pod marcat cu hook-ul helm.sh/hook: test. Acesta apelează
endpoint-ul /readyz prin Service-ul intern:
helm test ticketing -n cc-lab4 --logs
Testul trebuie să se termine cu PASSED.
Diagnostic rapid
Dacă instalarea nu se termină, nu repetați imediat comanda. Inspectați cauza:
helm status ticketing -n cc-lab4
kubectl get pods -n cc-lab4
kubectl get events -n cc-lab4 --sort-by=.metadata.creationTimestamp
Pentru ImagePullBackOff, verificați că imaginea și tag-ul sunt publice:
docker pull ghcr.io/cloud-computing-upb/lab4:1.0.0
Pentru un Pod Running, dar 0/1, inspectați readiness și logurile:
kubectl logs deployment/ticketing-api -n cc-lab4 --tail=100
kubectl logs ticketing-postgresql-0 -n cc-lab4 --tail=100