Laboratorul 05 - Kubernetes & Kubectl

Introducere

In acest laborator vom parcurge crearea de pods folosind comanda kubectl. Activitatea este echivalenta cu pornirea mai multor containere de Docker folosind docker run.

Aplicatia Propusa

Va propunem o mini aplicatie formata din 4 componente:

  1. un API webserver
  2. un script care proceseaza informatii
  3. o baza de date
  4. un broker de rabbitMQ

Aplicatia reprezinta un model simplificat de CQRS.

CQRS - Command and Query Responsibility Segregation se refera la despartirea logica intre cereri si actiuni care modifica starea dintr-un sistem

Fluxul este urmatorul:

  • Serverul API accepta doua cereri HTTP: un POST si un GET
  • Cererile de tip POST sunt trimise catre Procesator. Procesatorul adauga un timestamp si apoi scrie intrarea in baza de date
  • Cererile de tip GET sunt procesate direct de API care trage informatia din baza de date

Codul este accesibil pe repo-ul nostru.

Deployment folosind Kubernetes

In codul sursa aveti un exemplu de docker-compose.yml, pentru a avea o perspectiva familiara asupra cum va arata deploymentul local. In Kubernetes, fiecare serviciu va fi reprezentat de un Pod.

In continuare vom folosi comenzile de Kubectl, prezentate la laboratorul trecut, pentru a porni fiecare Pod independent.

La laboratorul urmator vom face deployment folosind configuratie declarativa yaml

Vom lucra cu urmatoarele concepte:

  • Pods - vor fi 4 (api, db, rabbitmq, procesator)
  • ClusterIP Service - vor fi 3 (pentru api, rabbitmq si db). Rolul lor este sa expuna porturile pod-urilor in reteaua interna kubernetes
  • NodePort Service - va fi 1 (pentru api). Rolul sau este sa expuna portul pod-ului in reteaua de pe host.

Atentie la modul in care sunt mapate porturile. Ordinea este inversata fata de Docker. In docker, porturile sunt mapate EXTERN:INTERN. In kubernetes, ele sunt INTERN:EXTERN

Mai jos puteti regasi comenzile care vor fi efectuate pentru rezolvarea laboratorului:

kubectl run db --image=axonedge/lab-k8s-database --env="POSTGRES_USER=student" --env="POSTGRES_PASSWORD=student" --env="POSTGRES_DB=library"
kubectl expose pod db --port=5432 --target-port=5432 --name=db-cluster-ip-service
 
kubectl run rabbitmq --image=rabbitmq:3 --port=5672
kubectl expose pod rabbitmq --port=5672 --target-port=5672 --name=rabbitmq-cluster-ip-service
 
kubectl describe pod rabbitmq
kubectl describe service rabbitmq-cluster-ip-service
 
kubectl run procesator --image=axonedge/lab-k8s-procesator --env="PGHOST=db-cluster-ip-service" --env="PGDATABASE=library" --env="PGPORT=5432" --env="PGUSER=student" --env="PGPASSWORD=student" --env="AMQPURL=amqp://rabbitmq-cluster-ip-service"
 
kubectl logs procesator
 
kubectl run api --image=axonedge/lab-k8s-api --env="PORT=8000" --env="PGHOST=db-cluster-ip-service" --env="PGDATABASE=library" --env="PGPORT=5432" --env="PGUSER=student" --env="PGPASSWORD=student" --env="AMQPURL=amqp://rabbitmq-cluster-ip-service"
kubectl expose pod api --port=8000 --name=api-nodeport-service --type=NodePort
 
kubectl delete --all pods
kubectl delete --all services

Va recomandam sa rulati comenzile suport, ca sa va familiarizati cu sintaxa si sa observati cum au fost create obiectele kubernetes

Testare

Pentru a testa aplicatia va recomandam sa folositi Postman.

Testarea se realizeaza in felul urmator:

{
    "name": "De ce iubim femeile?",
    "author": "Mircea Cartarescu",
    "price": 69,
    "description": "Autoironie"
}
  • Vizualizati intrarea, trimitand o cerere de tip GET pe acelasi link.

Observati ca intrarea va avea campul insertedAt adaugat

cc/laboratoare/05.txt · Last modified: 2021/11/15 10:03 by alexandru.hogea
CC Attribution-Share Alike 3.0 Unported
www.chimeric.de Valid CSS Driven by DokuWiki do yourself a favour and use a real browser - get firefox!! Recent changes RSS feed Valid XHTML 1.0