Unitate 5 / 11

Kubernetes: orchestrare Manifest, Helm și AI

Câștiguri:

  • Abilitatea de a înțelege obiectele de bază (Pod, Deployment, Service, ConfigMap, Secret, Namespace) și filozofia declarativă a Kubernetes și de a produce manifeste solide pentru inteligența artificială
  • Abilitatea de a face manifeste pregătite pentru producție și securizate cu limite de resurse, verificări de sănătate (sonde), etichete de imagine fixe și RBAC îngust
  • Abilitatea de a verifica contextul corect înainte de execuție și de a aplica disciplina dry-run cu dry-run/diff

Este ușor să rulați un container. Dar stabilirea unui sistem care răspândește sute de containere pe zeci de servere, repornește automat atunci când unul dintre ele se blochează, îl reproduce când sarcina crește și îl actualizează fără timp de nefuncționare? Aceasta este orchestrarea, iar instrumentul standard al industriei este Kubernetes (K8s pe scurt) - platforma care implementează, scalează și gestionează automat containerele într-un cluster. Kubernetes este puternic, dar complex: totul este definit de fișiere YAML lungi, sensibile la indentare, numite manifeste. Aici AI oferă o gură de aer proaspăt; Cu contextul potrivit, produce rapid aceste manifeste și decodifică erorile lor misterioase.

Însă, în Kubernetes, un manifest greșit înseamnă eșecul de a susține un întreg serviciu, scalarea incorect sau lăsarea unei vulnerabilități. Este responsabilitatea dumneavoastră să înțelegeți și să verificați fiecare manifest pe care îl produce AI – mai ales înainte de a se aplica kubectl.

Obiectele de bază Kubernetes

Pentru a audita Kubernetes, ar trebui să cunoașteți principalele concepte:

  • Pod: Cea mai mică unitate de lucru; Conține unul sau mai multe recipiente. În general, Pod-ul nu este utilizat direct, dar sunt folosite obiectele părinte care îl gestionează.
  • Implementare: definește câte copii ale unei aplicații vor rula, ce imagine va folosi și cum va fi actualizată. Dacă un Pod se blochează, îl va recrea automat.
  • Serviciu: Oferă o adresă fixă ​​de rețea și echilibrare a încărcăturii podurilor; Chiar dacă pod-urile vin și pleacă, adresa de acces nu se schimbă.
  • ConfigMap și Secret: Menține valorile de configurare și informațiile secrete separate de Pod-uri. ConfigMap este pentru setări explicite, Secret este pentru valori sensibile.
  • Spațiu de nume: zona care împarte și izolează în mod logic resursele (de exemplu, dev, prod).
  • Intrare: setul de reguli care direcționează traficul HTTP din lumea exterioară către serviciile din cluster.

Helm este „managerul de pachete” al Kubernetes: vă permite să șablonați manifeste recurente (diagrame) și să le instalați cu valori diferite în diferite medii cu o singură comandă. AI produce atât manifest brut, cât și diagramă Helm.

De ce sunt atât de multe obiecte? Deoarece filosofia de bază a Kubernetes este declarativă: definiți „cum doriți să arate sistemul în cele din urmă” (de exemplu, „ai întotdeauna 3 copii ale acestei aplicații rulând”), în timp ce Kubernetes mută continuu starea curentă mai aproape de starea dorită. Dacă un Pod moare, acesta creează unul nou; dacă un nod scade, acesta mută sarcina de lucru la alt nod. De aceea manifestele nu sunt comenzi „do”, ci „lasă să fie așa” rețete. Înțelegerea acestei distincții este critică atunci când citiți manifestele pe care le produce AI: fiecare domeniu descrie o parte din starea dorită a sistemului. Un domeniu greșit înseamnă că Kubernetes lucrează pentru un obiectiv greșit - și acel obiectiv este aplicat în mod tăcut și persistent.

Sfat: În Kubernetes, cel mai important instrument de testare sigură este kubectl apply --dry-run=server -f file.yaml: arată dacă serverul va accepta și ce trebuie să facă fără a aplica efectiv manifestul. Asigurați-vă că rulați dry-run și kubectl diff înainte de a aplica un manifest pentru prod.

