Sari la conținutul principal

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:

EndpointVerificăRezultat când PostgreSQL nu răspunde
/healthcompatibilitate cu laboratoarele anterioare200 OK
/livezprocesul API rulează200 OK
/readyzconexiunea 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
Despre port-forward

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.