Yunit 5 / 11

Kubernetes: Manifest, Helm at AI-Powered Orchestration

Mga nadagdag:

  • Kakayahang maunawaan ang mga pangunahing bagay (Pod, Deployment, Serbisyo, ConfigMap, Secret, Namespace) at deklaratibong pilosopiya ng Kubernetes at makagawa ng mga solidong manifest para sa artificial intelligence
  • Kakayahang gawing handa ang mga manifest para sa produksyon at secure na may mga limitasyon sa mapagkukunan, mga pagsusuri sa kalusugan (probes), mga nakapirming tag ng imahe at makitid na RBAC
  • Kakayahang i-verify ang tamang konteksto bago isagawa at ilapat ang disiplinang dry-run na may dry-run/diff

Madaling magpatakbo ng isang lalagyan. Ngunit ang pagtatatag ng system na nagkakalat ng daan-daang container sa dose-dosenang mga server, awtomatikong magre-restart kapag nag-crash ang isa sa mga ito, ginagaya ito kapag tumaas ang load, at ina-update ito nang walang downtime? Orchestration iyon, at ang pang-industriyang tool ay Kubernetes (K8s para sa maikli) — ang platform na awtomatikong nagde-deploy, nagsusukat, at namamahala ng mga container sa isang cluster. Ang Kubernetes ay makapangyarihan ngunit kumplikado: ang lahat ay tinutukoy ng mahaba, indentation-sensitive na YAML file — tinatawag na mga manifest. Dito nagbibigay ang AI ng sariwang hangin; Gamit ang tamang konteksto, mabilis itong gumagawa ng mga manifest na ito at nagde-decode ng kanilang mga mahiwagang pagkakamali.

Ngunit sa Kubernetes, ang maling manifest ay nangangahulugan ng hindi pagtupad sa isang buong serbisyo, hindi wastong pag-scale, o pag-iiwan ng kahinaan. Responsibilidad mong unawain at i-verify ang bawat manifest na ginagawa ng AI — lalo na bago mag-apply ang kubectl.

Mga pangunahing bagay ng Kubernetes

Upang i-audit ang Kubernetes, dapat mong malaman ang mga pangunahing konsepto:

  • Pod: Pinakamaliit na working unit; Naglalaman ito ng isa o ilang lalagyan. Sa pangkalahatan, hindi direktang ginagamit ang Pod, ngunit ginagamit ang mga parent object na namamahala dito.
  • Deployment: Tinutukoy kung gaano karaming mga kopya ng isang application ang tatakbo, aling larawan ang gagamitin nito, at kung paano ito ia-update. Kung nag-crash ang isang Pod, awtomatiko itong muling gagawa.
  • Serbisyo: Nagbibigay ng nakapirming address ng network at pagbabalanse ng pag-load sa mga pod; Kahit na dumating at umalis ang mga pod, hindi nagbabago ang access address.
  • ConfigMap at Secret: Pinapanatiling hiwalay ang mga value ng configuration at sikretong impormasyon sa Pods. Ang ConfigMap ay para sa mga tahasang setting, ang Secret ay para sa mga sensitibong halaga.
  • Namespace: Ang lugar na lohikal na naghahati at naghihiwalay ng mga mapagkukunan (hal. dev, prod).
  • Ingress: Ang hanay ng panuntunan na nagdidirekta ng trapiko ng HTTP mula sa labas ng mundo patungo sa mga serbisyo sa cluster.

Ang Helm ay ang "package manager" ng Kubernetes: pinapayagan ka nitong mag-template ng mga umuulit na manifest (mga chart) at i-install ang mga ito na may iba't ibang mga halaga sa iba't ibang mga kapaligiran na may iisang command. Ang AI ay gumagawa ng parehong raw manifest at Helm chart.