Pas cu pas: Crearea manifestelor cu AI

  1. Descrieți aplicația și necesitatea. Numele imaginii, portul, câte replici, limitele resurselor (CPU/memorie).
  2. Solicitați implementare + service. De obicei, ambele sunt necesare împreună.
  3. Separați configurația și secretul. Setări la ConfigMap, valorile sensibile la Secret.
  4. Adăugați controale de sănătate. livenessProbe (este live) și readinessProbe (este gata pentru trafic) sunt critice.
  5. Setați o limită de resurse. Fără solicitări/limite, un Pod poate consuma întregul nod.
  6. Verificați cu `--dry-run` și `diff`, apoi aplicați. Mai întâi în spațiul de nume de testare.

Securitate: riscuri specifice Kubernetes

  1. Secretul nu este cu adevărat secret - este doar base64. Obiectul Kubernetes Secret base64 codifică valori; Aceasta nu este criptare, este ușor de decriptat. Pentru confidențialitate reală, sunt necesare criptarea etcd și seif extern (Vault, cloud secret manager). Nu comite niciodată manifeste secrete direct în Git (există soluții pentru aceasta, cum ar fi Secrete sigilate/Secrete externe).
  2. Setați o limită de resurse. Un Pod fără limite poate prăbuși întregul nod cu o scurgere de memorie.
  3. Autoritate minimă (RBAC). Cu controlul accesului bazat pe roluri, fiecare serviciu/utilizator are doar permisiunile de care are nevoie. AI oferă uneori un cluster-admin mare; restrânge acest lucru.
  4. Nu utilizați eticheta de imagine „cea mai recentă”. Nu știți ce versiune rulează și nu o puteți retrage înapoi.
Atenție: ștergerea kubectl sau o aplicare incorectă poate distruge o implementare activă. Asigurați-vă că verificați în ce spațiu de nume vă aflați (kubectl config current-context) înainte de a rula comenzile; Munca accidentală este un dezastru comun în contextul producției.

Manifest brut vs. masă Helm

criteriu

Manifest YAML brut

Diagrama de cârmă

Instalare

kubectl aplica -f

instalarea cârmei

Multimedia (dezvoltare/prod)

Copy-paste, predispus la erori

Diagramă unică, valori diferite.yaml

Versiune/rollback

cu mana

ușor cu rularea cârmei

Curba de învățare

scăzută

mediu

când

Mediu mic, unic

Multi-media, serviciu repetitiv

trei mini cutii

Cazul 1 — secretul serviciului prăbușit. Un Pod se repornea constant (CrashLoopBackOff). Echipa a dat jurnalele și manifestul AI; AI a arătat că Pod-ul nu a fost niciodată considerat „gata”, deoarece ReadinessProbe se uita la portul greșit. Au reparat portul, serviciul a devenit stabil în 10 minute. Stabilirea manuală a acestei relații ar putea dura ore întregi.

Cazul 2 – nestabilirea limitelor a rupt nodul. Nu existau limite într-o Implementare; O scurgere de memorie a umflat Podul și a prăbușit întregul nod, distrugând și serviciile vecine. După incident, au făcut ca AI să spună „adăugați cereri rezonabile de CPU/memorie și limite la toate implementările” și au făcut-o standard. O linie lipsă a costat ore de întrerupere.

Cazul 3 – RBAC mare capturat. În timpul unei investigații, s-a descoperit că un manifest ServiceAccount generat de AI este legat de rolul de administrator al clusterului, ceea ce înseamnă că serviciul ar putea gestiona întregul cluster. Echipa a restrâns permisiunea de a citi numai Pod-uri în spațiul lor de nume. Principiul cel mai mic privilegiu a închis o vulnerabilitate de securitate.

Patru șabloane copiabile

1) Implementare + producție de servicii:

Scrieți un manifest de implementare și servicii pentru Kubernetes. Aplicație: [AD], imagine: [imagine: fixed-version], port: [X], replica: [N]. Reguli:- Adăugați cereri și limite CPU/memorie.- Definiți livenessProbe și readinessProbe.- Citiți configurația din ConfigMap, secretă din obiectul Secret; Nu încorporați valori în manifest, folosiți substituenți. - NU utilizați eticheta de imagine „:latest”. Dați cu descriere.

