Kubernetes (adesea stilizat K8s, unde „8” reprezintă numărul de litere dintre „K” și „s”) este platforma open-source de nivel industrial care a devenit sistemul de operare de facto pentru centrele de date moderne și infrastructurile cloud. Dezvoltat inițial de inginerii Google pe baza a peste 15 ani de experiență cu sistemul lor intern Borg și donat ulterior fundației CNCF (Cloud Native Computing Foundation), Kubernetes transformă o flotă eterogenă de servere fizice sau instanțe virtuale (un cluster) într-un singur bazin elastic și unificat de resurse de calcul, memorie și rețea.
Spre deosebire de scripturile tradiționale de orchestrare imperativă, Kubernetes operează pe baza unui model declarativ: descrieți Starea Dorită (Desired State) a aplicației într-un manifest YAML (număr de replici, versiuni de imagini, cerințe de memorie, reguli de rutare), iar o armată de controllere interne lucrează continuu într-o buclă infinită de reconciliere (Reconciliation Loop) pentru a asigura că Starea Curentă (Actual State) din teren corespunde perfect descrierii din manifest, vindecând automat orice cădere de nod sau proces.
# Arhitectura Kubernetes este strict decuplată în două mari subsisteme:
# ═══════════════════════════════════════════════════════════════════════════════
# 1. CONTROL PLANE (Creierul și Centrul Decizional al Clusterului):
# ═══════════════════════════════════════════════════════════════════════════════
# - kube-apiserver:
# * Singura componentă care expune API-ul REST securizat (HTTPS) pe portul 6443.
# * Toate celelalte componente (inclusiv kubectl și nodurile) comunică EXCLUSIV cu API Server.
# * Responsabil de autentificare (mTLS/OIDC), autorizare (RBAC) și validare de scheme.
# - etcd:
# * Baza de date distribuită de tip cheie-valoare de înaltă consistență (algoritm Raft).
# * Păstrează întregul „adevăr” despre starea clusterului. Doar API Server are acces direct la etcd!
# - kube-scheduler:
# * Monitorizează Pod-urile nou create care nu au încă un nod asignat.
# * Filtrează și punctează nodurile disponibile pe baza resurselor libere (CPU/RAM),
# afinităților, taints/tolerations și constrângerilor de topologie.
# - kube-controller-manager:
# * Un binar compus din zeci de bucle de control (Node Controller, Deployment Controller,
# EndpointSlice Controller, ServiceAccount Controller).
# - cloud-controller-manager:
# * Integrează clusterul cu API-ul providerului cloud (AWS, GCP, Hetzner) pentru a comanda
# Load Balancere externe și volume persistente de rețea.
# ═══════════════════════════════════════════════════════════════════════════════
# 2. WORKER NODES (Mașinile de Execuție unde Rulează Aplicațiile):
# ═══════════════════════════════════════════════════════════════════════════════
# - kubelet:
# * Agentul primar ce rulează pe fiecare nod. Citește specificația PodSpecs de la API Server
# și instruiește Container Runtime-ul să descarce imaginile și să pornească procesele.
# * Monitorizează sănătatea containerelor și raportează starea înapoi la Control Plane.
# - kube-proxy:
# * Gestionează rutarea rețelei virtuale pe fiecare nod (folosind iptables sau IPVS).
# * Asigură că traficul trimis către un Service ClusterIP este distribuit corect către Pod-uri.
# - Container Runtime (CRI):
# * Motorul OCI de nivel jos (standardul actual fiind containerd sau CRI-O).
Ierarhia Obiectelor de Calcul: De la Pod la StatefulSet
În Kubernetes nu gestionați direct containere individuale, ci lucrați cu abstracțiuni ierarhice declarative:
- Pod: Cea mai mică unitate atomică de execuție din Kubernetes. Un Pod găzduiește unul sau mai multe containere strâns cuplate (modelul Sidecar) care partajează aceeași adresă IP, același Network Namespace și aceleași volume de stocare locale (comunicând între ele ultra-rapid prin
localhost). - ReplicaSet: Garantează că un număr exact definit de Pod-uri identice este activ în permanență în cluster (în caz de cădere a unui Pod, pornește imediat o copie identică).
- Deployment: Abstracțiunea de nivel înalt recomandată pentru aplicații fără stare (Stateless). Gestionează automat ReplicaSets, permițând actualizări declarative fără nicio secundă de indisponibilitate (Rolling Updates) și reveniri instantanee la versiuni anterioare (Rollbacks).
- StatefulSet: Destinat aplicațiilor cu stare (Stateful) precum bazele de date (PostgreSQL, Kafka, Elasticsearch). Garantează identificatori de rețea stabili și predictibili (
db-0,db-1,db-2), ordine strictă la pornire și oprire, și volume de disc persistente dedicate per instanță (prinvolumeClaimTemplates). - DaemonSet: Asigură rularea a exact unei copii a unui Pod pe fiecare nod de lucru din cluster. Utilizat pentru agenți de colectare jurnale (Fluentbit, Promtail), monitorizare noduri (Node Exporter) sau plugin-uri de rețea CNI (Cilium, Calico).
Modelul de Rețea Kubernetes și Tipurile de Servicii
Rețeaua din Kubernetes respectă trei reguli fundamentale impuse de specificația CNI: toate Pod-urile pot comunica cu toate celelalte Pod-uri de pe orice nod fără NAT; toate nodurile pot comunica cu toate Pod-urile; adresa IP pe care o vede un Pod despre sine este exact aceeași adresă pe care o văd și celelalte Pod-uri.
Sondele de Sănătate (Probes): Secretul Disponibilității Ridicate
Pentru a preveni direcționarea traficului de producție către procese blocate sau containere care încă își încarcă datele în memorie, Kubernetes oferă trei sonde specializate configurabile în manifestul Pod-ului:
spec:
containers:
- name: api-service
image: my-company/api:v2.0
ports:
- containerPort: 8080
# 1. STARTUP PROBE (Pentru aplicații lente la inițializare):
# Blochează celelalte sonde până când aplicația pornește complet (evită repornirea prematură):
startupProbe:
httpGet:
path: /healthz
port: 8080
failureThreshold: 30
periodSeconds: 10 # Oferă până la 300 de secunde pentru încărcarea datelor la pornire
# 2. LIVENESS PROBE (Detectează blocajele de execuție / Deadlocks):
# Dacă această sondă eșuează, kubelet OMOARĂ containerul și îl repornește automat:
livenessProbe:
httpGet:
path: /healthz
port: 8080
initialDelaySeconds: 5
periodSeconds: 15
failureThreshold: 3
# 3. READINESS PROBE (Controlează rutarea traficului utilizatorilor):
# Dacă această sondă eșuează, Pod-ul este scos INSTANT din Endpoint-urile Serviciului
# (nu mai primește trafic de la clienți până când nu redevine sănătos!):
readinessProbe:
httpGet:
path: /ready
port: 8080
periodSeconds: 5
failureThreshold: 2
Discuții, Întrebări & Coduri Kubernetes (kubectl)
Ai o întrebare legată de Kubernetes (kubectl), cauți o soluție sau vrei să împărtășești un fragment util de cod? Trimite mai jos contribuția ta.
Fii primul care pune o întrebare sau distribuie un fragment de cod / prompt!
Nu au fost adăugate încă întrebări sau exemple de cod pentru această pagină. Dacă ai întâlnit o problemă sau ai un snippet util, adaugă-l mai jos pentru a-i ajuta pe ceilalți.