Bakit maraming bagay? Dahil ang pangunahing pilosopiya ng Kubernetes ay deklaratibo: tinutukoy mo ang "kung paano mo gustong makita ang system sa huli" (hal. "palaging may 3 kopya ng application na ito na tumatakbo"), habang patuloy na inililipat ng Kubernetes ang kasalukuyang estado na mas malapit sa gustong estadong iyon. Kung mamatay ang isang Pod, lilikha ito ng bago; kung bumaba ang isang node, inililipat nito ang workload sa isa pang node. Iyon ang dahilan kung bakit ang mga manifest ay hindi "gawin" na mga utos, ngunit "hayaan itong maging ganito" na mga recipe. Ang pag-unawa sa pagkakaibang ito ay kritikal kapag binabasa ang mga manifest na ginagawa ng AI: ang bawat domain ay naglalarawan ng bahagi ng gustong estado ng system. Ang isang maling domain ay nangangahulugan na ang Kubernetes ay nagtatrabaho patungo sa isang maling layunin — at ang layuning iyon ay tahimik, patuloy na ipinapatupad.

Tip: Sa Kubernetes, ang pinakamahalagang tool sa ligtas na pagsubok ay kubectl apply --dry-run=server -f file.yaml: ipinapakita nito kung tatanggapin ng server at kung ano ang gagawin nang hindi aktwal na inilalapat ang manifest. Tiyaking magpatakbo ng dry-run at kubectl diff bago maglapat ng manifest sa prod.

Hakbang-hakbang: Paggawa ng mga manifest gamit ang AI

  1. Ilarawan ang aplikasyon at pangangailangan. Pangalan ng larawan, port, kung gaano karaming mga replika, mga limitasyon ng mapagkukunan (CPU/memorya).
  2. Humiling ng Deployment + Serbisyo. Karaniwan ang dalawa ay kinakailangan magkasama.
  3. Paghiwalayin ang config at sikreto. Mga setting sa ConfigMap, mga sensitibong halaga sa Lihim.
  4. Magdagdag ng mga pagsusuri sa kalusugan. Ang livenessProbe (live ba ito) at readinessProbe (handa na ba ito para sa trapiko) ay kritikal.
  5. Magtakda ng limitasyon sa mapagkukunan. Nang walang mga kahilingan/limitasyon, maaaring ubusin ng Pod ang buong node.
  6. I-verify gamit ang `--dry-run` at `diff`, pagkatapos ay ilapat. Una sa namespace ng pagsubok.

Seguridad: Mga panganib na partikular sa Kubernetes

  1. Secret isn't really secret — it's just base64. Ang Kubernetes Secret object base64 ay nag-encode ng mga halaga; Ito ay hindi encryption, ito ay madaling decrypted. Para sa totoong privacy, kailangan ang etcd encryption at external vault (Vault, cloud secret manager). Huwag kailanman direktang magsagawa ng mga lihim na manifest sa Git (may mga solusyon para dito gaya ng Mga Selyadong Lihim/Mga Panlabas na Lihim).
  2. Magtakda ng limitasyon sa mapagkukunan. Maaaring i-crash ng Pod na walang limitasyon ang buong node na may memory leak.
  3. Pinakamababang awtoridad (RBAC). Sa Role-Based Access Control, ang bawat serbisyo/user ay mayroon lamang mga pahintulot na kailangan nito. Minsan nagbibigay ang AI ng malaking cluster-admin; paliitin ito.
  4. Huwag gamitin ang `pinakabago` na tag ng larawan. Hindi mo alam kung aling bersyon ang tumatakbo at hindi mo ito maibabalik.
Mag-ingat: maaaring sirain ng kubectl delete o maling pag-apply ang isang live na Deployment. Tiyaking i-verify kung aling namespace ka (kubectl config current-context) bago patakbuhin ang mga command; Ang aksidenteng trabaho ay isang pangkaraniwang sakuna sa konteksto ng produksyon.

Raw manifest vs. Helm table

pamantayan

Raw YAML manifest

Helm chart

Pag-install

kubectl ilapat -f

