Acest repository conține aplicația Ticketing API din Laboratorul 1 și manifestele folosite pentru introducerea în Kubernetes. În acest laborator, aplicația folosește stocarea în memorie; PostgreSQL și persistența sunt tratate în Laboratorul 3.
La finalul laboratorului veți putea:
- să creați un cluster Kubernetes local cu
kind - să aplicați configurații declarative cu
kubectl apply - să urmăriți relația dintre Deployment, ReplicaSet și Pod
- să expuneți aplicația printr-un Service
- să observați reconcilierea, self-healing-ul și scalarea
- să executați un rolling update și un rollback
- să diagnosticați erori uzuale de imagine și de selector.
.
├── .github/workflows/ci.yml
├── Dockerfile
├── docker-compose.yml
├── kind-config.yaml
├── k8s
│ ├── base
│ │ ├── 00-namespace.yaml
│ │ ├── 10-configmap.yaml
│ │ ├── 20-deployment.yaml
│ │ └── 30-service.yaml
│ └── scenarios
│ ├── deployment-broken-image.yaml
│ ├── deployment-v2.yaml
│ └── service-broken-selector.yaml
├── internal
└── main.go
- Docker
kubectlkindcurlsau un client HTTP echivalent
Manifestele folosesc imaginile publice:
ghcr.io/cloud-computing-upb/lab2:1.0.0;ghcr.io/cloud-computing-upb/lab2:1.1.0.
Workflow-ul GitHub Actions publică automat aceste tag-uri când repository-ul
primește tag-urile Git v1.0.0, respectiv v1.1.0. Pachetul GHCR trebuie setat
ca public înainte de laborator.
kind create cluster --name cc-lab2 --config kind-config.yaml
kubectl apply -f k8s/base/00-namespace.yaml
kubectl apply -f k8s/base/10-configmap.yaml
kubectl apply -f k8s/base/20-deployment.yaml
kubectl apply -f k8s/base/30-service.yaml
kubectl rollout status deployment/ticketing-api -n cc-lab2
kubectl port-forward service/ticketing-api -n cc-lab2 8080:80Într-un alt terminal:
curl http://localhost:8080/health
curl http://localhost:8080/info| Metodă | Cale | Descriere |
|---|---|---|
GET |
/health |
Verificare simplă de sănătate |
GET |
/info |
Versiunea aplicației și Pod-ul care a răspuns |
GET |
/tickets |
Listează tichetele |
POST |
/tickets |
Creează un tichet |
GET |
/tickets/{id} |
Returnează un tichet |
PUT |
/tickets/{id} |
Înlocuiește un tichet |
DELETE |
/tickets/{id} |
Șterge un tichet |
În Laboratorul 2 folosim în principal /health și /info. Fiecare replică are
propriile date în memorie, deci operațiile CRUD nu oferă încă o stare comună
între Pod-uri.
| Variabilă | Valoare implicită | Descriere |
|---|---|---|
APP_VERSION |
dev |
Versiunea afișată de endpoint-ul /info |
USE_POSTGRES |
false pentru binar |
Activează implementarea PostgreSQL |
DATABASE_URL |
- | DSN PostgreSQL, obligatoriu dacă USE_POSTGRES=true |
PORT |
8080 |
Portul HTTP al aplicației |
Versiunea a doua:
kubectl apply -f k8s/scenarios/deployment-v2.yaml
kubectl rollout status deployment/ticketing-api -n cc-lab2Imagine inexistentă și rollback:
kubectl apply -f k8s/scenarios/deployment-broken-image.yaml
kubectl rollout status deployment/ticketing-api -n cc-lab2 --timeout=30s
kubectl get pods -n cc-lab2
kubectl rollout undo deployment/ticketing-api -n cc-lab2Selector greșit pentru Service:
kubectl apply -f k8s/scenarios/service-broken-selector.yaml
kubectl get endpointslices -n cc-lab2 \
-l kubernetes.io/service-name=ticketing-api
kubectl apply -f k8s/base/30-service.yamlcp .env.example .env
docker compose up --buildgo test -race ./...kind delete cluster --name cc-lab2