Kubernetes

„Kubernetes“ darbo pradžia

„Kubernetes“ darbo pradžia

„Kubernetes“ yra atvirojo kodo platforma, skirta valdyti konteinerių programas visoje fizinių ar virtualių mašinų grupėje. Originalus „Kubernetes“ įkvėpimas buvo „Google“ „Borg“ sistema. „Borg“ yra klasterių valdymo sistema, valdanti šimtus tūkstančių darbo vietų ir programų didžiuliuose „Google“ duomenų centruose. „Kubernetes“ turėjo būti draugiškesnė klasterių valdymo sistemos versija, kuria galėtų naudotis visi.

Konteinerių populiarumas programinės įrangos kūrimo procese išpopuliarina ir „Kubernetes“. Senojo programinės įrangos kūrimo procese programos buvo diegiamos fizinėse pagrindinėse mašinose. Kūrėjai, dirbantys su skirtingais programos komponentais, reikalingi darniai aplinkai palaikyti. Operacinis ir IT personalas turėjo atidžiai valdyti vykdomuosius failus, konfigūracijas ir bibliotekas. Įvairūs programos komponentai gali susidurti su integracijos procesu. Be to, šis procesas buvo jautrus žmogaus klaidoms ir nesusikalbėjimams.

Virtualios mašinos (VM) padėjo užtikrinti tam tikrą proceso patikimumą. Tačiau vis tiek buvo sunku valdyti programas. Be to, VM yra brangu išlaikyti. Konteineriai pakeitė kraštovaizdį. Su konteineriais kūrėjams, dirbantiems su skirtingais tos pačios programinės įrangos komponentais, buvo įmanoma išlaikyti atskirą aplinką. Konteineriai yra lengvi, nebrangūs ir greiti. Dėl šių pranašumų kilo mintis sukurti programinę įrangą naudojant mikropaslaugas, kai kiekvienas konteineris atlieka tam tikrą programos užduotį.

Didėjant konteinerių naudojimui, „Kubernetes“ tapo veiksminga priemone planuoti ir vykdyti programas visose grupėse. Kaip platforma, ji gali išlaisvinti kūrėjus nuo naštos, susijusios su bet kokio tipo mašinomis. Užuot kurdami į kompiuterį orientuotas infrastruktūras, atsižvelgdami į fizines ar virtualias mašinas, kūrėjai gali pradėti kurti į konteinerius orientuotą infrastruktūrą. „Kubernetes“ pateikia būtiną abstrakcijos sluoksnį.

1 dalis. Sąvokos

Pagrindiniai komponentai

Pagrindiniai komponentai yra klasterio valdymo paslaugos. Šie komponentai valdo pasaulinius sprendimus ir įvykius. Bet kuris klasterio mazgas gali juos paleisti. Tačiau tam tikrų mazgų priskyrimas šiems komponentams laikomas gera praktika.

kube-apiserver

„Kube-apiserver“ aptarnauja „Kubernetes“ API. „Kubernetes“ API įdiegia „RESTful“ sąsają. Tai veikia kaip tiltas tarp įvairių „Kubernetes“ komponentų, tokių kaip dėklai, paslaugos, replikacijos valdikliai ir kiti. Ji yra atsakinga už nuoseklų ryšį tarp etcd parduotuvės ir dislokuotų konteinerių.

ir kt

Etcd yra atsakingas už visų „Kubernetes“ sankaupos duomenų saugojimą. „Etcd“ projektą sukūrė „CoreOS“ komanda. Tai lengva, paskirstyta raktų vertės saugykla, naudojanti HTTP / JSON API. Grupės mazgai gali naudoti konfigūracijos duomenis iš etcd paslaugoms atrasti ir atkurti iš nepavykusių būsenų. Dėl duomenų svarbos ir tt turėtų būti tinkamai sukurta atsarginė kopija.

kube-kontrolierius-vadybininkas

„Kube-controller-manager“ valdo įvairius valdiklius, kad teiktų skirtingas paslaugas. Pvz., Mazgų valdikliai atkuria nepavykusius mazgus, o replikacijos valdikliai palaiko teisingą ankščių skaičių. Kiekvienas valdiklis veikia kaip atskira gija ir priklauso nuo etcd informacijos, kad atliktų savo užduotis.