pagkakabit ng timon

Multimedia (dev/prod)

Copy-paste, madaling magkamali

Isang tsart, iba't ibang mga halaga.yaml

Bersyon/rollback

sa pamamagitan ng kamay

madali gamit ang helm rollback

Learning curve

mababa

daluyan

kailan

Maliit, nag-iisang kapaligiran

Multi-media, paulit-ulit na serbisyo

tatlong mini case

Case 1 — ang sikreto ng nag-crash na serbisyo. Ang isang Pod ay patuloy na nagre-reboot (CrashLoopBackOff). Ibinigay ng koponan ang mga log at manifest sa AI; Ipinakita ng AI na ang Pod ay hindi kailanman itinuturing na "handa" dahil ang kahandaanProbe ay tumitingin sa maling port. Inayos nila ang port, naging stable ang serbisyo sa loob ng 10 minuto. Ang manu-manong pagtatatag ng relasyong ito ay maaaring tumagal ng ilang oras.

Kaso 2 — hindi pagtatakda ng mga limitasyon ay sinira ang buhol. Walang mga limitasyon sa isang Deployment; Ang isang memory leak ay nagpalubog sa Pod at nag-crash sa buong node, na nagpabagsak din sa mga kalapit na serbisyo. Pagkatapos ng insidente, sinabi nila sa AI na "magdagdag ng mga makatwirang kahilingan at limitasyon ng CPU/memory sa lahat ng Deployment" at ginawa itong pamantayan. Ang isang nawawalang linya ay nagkakahalaga ng mga oras ng downtime.

Case 3 — malaking RBAC ang nakuha. Sa panahon ng pagsisiyasat, nakitang nauugnay ang isang ServiceAccount manifest na binuo ng AI sa cluster-admin role — ibig sabihin, maaaring pamahalaan ng serbisyo ang buong cluster. Pinaliit ng team ang pahintulot na magbasa lang ng Mga Pod sa kanilang namespace. Ang prinsipyo ng hindi bababa sa pribilehiyo ay nagsara ng isang kahinaan sa seguridad.

Apat na maaaring kopyahin na mga template

1) Deployment + Produksyon ng serbisyo:

Sumulat ng manifest ng Deployment at Serbisyo para sa Kubernetes. Application: [AD], larawan: [image: fixed-version], port: [X], replica: [N]. Mga Panuntunan: - Magdagdag ng mga kahilingan at limitasyon ng CPU/memorya.- Tukuyin ang livenessProbe at readyProbe.- Basahin ang configuration mula sa ConfigMap, lihim mula sa Secret object; Huwag mag-embed ng mga halaga sa manifest, gumamit ng mga placeholder. - HUWAG gumamit ng image tag na ":latest". Ibigay na may paglalarawan.

2) Manifest na paglutas ng error:

Ang kasalukuyang Pod ay nasa [CrashLoopBackOff / Pending / ImagePullBackOff] na estado. Ayon sa sumusunod na manifest at 'kubectl describe' na output, ilista ang mga posibleng ugat na sanhi sa pagkakasunud-sunod ng probabilidad at ibigay ang utos sa pag-verify para sa bawat isa. Manifest: [YAML] Ilarawan: [OUTPUT]

3) Pagsusuri ng seguridad/integridad:

Suriin ang Kubernetes manifest na ito: nawawala ba ang limitasyon ng mapagkukunan, nawawala ba ang prob, mayroon bang :latest na tag, mayroon bang masyadong malawak na RBAC/pahintulot, naka-embed ba ang sikreto sa manifest? Isulat ang mga natuklasan ayon sa kahalagahan at may pagwawasto. Manifest: [YAML]

4) Conversion sa Helm chart:

I-convert ang mga sumusunod na raw manifests sa isang magagamit muli na Helm chart: aling mga value ang dapat lumabas sa values.yaml (larawan, replica, source, environment)? Ipakita ang istraktura ng tsart at mga sample na halaga.yaml.Manifests: [YAML]

