Kubernetes

**Kubernetes** ( /ˌ k ( j ) uː b ər ˈ n ɛ t ɪ s ,zakonisht i shkurtuar **K8s**  ) është një sistem orkestrimi i kontejnerëve me burim të hapur për automatizimin e vendosjes, shkallëzimit dhe menaxhimit të softuerit .   Projektuar fillimisht nga Google, projekti tani mirëmbahet nga Cloud Native Computing Foundation .

Emri *Kubernetes* e ka origjinën nga greqishtja e lashtë, që do të thotë 'timonier' ose 'pilot'. *Kubernetes* shpesh shkurtohet si *K8*, duke qënë se ka 8 shkronja midis *K* dhe *s* (një numeronim ). 

Kubernetes punon me kontejner dhe CRI-O .  Përshtatshmëria e tij për ekzekutim dhe menaxhim të ngarkesave të mëdha të punës në cloud ka çuar në adoptimin e gjerë të tij në qendrat e të dhënave. Ka shpërndarje të shumta të kësaj platforme – nga ISV-të, si dhe ofertat e pritura në cloud nga të gjithë shitësit kryesorë publikë të cloud-it.

## Konceptet 
parapamje| Diagrami i arkitekturës Kubernetes
Kubernetes përcakton një grup blloqesh ndërtuese ("primitivë") që ofrojnë bashkarisht mekanizma që zbarkojnë, mirëmbajnë dhe shkallëzojnë aplikacionet bazuar në CPU, kujtesë ose metrika të personalizuara.  Kubernetes është i lidhur lirshëm dhe i aftë të shtrihet për të përmbushur ngarkesa të ndryshme pune. Përbërësit e brendshëm, si dhe shtesat dhe kontejnerët që funksionojnë në Kubernetes mbështeten në API Kubernetes.  Platforma ushtron kontrollin e saj mbi burimet e llogaritjes dhe ruajtjes duke përcaktuar burimet si Objekte, të cilat më pas mund të menaxhohen si të tilla.

Kubernetes ndjek arkitekturën parësore/kopje . Komponentët e Kubernetes mund të ndahen në ato që menaxhojnë një nyje të vetme dhe ato që janë pjesë e planit të kontrollit. 

### Plani i kontrollit 
Nyja master e Kubernetes trajton rrafshin e kontrollit të grupimit, duke menaxhuar ngarkesën e tij të punës dhe duke drejtuar komunikimin në të gjithë sistemin. Plani i kontrollit Kubernetes përbëhet nga komponentë të ndryshëm, secili proces më vete, që mund të ekzekutohet si në një nyje të vetme kryesore, ashtu edhe në masters të shumtë që mbështesin grupe me gatishmëri të lartë .  është një ruajtës  i përhershëm, i lehtë, i shpërndarë i të dhënave çelës-vlerë që CoreOS ka zhvilluar. Ai ruan në mënyrë të besueshme të dhënat e konfigurimit të klasterit, duke përfaqësuar gjendjen e përgjithshme të klasterit në çdo moment të caktuar kohor. etcd favorizon konsistencën mbi gatishmërinë në rast të ndarjes së rrjetit (shih teoremën CAP ). Konsistenca është thelbësore për planifikimin e saktë dhe funksionimin e shërbimeve.
* **Serveri API** i shërben Kubernetes API duke përdorur JSON mbi HTTP, i cili siguron ndërfaqen e brendshme dhe të jashtme për Kubernetes.  Serveri API përpunon dhe vërteton kërkesat REST dhe përditëson gjendjen e objekteve API në etcd, duke lejuar kështu klientët të konfigurojnë ngarkesat e punës dhe kontejnerët nëpër nyjet punëtore.  Serveri API përdor API-në e mbikqyrjes së etcd për të monitoruar grupin, për të nxjerrë ndryshime kritike të konfigurimit ose për të ndrequr çdo divergjencë të gjendjes së klasterit në atë që deklaroi zbarkuesi. Si shembull, zbarkuesi mund të specifikojë se duhet të ekzekutohen tre raste të një "pod" të veçantë (shih më poshtë). etcd ruan këtë fakt. Nëse kontrolluesi i zbarkimit gjen se vetëm dy instanca janë duke u ekzekutuar (në konflikt me deklaratën e etcd),  ai planifikon krijimin e një shembulli shtesë të atij pod. 
* Një **kontrollues** është një lak rakordimi që drejton gjendjen aktuale të klasterit drejt gjendjes së dëshiruar, duke komunikuar me serverin API për të krijuar, përditësuar dhe fshirë burimet që ai menaxhon (p.sh. podet ose pikat fundore të shërbimit).   Përzgjedhësit e etiketave që janë pjesë e përkufizimit të kontrolluesit specifikojnë bashësinë e podeve që menaxhon një kontrollues. 
* **Menaxheri i kontrolluesit** është një proces që menaxhon një grup kontrolluesish bazë Kubernetes.