„cloud-controller-manager“

„Cloud-controller-manager“ teikia specifinius debesų valdiklius. Jį galima išjungti naudojant „kube-controller-manager“. „Cloud-controller-manager“ buvo atskirta nuo pagrindinės dalies, kad „Kubernetes“ branduolys galėtų vystytis nepriklausomai nuo debesų teikėjo kodo. Anksčiau priklausomybės keldavo problemų.

kube-planuoklis

Kube planuotojas yra atsakingas už darbo krūvio paskirstymą. Jis seka išteklių poreikius ir priskiria mazgus naujiems sukurtiems ankštims. Ji taip pat rūpinasi paslaugų kokybės reikalavimais.

priedai

Priedai yra dėklai ir paslaugos, naudojamos klasterio funkcijoms įgyvendinti. Vartotojai gali naudoti priedų tvarkytuvę, kad kurtų ir prižiūrėtų priedus. Keletas svarbių ir naudingų priedų yra DNS, žiniatinklio vartotojo sąsaja (informacijos suvestinė), konteinerių išteklių stebėjimas ir grupių lygio registravimas.

Mazgo komponentai

Darbininkų mašina Kubernete vadinama mazgu. Mazgo komponentai yra kiekviename mazge ir jie tvarko skirtingus darbo krūvio aspektus.

kubelet

Kiekvieno mazgo „kubelet“ paslauga yra pagrindinis agentas. Jis seka pods, priskirtus jo mazgui per apiserver arba vietinį konfigūracijos failą. Jis bendrauja su pagrindiniais komponentais, norėdamas sužinoti darbo užklausas ir pranešti apie savo mazgo būseną.

kube-proxy

„Kube-proxy“ yra maža tarpinio serverio paslauga kiekviename mazge, skirta atskiram prieglobos subnetui spręsti. Jis gali atlikti elementarų TCP ir UDP apkrovos balansavimą.

dokininkas

„Kubernetes“, visų pirma, priklauso nuo dokininko, ar jis valdys konteinerius. Jis sugeba kurti programas iš dokų vaizdų.

rkt

„Kubernetes“ taip pat palaiko rkt konteinerius. Parama šiuo metu yra eksperimentinė.

vadovas

Prižiūrėtojas gali būti naudojamas kubeletų ir dokų konteinerių stebėjimui ir kontrolei.

laisvai

„Fluentd“ yra deamonas, teikiantis registravimo lygmens lygmenį.

Darbo krūviai

„Kubernetes“ darbo krūvius galima apibrėžti taip:

Ankštys

Pod yra pagrindinis „Kubernetes“ darbo krūvio vienetas. Konteineriai nėra atskirai priskiriami šeimininkams. Konteinerių grupės, paprastai priklausančios programai, atvaizduojamos kaip pakuotė, o pakuotė tada dislokuojama pagrindiniame kompiuteryje kaip vienas vienetas. Žinoma, ankštyje gali būti tik vienas indas. Tai dažniausiai būdinga „Kubernetes“. Tačiau sudėtiniai rodiniai grupuojami atsižvelgiant į išteklių ir programų poreikius. Grupavimas skirtas optimizuoti išteklių naudojimą.

Kontrolieriai

Valdikliai, pvz., Replikų rinkiniai, replikacijos valdiklis, diegimai, būsenos rinkiniai, šiukšlių surinkimas ir „cron“ darbai, padeda valdyti „Kubernetes“ darbo krūvius. Replikacijos valdikliai valdo ankščių skaičių. Jis paleidžia ir nutraukia ankštis, kad išlaikytų reikiamą ankščių skaičių. Diegimo valdiklis padeda pakeisti aplankus ir diegimo objektus, kad pasiektų norimą diegimo būseną.

Kitos svarbios idėjos

Paslaugos

Kubernetes ankštys yra kuriamos ir reguliariai naikinamos. Taigi sunku juos sekti naudojant IP adresus. Dinamiškas ankščių pobūdis apsunkina jų tarpusavio bendravimą. Paslauga veikia kaip abstrakcija. Tai suteikia politiką, kad būtų pasiektas logiškas ankščių rinkinys. „Kubernetes“ paslauga yra REST objektas. Paslaugos supaprastina konteinerio dizainą.

