API-ul și probele de sănătate
De ce nu este suficient un singur endpoint
Un proces poate rula fără să poată servi corect cereri. De exemplu, Ticketing API poate fi activ, dar temporar incapabil să comunice cu PostgreSQL.
Aplicația expune trei endpoint-uri:
| Endpoint | Verifică | Rezultat când PostgreSQL nu răspunde |
|---|---|---|
/health | compatibilitate cu laboratoarele anterioare | 200 OK |
/livez | procesul API rulează | 200 OK |
/readyz | conexiunea API–PostgreSQL funcționează | 503 Service Unavailable |
/readyz execută un Ping către implementarea activă a stocării. Acesta este
motivul pentru care readiness reflectă și starea dependenței.
Cele trei probe Kubernetes
Deployment-ul din k8s/30-api-deployment.yaml definește:
startupProbe:
httpGet:
path: /livez
port: http
periodSeconds: 2
failureThreshold: 30
readinessProbe:
httpGet:
path: /readyz
port: http
periodSeconds: 3
failureThreshold: 2
livenessProbe:
httpGet:
path: /livez
port: http
periodSeconds: 10
failureThreshold: 3
Rolurile sunt diferite:
- startupProbe oferă aplicației timp să pornească înainte de activarea celorlalte verificări
- livenessProbe indică dacă procesul trebuie repornit
- readinessProbe indică dacă Pod-ul trebuie să primească trafic prin Service.
O eroare temporară a PostgreSQL nu trebuie să repornească API-ul. Din acest motiv, baza de date este verificată de readiness, nu de liveness.
Lansarea API-ului
Aplicați Deployment-ul și Service-ul:
kubectl apply -f k8s/30-api-deployment.yaml
kubectl apply -f k8s/31-api-service.yaml
kubectl rollout status deployment/ticketing-api -n cc-lab3
Verificați starea completă:
kubectl get deployments,statefulsets,pods,services,pvc -n cc-lab3 -o wide
kubectl get endpointslices -n cc-lab3
Deployment-ul trebuie să aibă două replici disponibile, iar Service-ul
ticketing-api trebuie să aibă două endpoint-uri Ready.
Accesarea aplicației
Porniți port-forward într-un terminal și lăsați comanda activă:
kubectl port-forward service/ticketing-api -n cc-lab3 8080:80
În alt terminal:
curl http://localhost:8080/livez
curl http://localhost:8080/readyz
curl http://localhost:8080/info
Apelați de mai multe ori /info:
for i in {1..6}; do curl -s http://localhost:8080/info; done
O sesiune port-forward este asociată unui anumit Pod ales la pornire. Ea este
utilă pentru acces local, dar nu demonstrează singură toate deciziile de rutare
ale Service-ului. Pentru readiness vom inspecta și EndpointSlice-urile.