Vienība 5 / 11

Kubernetes: Manifests, Helm un AI vadīta orķestrēšana

Ieguvumi:

  • Spēja izprast Kubernetes pamatobjektus (Pod, Deployment, Service, ConfigMap, Secret, Namespace) un deklaratīvo filozofiju un radīt stabilus manifestus mākslīgajam intelektam
  • Spēja sagatavot manifestus ražošanai un nodrošināt to drošību ar resursu ierobežojumiem, veselības pārbaudēm (zondēm), fiksētiem attēlu tagiem un šauru RBAC
  • Spēja pārbaudīt pareizo kontekstu pirms izpildes un pielietot sausās braukšanas disciplīnu ar sauso skrējienu/diff

Ir viegli darbināt vienu konteineru. Bet izveidot sistēmu, kas izplata simtiem konteineru desmitiem serveru, automātiski restartējas, kad kāds no tiem avarē, atkārto to, kad slodze palielinās, un atjaunina to bez dīkstāves? Tā ir orķestrēšana, un nozares standarta rīks ir Kubernetes (saīsināti K8s) — platforma, kas automātiski izvieto, mērogo un pārvalda konteinerus klasterī. Kubernetes ir spēcīgs, bet sarežģīts: visu nosaka gari, pret atkāpēm jutīgi YAML faili, ko sauc par manifestiem. Šeit AI sniedz svaiga gaisa elpu; Ar pareizo kontekstu tas ātri izveido šos manifestus un atšifrē to noslēpumainās kļūdas.

Taču programmā Kubernetes nepareizs manifests nozīmē, ka netiek nodrošināts viss pakalpojums, tiek veikta nepareiza mērogošana vai tiek atstāta ievainojamība. Jūsu pienākums ir izprast un pārbaudīt katru manifestu, ko rada AI, īpaši pirms kubectl pieteikšanās.

Kubernetes pamatobjekti

Lai pārbaudītu Kubernetes, jums jāzina galvenie jēdzieni:

  • Pod: mazākā darba vienība; Tajā ir viens vai vairāki konteineri. Parasti Pod netiek izmantots tieši, bet tiek izmantoti vecākobjekti, kas to pārvalda.
  • Izvietošana: definē, cik lietojumprogrammas kopiju darbosies, kuru attēlu tā izmantos un kā tā tiks atjaunināta. Ja pods avarē, tas automātiski tiks izveidots no jauna.
  • Pakalpojums: nodrošina fiksētu tīkla adresi un slodzes līdzsvarošanu podiem; Lai gan podi nāk un iet, piekļuves adrese nemainās.
  • ConfigMap un Secret: saglabā konfigurācijas vērtības un slepeno informāciju atsevišķi no podiem. ConfigMap ir paredzēts skaidriem iestatījumiem, Secret ir jutīgām vērtībām.
  • Nosaukumtelpa: apgabals, kas loģiski sadala un izolē resursus (piemēram, dev, prod).
  • Ieeja: noteikumu kopa, kas novirza HTTP trafiku no ārpasaules uz klastera pakalpojumiem.

Helm ir Kubernetes "pakešu pārvaldnieks": tas ļauj veidot periodiskus manifestus (diagrammas) un instalēt tos ar dažādām vērtībām dažādās vidēs ar vienu komandu. AI veido gan neapstrādātu manifestu, gan Helm diagrammu.

Kāpēc ir tik daudz objektu? Tā kā Kubernetes pamatfilozofija ir deklaratīva: jūs definējat, "kā vēlaties, lai sistēma galu galā izskatās" (piemēram, "vienmēr darbojas 3 šīs lietojumprogrammas kopijas"), savukārt Kubernetes nepārtraukti pārvieto pašreizējo stāvokli tuvāk vēlamajam stāvoklim. Ja pods nomirst, tas izveido jaunu; ja mezgls nokrīt, tas pārvieto darba slodzi uz citu mezglu. Tāpēc manifesti ir nevis komandas "darīt", bet gan receptes "lai tā būtu". Šīs atšķirības izpratne ir ļoti svarīga, lasot AI radītos manifestus: katrs domēns apraksta daļu no vēlamā sistēmas stāvokļa. Nepareizs domēns nozīmē, ka Kubernetes strādā pie nepareiza mērķa — un šis mērķis tiek klusi, neatlaidīgi īstenots.

Padoms. Programmā Kubernetes vissvarīgākais drošās testēšanas rīks ir kubectl apply --dry-run=server -f file.yaml: tas parāda, vai serveris pieņems un ko darīt, faktiski neizmantojot manifestu. Pirms manifesta lietošanas prod.