Etiketės

Etiketės yra galingas būdas stebėti ir valdyti veikiančių komponentų grupes. Etiketės yra raktų ir verčių poros, kurios veikia kaip savavališkos žymos, padedančios geriau kontroliuoti įvairias sistemos funkcijas.

2 dalis. Praktinis projektas

„Minikube“ projekto vykdymas

„Minikube“ yra dvejetainis failas, kuris vietinėje mašinoje sukuria vieną „Kubernetes“ grupę. Šiame projekte - mazgas.js programa bus paversta dokerio talpyklos vaizdu ir vaizdas bus paleistas „Minikube“.

„Minikube“, „kubectl“, „Hypervisor“, „NodeJS“ ir „Docker“ diegimas

Galite įdiegti „Minikube“ ir „Kubernetes“ komandų eilutės įrankį „kubectl“ „Mac OS X“, „Linux“ ir „Windows“ su įvairiais hipervizoriais. Skirtingų operacinių sistemų instrukcijas galite rasti čia. Be to, norint paleisti „HelloWorld“ programos pavyzdį, jūsų kompiuteryje reikės įdiegti „NodeJS“. Čia galite įdiegti doką.

Klasterio paleidimas

Norėdami paleisti sankaupą, naudokite šią komandą:

$ minikube start Vietinio „Kubernetes v1“ paleidimas.7.5 klasteriai ... VM paleidimas ... „Minikube ISO 106“ atsisiuntimas.36 MB / 106.36 MB [==============================================] 100.00% 0s Gaunamas VM IP adresas ... Failų perkėlimas į grupę ... Sertifikatų nustatymas ... Prisijungimas prie klasterio ... „kubeconfig“ nustatymas ... Grupės komponentų paleidimas ... „Kubectl“ dabar sukonfigūruota naudoti grupę. 

Norėdami sužinoti, ar klasteris veikia tinkamai, naudokite toliau pateiktą komandą:

$ kubectl cluster-info „Kubernetes“ meistras veikia https: // 192.168.99.100: 8443

Sukurti programos vaizdą

Sukurkime serverį.js failas su tokiu turiniu:

var http = reikalauti ('http'); var handRequest = funkcija (užklausa, atsakymas) konsolė.žurnalas ('Gauta URL užklausa:' + užklausa.URL); atsakymą.writeHead (200); atsakymą.pabaiga ('Sveikas pasauli!'); ; var www = http.createServer (rankRequest); www.klausytis (8080); 

Galite paleisti šią komandą:

$ node serveris.js

Ir patikrinkite, ar serveris veikia http: // localhost: 8080. Turėtumėte pamatyti „Sveikas pasaulis!“Tekstą tinklalapyje.

Konvertuoti į „Docker Container“

Tame pačiame kataloge kaip ir serveris.js sukuria failą „Dockerfile“ su tokiu tekstu:

IŠ mazgo: 6.9.2 „EXPOSE 8080 COPY“ serveris.js . CMD mazgo serveris.js 

„Dockerfile“ sukurs vaizdą, kuris prasidės nuo mazgo: 6.9.2 vaizdas „Docker Hub“.
Mes norime paleisti doko vaizdus vietoje. Taigi ši komanda liepia „docker“ naudoti „Minikube Deamon“, kad būtų galima laikyti docker vaizdus:

$ eval $ („minikube docker-env“)

Norėdami pakeisti jį į numatytąjį, galite naudoti eval $ (minikube docker-env -u).
Dabar sukursime doko vaizdą:

$ docker build -t mano mazgas: v1 . Siuntimo konteksto siuntimas „Docker“ deemonui 3.072kB 1 žingsnis: IŠ mazgo: 6.9.2 6.9.2: Traukimo iš bibliotekos / mazgas 75a822cd7888: traukti baigtas 57de64c72267: traukti baigtas 4306be1e8943: traukti baigtas 871436ab7225: traukti baigtas 0110c26a367a: patraukite užbaigtą 1f04fe713f1b: traukti baigtas ac7c0b5fb553: traukti užbaigtą Digest: SHA256: 2e95be60faf429d6c97d928c762cb36f1940f4456ce4bd33fbdc34de94a5e043 būsena: Siuntėsi naujesnę vaizdas mazge: 6.9.2 ---> faaadb4aaf9b 2 žingsnis: Poveikis 8080 ---> Veikia da7d251b3fd5 ---> 881f9fb69b2c Tarpinio konteinerio da7d251b3fd5 pašalinimas 3 žingsnis: KOPIJOS serveris.js . ---> 0acf61d9e75e Tarpinio konteinerio 3a4025539cf6 pašalinimas 4 žingsnis: CMD mazgo serveris.js ---> Veikia 8aa9a4cbd723 ---> 41445e5c48fe Tarpinio konteinerio 8aa9a4cbd723 pašalinimas Sėkmingai pastatytas 41445e5c48fe 

Dislokuoti į klasterį
Norėdami įdiegti „my-node“: v1, vykdykite šią komandą:

$ kubectl paleiskite mano mazgą --image = mano mazgas: v1 --port = 8080 sukurtas „mano mazgas“

Tai sukurs klasterio ankštį. „Pod“ būsenas galime patikrinti šiomis komandomis:

$ kubectl gauti diegimus PAVADINAMAS PASIŪLYMAS DABARTINIS ATNAUJINAMAS AMATAS my-node 1 1 1 1 34s 
$ kubectl gauti ankščių PAVADINIMAS PARUOŠTAS BŪSENOS PALEIDIMAS AMŽIAI my-node-276881918-qth5s 1/1 bėgimas 0 1m 
$ kubectl gauti įvykius LASTSEEN FIRSTSEEN COUNT NAME PAVYZDŽIAI SUBOBJEKTO TIPO PRIEŽASTIS ŠALTINIO PRANEŠIMAS 32m 32m 1 minikube Mazgas Normalus Pradinis kube-proxy, minikube Paleidimas kube-proxy. 32m 32m 1 minikube Mazgas Normalus Pradinis kubeletas, Minikube Pradinis kubeletas. 32m 32m 2 „Minikube Node“ Normal NodeHasSufficientDisk kubelet, minikube Node minikube būsena dabar yra: NodeHasSufficientDisk 32m 32m 2 minikube Node Normal NodeHasSufficientMemory kubelet, minikube Node minikube būsena dabar: NodeHasSufficientMemory 32m NodeHasNoDiskPressure 32m 32m 1 minikube Node Normal NodeAllocatableEnforc kubelet, minikube Atnaujinta mazgo paskirstymo riba pods 32m 32m 1 minikube Node Normal RegisteredNode controllermanager Mazgo minikube įvykis: Registruotas mazgo minikubelis „NodeController“ Minikube „NodeController 32b“ 1m Minikube mazgas „NodeController 32b“ 1 „Nikode“ Minikube mazgas „NodeController 32b“ 1m Minikube mazgas „NodeController 32m 1“ „Minrub“ „NodeController“ 32Mik 1 „Minikube“ būsena „NodeController 32b“ 1m Minikube mazgas „NodeController“ 32Mik 1 „Minikube“ mazgas „Minode“ mazgas „Minode“ mazgas „Minode“ mazgas „NodeController“ 32m 1m „NodeReady“ 6m 6m 1 „minikube“ mazgas „Normal“ „RegisteredNode“ valdytojo mazgas „Node minikube“ įvykis: „NodeController“ užregistruotas „Node minikube“ 5m 5m 1 minikube mazgas Normalus Pradinis kubeletas, minikube Pradedanti kubelet. 5m 5m 1 minikubo mazgas Normalus mazgasAllocatableEnforc kubelet, minikube Atnaujinta mazgo paskirstymo riba visose ankštyse 5m 5m 1 minikubo mazgas Normalus mazgasHasSufficientDisk kubelet, minikube mazgas Minikubo būsena dabar yra: NodeHasSufficientDisk 5m 5m 5m 1 Minikube mazgas 5m 5m 1 minikube mazgas Normal NodeHasNoDiskPressure kubelet, minikube Node minikube statusas dabar yra: NodeHasNoDiskPressure 5m 5m 1 minikube mazgas Normal NodeNotReady kubelet, minikube Mazgas minikube būsena dabar yra: NodeNotReadik minikube Norme 5m 5m 1. 5m 5m 1 minikube Node Normal NodeReady kubelet, minikube Node minikube statusas yra: NodeReady 2m 2m 1 my-node-276881918-qth5s Pod Normal -276881918-qth5s Pod Normal SėkmingasMountVolume kubelet, minikube MountVolume.SetUp pavyko tūriui „default-token-r5pl1“ 2m 2m 1 my-node-276881918-qth5s Pod spec.container my-node Normal Ištraukta kubelet, minikube Konteinerio vaizdas „my-node: v1“ jau yra mašinoje 2m 2m 1 my-node-276881918-qth5s Pod spec.konteineriai my-node Normalus Sukurtas kubelet, minikube Sukurtas konteineris 2m 2m 1 my-node-276881918-qth5s Pod spec.container my-node Normal Started kubelet, minikube Started container 2m 2m 1 my-node-276881918 ReplicaSet Normal SuccessfulCreate replicaset-controller Sukurtas pod: my-node-276881918-qth5s 2m 2m 1 my-node Diegimas Normalus ScalingReplicaSet dislokavimas iki kopijos rinkinio „my-node-276881918“ 