### Nyjet 
Një nyje, e njohur gjithashtu si një punëtor ose një minion, është një makinë ku vendosen/zbarkohen kontejnerët (ngarkesat e punës). Çdo nyje në klastër duhet të ekzekutojë një kohez të kontejnerit, si p.sh. containerd, si dhe komponentët e përmendur më poshtë, për komunikim me parësorin për konfigurimin e rrjetit të këtyre kontejnerëve.

* **Kubelet** është përgjegjës për gjendjen e funksionimit të çdo nyje, duke siguruar që të gjithë kontejnerët në nyje të jenë të shëndetshëm. Ai kujdeset për fillimin, ndalimin dhe mirëmbajtjen e kontejnerëve të aplikacionit të organizuar në pode, siç udhëzohet nga plani i kontrollit.  Kubelet monitoron gjendjen e një podi, dhe nëse nuk është në gjendjen e dëshiruar, podi ri-vendoset në të njëjtën nyje. Statusi i nyjës transmetohet çdo disa sekonda nëpërmjet mesazheve të rrahjeve të zemrës në parësor. Pasi parësori zbulon një dështim të nyjes, Kontrolluesi i Replikimit vëzhgon këtë ndryshim të gjendjes dhe lëshon podsa në nyje të tjera të shëndetshme. 
* **Kube-proxy** është një implementim i një ndërmjetësi të rrjetit dhe një balancuesi të ngarkesës, dhe mbështet abstraksionin e shërbimit së bashku me veprimet e tjera të rrjetit. 

### Hapësirat e emrave (Namespaces) 
Në Kubernetes, hapësirat e emrave (ang. *Namespaces*) përdoren për të ndarë burimet që ai trajton në bashkësi të dallueshme dhe joprerëse  Ato janë të destinuara për përdorim në mjedise me shumë përdorues të shpërndarë nëpër ekipe të shumta, ose projekte, apo edhe mjedise të ndara si zhvillimi, testimi dhe prodhimi.

### Podsat/Podet 
Njësia bazë e planifikimit në Kubernetes është një pod,  i cili përbëhet nga një ose më shumë kontejnerë që garantohen të jenë të bashkëvendosur në të njëjtën nyje.  Brenda podit, të gjithë kontejnerët mund t'i referohen njëri-tjetrit.

#### DaemonSets 
Në mënyrë tipike, detyra e përcaktimit të nyjës në të cilën duhet të funksionojë një pod i delegohet Planshtruesit të Kubernetes. Megjithatë, në disa skenarë, mund të jetë e nevojshme të vendoset një pod në çdo nyje në klastër, gjë që është veçanërisht e dobishme për rastet e përdorimit që përfshijnë mbledhjen e logut, kontrolluesit ingress dhe shërbimet e ruajtjes. Ky lloj specifik i planifikimit të podit mund të arrihet duke përdorur DaemonSets. 

#### ReplicaSets 
Qëllimi i një ReplicaSet është të mbajë një bashkësi të qëndrueshëm të grupeve të kopjeve që funksionojnë në çdo kohë të caktuar. Si i tillë, shpesh përdoret për të garantuar gatishmërinë e një numri të caktuar të Pods identike. 

### Shërbimet 
parapamje| Pamje e thjeshtuar që tregon se si Shërbimet ndërveprojnë me rrjetin e Pod-it në një grupim Kubernetes
Një shërbim Kubernetes është një grup pods që punojnë së bashku, si p.sh. një nivel i një aplikacioni me shumë nivele . Grupi i pods që përbëjnë një shërbim përcaktohen nga një përzgjedhës etiketë. 