Mahinang prompt / Malakas na prompt

Mahina: "Isulat ang Kubernetes YAML para sa aking aplikasyon."

Resulta: isang no-probe, no-limit Deployment na may :latest na tag, pag-embed ng sikretong plain; Insecure at marupok sa prod.

Malakas: "Isulat ang Kubernetes Deployment + Service. Imahe myapp:1.4.2, 3 replika, 8080 port. CPU 100m-500m, memory 128Mi-512Mi magdagdag ng mga kahilingan/limitasyon. Ilagay ang liveness probe para sa /healthz, ready probe para sa /ready. Basahin ang Lihim na naka-embed mula sa Gid. object.

Pagkakaiba: ang pangalawang prompt na bersyon ay nagbibigay ng sukat, mga limitasyon ng mapagkukunan, mga pagsusuri sa kalusugan at lihim na panuntunan; Ang output ay malapit sa produksyon at ligtas.

Mga karaniwang pagkakamali

  • Hindi pagtatakda ng mga limitasyon sa mapagkukunan. Maaaring ubusin ng isang Pod ang buong node.
  • Hindi nagdadagdag ng health check (probe). Hindi matukoy ng Kubernetes ang isang nag-crash/hindi handa na Pod.
  • `:pinakabago` na tag. Ito ay nagiging hindi malinaw kung aling bersyon ang tumatakbo, hindi ito maaaring ibalik.
  • Direktang ibibigay ang sikreto sa Git. Ang Base64 ay hindi naka-encrypt; lahat ay malulutas ito.
  • Pagpapatakbo ng mga utos sa maling konteksto/namespace. Ang pinakakaraniwang paraan ng pag-crash sa prod.
  • nilalaktawan ang `--dry-run`/`diff`. Hindi nakikita kung ano ang mangyayari bago ang pagpapatupad.

Sa buod

Ang Kubernetes ay isang malakas ngunit kumplikadong orkestra na awtomatikong nagde-deploy, nagsusukat, at nag-o-optimize ng mga container sa isang cluster; Ang lahat ay tinukoy ng mga manifest na YAML, na na-templatize ng Helm. Mabilis na gumagawa ang AI ng Deployment/Service manifests at Helm chart, nilulutas ang mga mahiwagang bug — ngunit kailangan mong tahasan na humingi ng limitasyon sa mapagkukunan, pagsusuri sa kalusugan, hindi nababagong tag ng larawan, makitid na RBAC at mga lihim na panuntunan sa seguridad. --dry-run, diff at tamang pagsuri sa konteksto ay mga gawi na pumipigil sa mga pag-crash ng prod.

Gawain ng aplikasyon

Hayaang bumuo ang AI ng manifest para sa isang sample na application na may template na "Deployment + Service generation." Pagkatapos: (1) Ipasuri ito para sa resource limit, probe, :latest, at secret gamit ang template na "Security/sanity check"; (2) patakbuhin ang kubectl apply --dry-run=server sa isang test cluster/minikube kung maaari at basahin ang output; (3) tandaan ang dalawang pinakamahalagang bagay sa kaligtasan/katatagan na nakikita mong nawawala.

checklist

  • [ ] Idinagdag ko ang bersyon ng larawan, bilang ng mga replika, port at mga limitasyon sa mapagkukunan sa aking kahilingan.
  • [ ] Nagdagdag ako ng kasiglahan at pagiging handa na pagsisiyasat sa manifest.
  • [ ] Naayos ang tag ng larawan; Hindi ko ginamit :latest.
  • [ ] Ang lihim ay hindi naka-embed sa manifest; Ginamit ko ang Secret object/external vault.
  • [ ] Pinaliit ko ang RBAC/mga pahintulot sa kaunting mga pahintulot.
  • [ ] Bago mag-apply, na-verify ko na nasa tamang konteksto ako at ang mga --dry-run/diff na mga output.