Sukurkite paslaugą
Ankštis yra nepasiekiamas. Kad pod būtų prieinamas pasauliui, turite sukurti paslaugą. Ši komanda turėtų sukurti reikiamą paslaugą:

$ kubectl expose dislokavimas my-node --type = „LoadBalancer“ tarnyba „my-node“ atidengta

Paslaugos būseną galite patikrinti taip:

$ kubectl gauti paslaugas NAME CLUSTER-IP EXTERNAL-IP PORT (S) AGE kubernetes 10.0.0.1  443 / TCP 34m mano mazgas 10.0.0.213  8080: 31460 / TCP 31 

Jei naudosite šią komandą, ji atidarys paslaugą žiniatinklio naršyklėje:

$ minikube paslaugos „my-node“ atidaroma numatytoji „kubernetes“ paslaugos / „my-node“ numatytojoje naršyklėje .. 

Galite patikrinti, kas vyksta jūsų aplanke, naudodami komandą „logs“ - kubectl logs [nameOfThePod].

$ kubectl registruoja my-node-276881918-qth5s Gauta URL užklausa: / Gauta URL užklausa: / favicon.ico 

Pirmiau pateiktuose žurnaluose rodomos užklausos, pateiktos serveriui.js programa veikia klasteryje.

Valymas
Paslaugą ir aplanką galite ištrinti naudodami šias komandas:

$ kubectl ištrinti paslaugą mano mazgo paslauga „mano mazgas“ ištrinta $ kubectl ištrinti diegimą mano mazgas [/ kodas] diegimas „mano mazgas“ ištrinta

„Minikube“ galite sustabdyti:

$ minikube stop Sustabdyti vietinį „Kubernetes“ klasterį ... Mašina sustabdyta. 

Išvada

„Kubernetes“ yra didžiulė sistema, turinti plataus masto galimybes. „Kubernetes“ dokumentai yra geriausia vieta sužinoti apie šią galingą technologiją.

Tolesnis tyrimas:
„Kubernetes“ dokumentacija: https: // kubernetes.io / docs

Geriausi žaidimai, kuriuos reikia žaisti naudojant rankos stebėjimą
„Oculus Quest“ neseniai pristatė puikią rankos stebėjimo be valdiklių idėją. „Oculus Quest“ rankų sekimo žaidimai iki šiol buvo ribojami, kai žaidimų ...
Kaip rodyti OSD perdangą viso ekrano „Linux“ programose ir žaidimuose
Žaisdami viso ekrano žaidimus arba naudodamiesi programomis be išsiblaškymo viso ekrano režimu, galite nutraukti nuo susijusios sistemos informacijos,...
5 geriausios žaidimų fiksavimo kortos
Visi mes matėme ir pamėgome srautinius žaidimus „YouTube“. „PewDiePie“, „Jakesepticye“ ir „Markiplier“ yra tik vieni iš geriausių žaidėjų, kurie uždir...