De ce Kubernetes?

Subiect din roadmap-ul Kubernetes · parte din „Introducere”

Kubernetes (cunoscut adesea ca K8s) este un sistem open-source de orchestration a containerelor, conceput inițial de Google și acum întreținut de Cloud Native Computing Foundation. În practică, el rezolvă problema critică a scalabilității și disponibilității aplicațiilor distribuite, automatizând deploy-ul, escalarea și managementul grupurilor de containere. Fără un astfel de tool, gestionarea manuală a zeci sau sute de microservicii ar fi imposibilă, eronată și extrem de lentă. Companiile moderne îl adoptă pentru a asigura că aplicațiile lor rămân online, indiferent de numărul de utilizatori sau de defectele hardware, transformând infrastructura într-un activ elastic și rezistent la eșecuri.

Concepte cheie

  • Cluster: Ansamblul complet de mașini (fizice sau virtuale) care rulează aplicații gestionate de Kubernetes, format din noduri Master și Worker.
  • Node: O instanță individuală (VM sau server fizic) care face parte din cluster și execută sarcinile alocate de control plane.
  • Pod: Cea mai mică unitate de calcul pe care o poți crea și gestiona în Kubernetes; un pod poate conține unul sau mai multe containere care partajează resurse.
  • Deployment: Un obiect Kubernetes care gestionează crearea și actualizarea instanțelor de aplicații, asigurând un număr specific de replici rulate simultan.
  • Service: O metodă abstractă de a expune o aplicație care rulează pe un set de Pods ca o rețea, facilitând comunicarea internă și externă.
  • Namespace: O modalitate de a împărți un singur cluster în mai multe virtual clusters, utilă pentru izolarea proiectelor sau a echipelor diferite.
  • ConfigMap & Secret: Resurse separate pentru configurarea aplicațiilor, unde ConfigMap stochează date non-confidențiale, iar Secret gestionează informații sensibile criptate.

Exemplu practic

Imagină-ți că ai o aplicație web simplă și vrei să te asiguri că există întotdeauna 3 copii ale ei active, chiar dacă un server cade. Creezi un fișier YAML (deployment.yaml) care definește un Deployment. Kubernetes va planifica automat aceste 3 Pod-uri pe nodurile disponibile. Dacă un nod se defectează, Control Plane detectează lipsa unui Pod și programează instantaneu un altul pe un nod sănătos, menținând serviciul online fără întrerupere vizibilă pentru utilizator.

apiVersion: apps/v1
kind: Deployment
metadata:
  name: web-app
spec:
  replicas: 3
  selector:
    matchLabels:
      app: web
  template:
    metadata:
      labels:
        app: web
    spec:
      containers:
      - name: nginx
        image: nginx:latest
        ports:
        - containerPort: 80

Greșeli frecvente

  • Supraîncărcarea clusterului: Rularea prea multor workload-uri critice pe același nod fizic, ceea ce duce la contencioarea resurselor și degradarea performanței.
  • Ignorarea resurselor (Requests/Limits): Nepecificarea cerințelor de CPU și memorie pentru containere, ceea ce face ca scheduler-ul să nu poată lua decizii optime de plasare.
  • Hardcodarea configurațiilor: Introducerea valorilor sensibile sau a configurărilor specifice mediului direct în imaginea Docker, în loc de a folosi ConfigMaps sau Secrets.
  • Lipsa monitorizării: Asumarea că Kubernetes rezolvă totul automat, fără a implementa instrumente de logging și monitoring (cum ar fi Prometheus/Grafana), ascunzând problemele până când apar erori majore.

Întrebări de interviu

1. Care este diferența dintre un Deployment și un StatefulSet? Un Deployment este ideal pentru aplicații stateless (fără stare), unde toate instanțele sunt identice și interschimbabile. Un StatefulSet este folosit pentru aplicații stateful (cu stare), unde ordinea și identitatea unică a fiecărui pod sunt importante, cum ar fi bazele de date distribuite.

2. Ce se întâmplă dacă un nod devine unreachable? Control Plane așteaptă un timeout (de obicei 5 minute) înainte de a marca nodul ca „NotReady”. După aceea, începe procesul de evacuare a podurilor de pe acel nod și le reprogramează pe alte noduri sănătoase din cluster, conform politicii de toleranță la eșecuri.

3. Cum funcționează auto-scalarea (HPA)? Horizontal Pod Autoscaler monitorizează metricile de utilizare (CPU, memorie sau custom metrics) ale podurilor existente. Când utilizarea depășește pragul definit, HPA crește numărul de replici în Deployment-ul asociat; când scade, le reduce pentru a economisi resurse.

Exercițiu

Pentru a consolida cunoștințele, instalează minikube sau kind pe mașina ta locală. Creează un fișier YAML care definește un Deployment cu 2 replici ale unei imagini simple (ex: hello-world). Apoi, creează un Service de tip LoadBalancer sau NodePort pentru a expune aplicația. Simulează un eșec eliminând manual un pod și observă cum Kubernetes îl recreează automat. Verifică starea clusterului folosind comanda kubectl get all. Această rutină te va familiariza cu fluxul de lucru real de zi cu zi.

Resurse gratuite

Alte subiecte din „Introducere”