Skip to content
Cloud-Computing-UPBPublic

About

No description, website, or topics provided.

Resources

Stars

0 stars

Watchers

0 watching

Forks

Repository files navigation

Cloud Computing - Laboratorul 2

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.

Obiective

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.

Structura repository-ului

.
├── .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

Cerințe

  • Docker
  • kubectl
  • kind
  • curl sau un client HTTP echivalent

Pornire rapidă

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

Endpoint-uri

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.

Configurare

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

Scenarii

Versiunea a doua:

kubectl apply -f k8s/scenarios/deployment-v2.yaml
kubectl rollout status deployment/ticketing-api -n cc-lab2

Imagine 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-lab2

Selector 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.yaml

Rulare locală fără Kubernetes

cp .env.example .env
docker compose up --build

Teste

go test -race ./...

Curățare

kind delete cluster --name cc-lab2

About

No description, website, or topics provided.

Resources

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages