Skip to content
Home " IT ir technologijos " Kaip veikia Kubernetes sistema

Kaip veikia Kubernetes sistema

Kas iš tikrųjų yra Kubernetes ir kodėl visi apie jį kalba

Jei kada nors bandėte paleisti programą savo kompiuteryje, o paskui ją perkelti į serverį ar debesį, tikriausiai susidūrėte su įvairiausiais iššūkiais. Programa veikia jūsų kompiuteryje, bet serveryje – ne. Arba veikia viename serveryje, bet kai reikia ją paleisti dešimtyje serverių vienu metu, prasideda tikras košmaras. Būtent šią problemą ir sprendžia Kubernetes.

Kubernetes (dažnai sutrumpintai vadinamas K8s, nes tarp K ir s yra 8 raidės) yra atviro kodo sistema, skirta automatizuoti konteinerizuotų programų diegimą, mastelio keitimą ir valdymą. Skamba sudėtingai? Iš esmės tai tarsi dirigentas orkestrui – jis koordinuoja visus muzikantus (programas), kad jie grogtų sinchroniškai ir tinkamu laiku.

Sistemą sukūrė Google inžinieriai 2014 metais, remdamiesi savo vidine Borg sistema, kurią naudojo daugiau nei dešimtmetį. Dabar Kubernetes yra vienas populiariausių įrankių DevOps pasaulyje, jį naudoja nuo mažų startuolių iki milžinų kaip Spotify, Airbnb ar Netflix.

Konteineriai – pagrindas, ant kurio stato Kubernetes

Prieš kalbant apie Kubernetes, reikia suprasti konteinerius. Įsivaizduokite, kad jūsų programa yra kaip augalas. Jei norite jį perkelti, negalite tiesiog išrauti ir įkišti į naują vietą – jis gali nežūti. Bet jei augalą perkeliate kartu su jo žeme specialiame vazone, jis puikiai prisitaikys naujoje vietoje.

Konteineris yra būtent toks “vazonas” programai. Jame yra ne tik pati programa, bet ir visos bibliotekos, priklausomybės, konfigūracijos – visa, ko reikia programai veikti. Populiariausias konteinerizavimo įrankis yra Docker, nors Kubernetes palaiko ir kitus formatus.

Problema prasideda, kai turite ne vieną konteinerį, o šimtus ar tūkstančius. Kaip juos visus valdyti? Kaip užtikrinti, kad jei vienas konteineris “numiršta”, automatiškai būtų paleistas naujas? Kaip paskirstyti apkrovą tarp kelių konteinerių? Čia ir ateina Kubernetes pagalba.

Kubernetes architektūra: kaip viskas sudėliota

Kubernetes sistema susideda iš kelių pagrindinių komponentų, kurie dirba kartu kaip gerai suderintas mechanizmas. Pirmiausia yra Control Plane (valdymo plokštuma) – tai tarsi smegenys, kurios priima sprendimus ir koordinuoja visą sistemą.

Control Plane sudaro keli komponentai. API serveris yra pagrindinis įėjimo taškas – per jį komunikuojate su Kubernetes. etcd yra duomenų bazė, kurioje saugoma visa klasterio būsena. Scheduler (planuotojas) nusprendžia, kuriame mazge (node) paleisti naują konteinerį. O Controller Manager stebi, ar viskas veikia taip, kaip turėtų, ir taiso problemas.

Kita svarbi dalis yra Worker Nodes (darbo mazgai) – tai faktiniai serveriai, kuriuose veikia jūsų konteineriai. Kiekviename mazge yra kubelet – agentas, kuris bendrauja su Control Plane ir užtikrina, kad konteineriai veiktų. Taip pat yra kube-proxy, kuris tvarko tinklo maršrutizavimą, ir konteinerių vykdymo aplinka (paprastai Docker ar containerd).

Visa ši architektūra leidžia Kubernetes būti itin atspariam gedimams. Jei vienas mazgas neveikia, sistema automatiškai perkelia konteinerius į kitus mazgus. Jei reikia daugiau resursų, galite pridėti naujų mazgų, ir Kubernetes automatiškai pradės juos naudoti.

Podai, servisai ir kiti Kubernetes objektai

Kubernetes pasaulyje viskas yra objektai, aprašomi YAML ar JSON failuose. Pagrindinis objektas yra Pod – mažiausias diegimo vienetas Kubernetes sistemoje. Paprastai vienas Pod’as turi vieną konteinerį, bet gali turėti ir kelis, jei jie glaudžiai susiję.

Pod’ai yra laikini – jie gali būti sukurti ir sunaikinti bet kada. Todėl tiesiogiai su jais nedirba. Vietoj to naudojami Deployments – aukštesnio lygio objektai, kurie aprašo, kiek Pod’ų norite turėti ir kaip juos atnaujinti. Jei nurodote, kad norite 5 Pod’ų, Kubernetes užtikrins, kad jų visada būtų 5, net jei kai kurie “numirs”.

Services (servisai) sprendžia kitą problemą. Kadangi Pod’ai ateina ir išeina, jų IP adresai keičiasi. Servisas suteikia stabilų prieigos tašką – tarsi pastovų telefono numerį, kuris visada veikia, net jei pakeičiate telefoną. Yra kelių tipų servisai: ClusterIP (vidinis), NodePort (prieinamas per mazgo portą), LoadBalancer (su išoriniu balansuotoju).

ConfigMaps and Secrets leidžia atskirti konfigūraciją nuo kodo. ConfigMap’e galite saugoti paprastas konfigūracijas, o Secrets – slaptažodžius ir kitus jautrius duomenis (nors jie tik base64 užkoduoti, todėl papildomai reikia šifravimo).

Volumes sprendžia duomenų saugojimo problemą. Kadangi konteineriai yra laikini, jų duomenys dingsta kartu su jais. Volume’ai leidžia saugoti duomenis už konteinerio ribų – lokaliai mazge arba naudojant išorinius saugojimo sprendimus.

Kaip Kubernetes palaiko viską veikiant

Viena įdomiausių Kubernetes savybių yra tai, kaip jis užtikrina, kad jūsų programos veiktų. Sistema naudoja deklaratyvų modelį – jūs pasakote, kokios būsenos norite (pavyzdžiui, “noriu 3 Pod’ų”), o Kubernetes nuolat dirba, kad ši būsena būtų palaikoma.

Tai veikia per kontrolerių kilpas (control loops). Kontroleriai nuolat stebi faktinę būseną ir lygina ją su norima būsena. Jei yra skirtumų, jie imasi veiksmų juos pašalinti. Pavyzdžiui, jei turite turėti 3 Pod’us, bet vienas “numirė”, ReplicaSet kontroleris tai pastebės ir sukurs naują.

Liveness ir readiness probes (gyvumo ir pasiruošimo zondai) leidžia Kubernetes suprasti, ar jūsų programa tikrai veikia. Liveness probe’as tikrina, ar konteineris gyvas – jei ne, Kubernetes jį perkrauna. Readiness probe’as tikrina, ar programa pasiruošusi priimti užklausas – jei ne, Kubernetes nukreipia srautą į kitus Pod’us.

Sistema taip pat palaiko horizontal pod autoscaling – automatinį Pod’ų skaičiaus keitimą pagal apkrovą. Jei CPU naudojimas viršija tam tikrą ribą, Kubernetes automatiškai sukuria daugiau Pod’ų. Kai apkrova sumažėja, pertekliniai Pod’ai pašalinami.

Diegimas ir atnaujinimas be prastovų

Vienas didžiausių Kubernetes privalumų yra galimybė atnaujinti programas be prastovų. Rolling updates (nuoseklūs atnaujinimai) leidžia palaipsniui pakeisti senus Pod’us naujais. Pavyzdžiui, jei turite 10 Pod’ų, Kubernetes gali sunaikinti 2 senus, sukurti 2 naujus, palaukti, kol jie pradės veikti, tada pereiti prie kitų 2, ir taip toliau.

Jei kažkas nepavyksta, galite greitai rollback (grįžti atgal) į ankstesnę versiją. Kubernetes saugo kelių ankstesnių versijų istoriją, todėl atšaukimas yra paprastas – viena komanda.

Blue-green deployment strategija taip pat populiari. Turite dvi identiška aplinka – “mėlyną” (dabartinę) ir “žalią” (naują). Kai nauja versija paruošta ir išbandyta žalioje aplinkoje, tiesiog perjungiate srautą iš mėlynos į žalią. Jei kažkas ne taip, grįžtate atgal į mėlyną.

Canary deployments leidžia išbandyti naują versiją tik su nedidele dalimi vartotojų. Pavyzdžiui, 95% srauto eina į seną versiją, o 5% – į naują. Jei viskas gerai, palaipsniui didinate naują versiją, kol ji pasieks 100%.