Soli pa solim: manifestu izveide, izmantojot AI

  1. Aprakstiet pieteikumu un nepieciešamību. Attēla nosaukums, ports, reprodukciju skaits, resursu ierobežojumi (CPU/atmiņa).
  2. Pieprasīt izvietošanu + pakalpojumu. Parasti abi ir nepieciešami kopā.
  3. Atsevišķa konfigurācija un noslēpums. Iestatījumi uz ConfigMap, sensitīvās vērtības uz Secret.
  4. Pievienojiet veselības pārbaudes. livenessProbe (vai tas ir tiešraidē) un ReadinessProbe (vai tas ir gatavs satiksmei) ir kritiski svarīgi.
  5. Iestatiet resursu ierobežojumu. Bez pieprasījumiem/ierobežojumiem Pod var patērēt visu mezglu.
  6. Pārbaudiet, izmantojot “--dry-run” un “diff”, pēc tam lietojiet. Vispirms testa nosaukumvietā.

Drošība: Kubernetes specifiski riski

  1. Noslēpums nav īsti noslēpums — tas ir tikai base64. Kubernetes Secret objekts base64 kodē vērtības; Tā nav šifrēšana, to ir viegli atšifrēt. Lai nodrošinātu patiesu privātumu, ir nepieciešama etcd šifrēšana un ārējā glabātuve (Vault, mākoņa noslēpumu pārvaldnieks). Nekad neiesniedziet slepenus manifestus tieši Git (tam ir risinājumi, piemēram, Sealed Secrets/External Secrets).
  2. Iestatiet resursu ierobežojumu. Pod bez ierobežojumiem var avarēt visu mezglu ar atmiņas noplūdi.
  3. Minimālā autoritāte (RBAC). Izmantojot uz lomu balstīto piekļuves kontroli, katram pakalpojumam/lietotājam ir tikai nepieciešamās atļaujas. AI dažreiz dod lielu klasteru administratoru; sašauriniet šo.
  4. Neizmantojiet “jaunāko” attēla tagu. Jūs nezināt, kura versija darbojas, un nevarat to atsaukt.
Uzmanību: kubectl dzēšana vai nepareiza pielietošana var iznīcināt reāllaika izvietošanu. Pirms komandu palaišanas noteikti pārbaudiet, kurā nosaukumvietā atrodaties (kubectl config current-context); Nejaušs darbs ražošanas kontekstā ir izplatīta katastrofa.

Raw manifest vs Helm tabula

kritērijs

Neapstrādāts YAML manifests

Stūres diagramma

Uzstādīšana

kubectl pieteikties -f

stūres uzstādīšana

Multivide (izstrādātājs/prod)

Kopēt-ielīmēt, pastāv kļūdas

Viena diagramma, dažādas vērtības.yaml

Versija/atcelšana

ar roku

viegli ar stūres atgriešanu

Mācību līkne

zems

vidējs

kad

Maza, vienota vide

Multivide, atkārtots pakalpojums

trīs mini futrāļi

1. gadījums — avārijas pakalpojuma noslēpums. Pod tika pastāvīgi atsāknēts (CrashLoopBackOff). Komanda nodeva žurnālus un manifestu AI; AI parādīja, ka Pod nekad netika uzskatīts par "gatavu", jo gatavībaProbe skatījās uz nepareizo portu. Viņi salaboja ostu, serviss kļuva stabils 10 minūtēs. Šo attiecību manuāla izveidošana var aizņemt stundas.

2. gadījums — ierobežojumu nenoteikšana salauza mezglu. Izvietošanai nebija ierobežojumu; Atmiņas noplūde uzpūta Pod un avarēja visu mezglu, samazinot arī blakus esošos pakalpojumus. Pēc incidenta viņi lika AI teikt "pievienot saprātīgus CPU/atmiņas pieprasījumus un ierobežojumus visiem izvietojumiem" un padarīja to par standartu. Viena trūkstoša līnija maksāja stundas dīkstāves.

3. gadījums — fiksēts liels RBAC. Izmeklēšanas laikā tika konstatēts, ka AI ģenerētais ServiceAccount manifests ir saistīts ar klastera administratora lomu — tas nozīmē, ka pakalpojums var pārvaldīt visu klasteru. Komanda sašaurināja atļauju lasīt tikai Pods savā nosaukumvietā. Mazāko privilēģiju princips novērsa drošības ievainojamību.

Četras kopējamas veidnes

1) Izvietošana + pakalpojumu sniegšana:

Uzrakstiet Kubernetes izvietošanas un pakalpojuma manifestu. Lietojumprogramma: [AD], attēls: [attēls: fiksēta versija], ports: [X], kopija: [N]. Noteikumi:- Pievienot CPU/atmiņas pieprasījumus un ierobežojumus.- Definēt dzīvīgumuProbe un ReadinessProbe.- Nolasīt konfigurāciju no ConfigMap, noslēpumu no Secret objekta; Neievietojiet vērtības manifestā, izmantojiet vietturus. - NELIETOJIET attēla tagu ":latest". Dodiet ar aprakstu.