2) Rezolvarea erorilor manifeste:

Podul actual este în starea [CrashLoopBackOff / Pending / ImagePullBackOff]. În conformitate cu următorul manifest și rezultatul „kubectl describe”, enumerați cauzele principale posibile în ordinea probabilității și lansați comanda de verificare pentru fiecare. Manifest: [YAML] Descrieți: [OUTPUT]

3) Verificare de securitate/integritate:

Verificați acest manifest Kubernetes: lipsește limita de resurse, lipsește prob, există o etichetă :latest, există un RBAC/permisiune prea larg, este secretul încorporat în manifest? Scrieți constatările în ordinea importanței și corectând. Manifest: [YAML]

4) Conversie în diagrama Helm:

Convertiți următoarele manifeste brute într-o diagramă Helm reutilizabilă: ce valori ar trebui să treacă în values.yaml (imagine, replică, sursă, mediu)? Afișați structura diagramei și valorile eșantionului.yaml.Manifests: [YAML]

Prompt slab / Prompt puternic

Slab: „Scrieți Kubernetes YAML pentru aplicația mea”.

Rezultat: o implementare fără sondă, fără limită cu :latest tag, încorporarea câmpului secret; Nesigur și fragil în prod.

Puternic: „Scrieți Kubernetes Deployment + Service. Imagine myapp:1.4.2, 3 replici, 8080 porturi. CPU 100m-500m, memorie 128Mi-512Mi adăugați cereri/limite. Puneți proba de viață pentru /healthz, sonda de pregătire pentru /gata. Citiți descrierea Secretului din manifestul G cu descrierea secretă.

Diferență: a doua versiune promptă oferă scară, limite de resurse, verificări de sănătate și reguli secrete; Producția este aproape de producție și sigură.

Greșeli comune

  • Nu se stabilesc limite de resurse. Un singur Pod poate consuma întregul nod.
  • Nu adăugarea unui control de sănătate (sondă). Kubernetes nu poate detecta un pod blocat/nepregătit.
  • eticheta `:latest`. Devine neclar care versiune rulează, nu poate fi anulată.
  • Trimiterea secretului direct către Git. Base64 nu este criptare; toată lumea o rezolvă.
  • Rularea comenzilor în context/spațiu de nume greșit. Cel mai comun mod de a bloca în prod.
  • sarind peste `--dry-run`/`diff`. Nu văd ce se va întâmpla înainte de implementare.

Pe scurt

Kubernetes este un orchestrator puternic, dar complex, care implementează, scalează și optimizează automat containerele într-un cluster; Totul este definit de YAML-uri manifeste, pe care Helm le modelează. AI produce rapid manifeste de implementare/serviciu și diagrame Helm, rezolvă erori misterioase - dar trebuie să solicitați în mod explicit limita de resurse, verificarea stării de sănătate, eticheta de imagine imuabilă, RBAC îngust și reguli de securitate secrete. --dry-run, diff și verificarea corectă a contextului sunt obiceiuri care previn blocarea produselor.

Sarcina de aplicare

Solicitați AI să genereze un manifest pentru o aplicație exemplu cu șablonul „Deployment + Service generation”. Apoi: (1) Verificați limita de resurse, sondajul, :latest și secretul cu șablonul „Verificare de securitate/sanity”; (2) rulați kubectl apply --dry-run=server pe un cluster de testare/minikube dacă este posibil și citiți rezultatul; (3) notați cele două elemente de siguranță/robustețe cele mai importante pe care le găsiți lipsă.

lista de verificare

  • [ ] Am adăugat la cererea mea versiunea imaginii, numărul de replici, limitele de porturi și resurse.
  • [ ] Am adăugat probă de viață și de pregătire la manifest.
  • [ ] Eticheta de imagine a fost remediată; Nu am folosit :latest.
  • [ ] Secretul nu este încorporat în manifest; Am folosit obiect secret/seif extern.
  • [ ] Am restrâns RBAC/permisiuni la permisiuni minime.
  • [ ] Înainte de a aplica, am verificat că mă aflam în contextul corect și că --dry-run/diff iese.