Praktiniai patarimai darbui su Kubernetes

Pradedant dirbti su Kubernetes, lengviausia naudoti Minikube – tai mini Kubernetes klasteris, kurį galite paleisti savo kompiuteryje. Taip galite eksperimentuoti ir mokytis be papildomų išlaidų. Kitas geras variantas pradedantiesiems yra kind (Kubernetes in Docker) – jis veikia dar greičiau ir lengviau.

Kai jau suprasite pagrindus, galite pereiti prie debesų sprendimų. Google Kubernetes Engine (GKE), Amazon EKS and Azure AKS siūlo valdomus Kubernetes klasterius – jums nereikia rūpintis Control Plane priežiūra, tai daro debesų tiekėjas.

Labai rekomenduoju naudoti kubectl įrankį su aliasais. Pavyzdžiui, vietoj “kubectl” galite naudoti “k”, o dažnai naudojamas komandas sutrumpinti. Taip pat naudinga įdiegti kubectx and kubens – jie leidžia greitai perjungti kontekstus ir vardų erdves.

Helm yra būtinas įrankis sudėtingesnėms aplikacijoms. Tai tarsi paketų tvarkyklė Kubernetes – galite naudoti paruoštus “charts” (schemas) populiarioms programoms arba kurti savo. Helm leidžia parametrizuoti diegimus ir lengvai valdyti kelias aplinkas (dev, staging, production).

Saugumui skirkite ypatingą dėmesį. Niekada nesaugokite slaptažodžių tiesiogiai YAML failuose. Naudokite Sealed Secrets arba išorinius sprendimus kaip HashiCorp Vault. Taip pat nustatykite RBAC (Role-Based Access Control) – ne visi turėtų turėti pilną prieigą prie klasterio.

Monitoringas ir problemų sprendimas

Kubernetes klasteris be monitoringo yra kaip skrydis aklai. Jums reikia žinoti, kas vyksta viduje. Prometheus with Grafana yra de facto standartas Kubernetes monitoringui. Prometheus renka metrikus, o Grafana juos vizualizuoja gražiose diagramose.

Logams rinkti dažniausiai naudojama ELK stack (Elasticsearch, Logstash, Kibana) arba EFK stack (Elasticsearch, Fluentd, Kibana). Fluentd veikia kaip daemonas kiekviename mazge, renka konteinerių logus ir siunčia juos į Elasticsearch, kur galite juos analizuoti per Kibana.

Kai kažkas neveikia, kubectl logs yra jūsų geriausias draugas. Galite žiūrėti konkrečių Pod’ų logus, net kelių konteinerių viename Pod’e. kubectl describe parodo detalią informaciją apie objektą ir įvykius, kurie gali padėti suprasti, kas nutiko.

kubectl exec leidžia prisijungti prie veikiančio konteinerio ir vykdyti komandas viduje – labai naudinga debuginimui. Tačiau būkite atsargūs production aplinkoje – geriau naudoti read-only režimą, kai įmanoma.

Kubernetes ateitis ir ko tikėtis

Kubernetes nuolat vystosi. Naujausios versijos prideda daugiau funkcionalumo ir pagerina našumą. Service Mesh technologijos kaip Istio ar Linkerd tampa vis populiaresnės – jos prideda papildomą abstrakciją lygį, valdydamos komunikaciją tarp servisų, saugumą ir stebėjimą.

Serverless Kubernetes su įrankiais kaip Knative leidžia paleisti funkcijas pagal poreikį, nemokant už nenaudojamus resursus. Tai ypač naudinga nepastoviai apkrovai.

Edge computing – Kubernetes vis dažniau naudojamas ne tik duomenų centruose, bet ir periferiniuose įrenginiuose. Lengvesnės distribucijos kaip K3s leidžia paleisti Kubernetes net Raspberry Pi.

Kubernetes nėra paprastas įrankis, ir jam išmokti reikia laiko. Bet kai suprasite pagrindines koncepcijas, atsivers visiškai naujas programų diegimo ir valdymo pasaulis. Sistema tikrai verta investuoto laiko, ypač jei dirbate su mikroservisais ar turite sudėtingą infrastruktūrą. Pradėkite nuo mažų eksperimentų, palaipsniui didinkite sudėtingumą, ir netrukus Kubernetes taps natūralia jūsų darbo aplinkos dalimi.