### Vëllimet 
Sistemet e skedarëve në kontejnerët Kubernetes ofrojnë ruajtje kalimtare (efemerale), si parazgjedhje. Kjo do të thotë që një rinisje e podit do të fshijë çdo të dhënë në kontejnerë, dhe për këtë arsye, kjo formë ruajtjeje është mjaft e kufizuar në çdo gjë, përveçse në aplikacione të parëndësishme. Një vëllim Kubernetes  siguron ruajtje të vazhdueshme që ekziston për gjithë jetën e vetë podit. Kjo hapësirë ruajtëse mund të përdoret gjithashtu si hapësirë e përbashkët e diskut për kontejnerët brenda pod. Vëllimet janë montuar në pika të veçanta montimi brenda kontejnerit, të cilat përcaktohen nga konfigurimi i podit. 

### KonfigHartat dhe sekretet 
eNjë sfidë e zakonshme e aplikacionit është vendosja se ku të ruhen dhe menaxhohen informacionet e konfigurimit, disa prej të cilave mund të përmbajnë të dhëna të ndjeshme. Kubernetes ofron dy mekanizma të lidhur ngushtë për t'iu përgjigjur këtyre nevojave: "configmaps" dhe "secrets", të cilat lejojnë që ndryshimet e konfigurimit të bëhen pa kërkuar një rindërtim aplikacioni. Të dhënat nga konfighartat dhe sekretet do të vihen në gatishmëri për çdo rast të aplikacionit me të cilin janë lidhur këto objekte nëpërmjet zbarkimeve. Një sekret dhe/ose një konfigurim i dërgohet një nyje vetëm nëse një pod në atë nyje e kërkon atë. Kubernetes do ta mbajë atë në kujtesë në atë nyje. Pasi të fshihet podi që varet nga sekreti ose harta e konfigurimit, fshihet gjithashtu kopja në kujtesë e të gjitha sekreteve të lidhura dhe hartave të konfigurimit. Të dhënat janë të qasshme në pod nëpërmjet një prej dy mënyrave:

# si ndryshore të mjedisit (të cilat do të krijohen nga Kubernetes kur të fillojë podi);
# e gatshme në sistemin e skedarëve të kontejnerit që është i dukshëm vetëm nga brenda podit.

### StatefulSets 
Shkallëzimi i aplikacioneve pa gjendje është vetëm një çështje e shtimit të më shumë podeve. Ngarkesat me gjëndje janë më të vështira, sepse gjendja duhet të ruhet nëse një pod riniset. Nëse aplikacioni shkallëzohet lart ose poshtë, gjendja mund të ketë nevojë të rishpërndahet. Bazat e të dhënave janë një shembull i ngarkesave me gjëndje. Kur ekzekutohen në mënyrën e gatishmërisë së lartë, shumë baza të të dhënave vijnë me nocionin e një shembulli parësor dhe të instancave dytësore. Në këtë rast, nocioni i renditjes së instancave është i rëndësishëm. Kështu StatefulSets zgjedhin një pod si masterin dhe të tjerët si node. Me anën e përditësimeve të herëpashershme arrihet njëkohësia e podeve.

## Përdorimet 
Kubernetes përdoret zakonisht si një mënyrë për të bujtur një zbatim të bazuar në mikroshërbime, sepse ai dhe ekosistemi i mjeteve të lidhura me të ofrojnë të gjitha aftësitë e nevojshme për të adresuar shqetësimet kryesore të çdo arkitekture të mikroshërbimeve . Vjen në tre forma: me burim të hapur, komercial dhe të menaxhuar. Shpërndarjet me burim të hapur përfshijnë Kubernetes origjinale, Amazon EKS-D, Red Hat OpenShift, VMware Tanzu, Mirantis Kubernetes Engine dhe D2iQ Kubernetes Platform. Ofertat e menaxhuara përfshijnë GKE, Microsoft Azure Kubernetes Services, Oracle Container Engine për Kubernetes, Amazon Elastic Kubernetes Service, IBM Kubernetes Service dhe Platform9 Managed Kubernetes.