2) Acīmredzamu kļūdu novēršana:

Pašreizējais Pod ir [CrashLoopBackOff / Pending / ImagePullBackOff] stāvoklī. Saskaņā ar šo manifestu un “kubectl description” izvadi uzskaitiet iespējamos pamatcēloņus iespējamības secībā un katram izdodiet verify komandu. Manifests: [YAML] Aprakstiet: [OUTPUT]

3) Drošības/integritātes pārbaude:

Pārbaudiet šo Kubernetes manifestu: vai trūkst resursu ierobežojuma, vai trūkst problēmas, vai ir :latest tags, vai ir pārāk plaša RBAC/atļauja, vai noslēpums ir iegults manifestā? Uzrakstiet secinājumus svarīguma secībā un ar labojumiem. Manifests: [YAML]

4) Pāreja uz stūres diagrammu:

Konvertējiet tālāk norādītos neapstrādātos manifestus par atkārtoti lietojamu Helm diagrammu: kurām vērtībām ir jāiet uz value.yaml (attēls, kopija, avots, vide)? Rādīt diagrammas struktūru un vērtības paraugus.yaml.Manifests: [YAML]

Vāja uzvedne / spēcīga uzvedne

Vāji: "Manam pieteikumam ierakstiet Kubernetes YAML."

Rezultāts: bezpārbaudes, bez ierobežojuma izvietošana ar :latest tagu, iegulstot slepeno vienkāršāko informāciju; Nedrošs un trausls prod.

Strong: "Write Kubernetes Deployment + Service. Image myapp: 1.4.2, 3 replikas, 8080 ports. CPU 100m-500m, atmiņa 128Mi-512Mi pievienot pieprasījumus/ierobežojumus. Ievietojiet dzīvīguma zondi /healthz, gatavības zondi /ready. Izlasiet slepeno objektu G, pievienojiet aprakstu.

Atšķirība: otrā uzvednes versija sniedz mērogu, resursu ierobežojumus, veselības pārbaudes un slepeno noteikumu; Izlaide ir tuvu ražošanai un droša.

Biežas kļūdas

  • Nenosaka resursu ierobežojumus. Viens pods var patērēt visu mezglu.
  • Nepievienojot veselības pārbaudi (zondi). Kubernetes nevar noteikt avarējušu/negatavu Pod.
  • `:latest`. Kļūst neskaidrs, kura versija darbojas, to nevar atgriezt.
  • Noslēpuma nodošana tieši Gitam. Base64 nav šifrēšana; visi to atrisina.
  • Palaiž komandas nepareizā kontekstā/nosaukumvietā. Visizplatītākais avārijas veids prod.
  • izlaižot `--dry-run`/`diff. Pirms ieviešanas neredzēt, kas notiks.

Rezumējot

Kubernetes ir jaudīgs, bet sarežģīts orķestrētājs, kas automātiski izvieto, mērogo un optimizē konteinerus visā klasterī; Visu nosaka manifesti YAML, kurus Helm veido veidnes. AI ātri izveido izvietošanas/pakalpojumu manifestus un Helm diagrammas, atrisina noslēpumainas kļūdas, taču jums ir skaidri jāpieprasa resursu ierobežojums, veselības pārbaude, nemainīgs attēla tags, šauri RBAC un slepeni drošības noteikumi. --Dry-run, Diff un pareiza konteksta pārbaude ir ieradumi, kas novērš prod avārijas.

Lietojumprogrammas uzdevums

Lieciet AI ģenerēt manifestu lietojumprogrammas paraugam, izmantojot veidni “Izvietošana + pakalpojuma ģenerēšana”. Pēc tam: (1) pārbaudiet, vai tai nav resursu ierobežojuma, zondes, :latest un slepenības, izmantojot veidni "Drošības/saprāta pārbaude"; (2) palaist kubectl apply --dry-run=server testa klasterī/minikubā, ja iespējams, un nolasīt izvadi; (3) atzīmējiet divus vissvarīgākos drošības/noturības elementus, kas, jūsuprāt, trūkst.

kontrolsaraksts

  • [ ] Es savam pieprasījumam pievienoju attēla versiju, kopiju skaitu, portu un resursu ierobežojumus.
  • [ ] Es manifestam pievienoju dzīvīguma un gatavības zondi.
  • [ ] Attēla atzīme fiksēta; Es neizmantoju :latest.
  • [ ] Noslēpums manifestā nav iegults; Es izmantoju Secret objektu/ārējo glabātuvi.
  • [ ] Es samazināju RBAC/atļaujas līdz minimālajām atļaujām.
  • [ ] Pirms pieteikšanās es pārliecinājos, ka atrados pareizajā kontekstā un vai --dry-run/diff izvadi.