Kubernetes kommer i gang

Kubernetes kommer i gang

Kubernetes er en åpen kildekode-plattform for å administrere containeriserte applikasjoner over en klynge av fysiske eller virtuelle maskiner. Den opprinnelige inspirasjonen for Kubernetes var Googles Borg -system. Borg er et klyngestyringssystem som håndterer hundretusener av jobber og applikasjoner på tvers av massive Google -datasentre. Kubernetes var ment å være en vennligere versjon av klyngestyringssystemet som alle kunne bruke.

Populariteten til containere i programvareutviklingsprosessen gjør også Kubernetes populære. I den gamle programvareutviklingsprosessen ble applikasjoner distribuert på fysiske vertsmaskiner. Utviklere som jobber med forskjellige komponenter i applikasjonen som er nødvendig for å opprettholde et sammenhengende miljø. Operasjon og IT -personell som trengs for å administrere kjørbare filer, konfigurasjoner og biblioteker nøye. Ulike komponenter i applikasjonen kan komme i konflikt under integrasjonsprosessen. Prosessen var også utsatt for menneskelige feil og feilkommunikasjon.

Virtuelle maskiner (VM) bidro til å bringe et visst nivå av pålitelighet til prosessen. Men det var fortsatt vanskelig å administrere applikasjoner. VM er også dyre å vedlikeholde. Containere endret landskapet. Med containere var det mulig for utviklere som jobbet med forskjellige komponenter i samme programvare for å opprettholde separate miljøer. Containere er lette, rimelige og raske. Disse fordelene ga opphav til ideen om å utvikle programvare ved bruk av mikroservices der hver container serverer en spesifikk oppgave for applikasjonen.

Med økningen av containerbruk har Kubernetes blitt et effektivt verktøy for å planlegge og kjøre applikasjoner på tvers av klynger. Som en plattform kan den frigjøre utviklere fra byrden ved å håndtere alle slags maskiner. I stedet for å designe for vertssentriske infrastrukturer med fysiske eller virtuelle maskinhensyn, kan utviklere begynne å designe for container-sentrisk infrastruktur. Kubernetes gir det nødvendige abstraksjonslaget.

Del 1: Konsepter

Masterkomponenter

Masterkomponenter er kontrollerende tjenester for klyngen. Disse komponentene håndterer globale beslutninger og hendelser. Enhver node i klyngen kan kjøre dem. Imidlertid anses tildeling av spesielle noder til disse komponentene som god praksis.

Kube-Apisererver

Kube-Apisererver serverer Kubernetes API. Kubernetes API implementerer et avslappende grensesnitt. Det fungerer som broen mellom forskjellige Kubernetes -komponenter som belg, tjenester, replikasjonskontrollere og andre. Det er ansvarlig for konsistens i kommunikasjonen mellom ETCD -butikken og de utplasserte containere.

etcd

ETCD er ansvarlig for å lagre alle Kubernetes klyngedata. ETCD -prosjektet ble utviklet av CoreOS -teamet. Det er en lett, distribuert nøkkelverdi-butikk som bruker HTTP/JSON API. Noder i klyngen kan bruke konfigurasjonsdata fra ETCD for å oppdage tjenester og komme seg fra mislykkede tilstander. På grunn av viktigheten av dataene osv. Bør støttes riktig.

Kube-Controller-Manager

Kube-Controller-Manager kjører forskjellige kontrollere for å tilby forskjellige tjenester. For eksempel opprettholder nodekontrollere mislykkede noder og replikasjonskontrollere opprettholder riktig antall pods. Hver kontroller kjører som en egen tråd og avhenger av ETCD -informasjonen for å utføre oppgavene sine.

Cloud-Controller-Manager

Skytekontroller-manageren gir skyspesifikke kontrollere. Det kan deaktiveres i kube-controller-manager. Cloud-Controller-Manager er blitt skilt ut fra kjernen for å la Kubernetes-kjernen utvikle seg uavhengig av skyleverandørens spesifikke kode. Tidligere forårsaket avhengighetene problemer.

kube-planer

Kube-planleggeren er ansvarlig for distribusjon av arbeidsmengder. Det holder oversikt over ressurskrav og tildeler noder for nyopprettede belg. Det tar også vare på kvaliteten på tjenestekravene.

addons

Addons er pods og tjenester som brukes til å implementere klyngefunksjoner. Brukere kan bruke tilleggslederen til å opprette og vedlikeholde tillegg. Noen viktige og nyttige addons er DNS, Web UI (Dashboard), Container Resource Monitoring and Cluster-Level Logging.

Nodekomponenter

En arbeidermaskin i Kubernetes kalles en node. Nodekomponenter er til stede i hver node, og de håndterer forskjellige aspekter av arbeidsmengden.

Kubelet

Kubelet -tjenesten på hver node er den primære agenten. Den holder oversikt over belgene som er tilordnet noden gjennom apiserver eller lokal konfigurasjonsfil. Det kommuniserer med hovedkomponentene for å finne ut arbeidsforespørsler og rapportere statusen til noden.

kube-proxy

Kube-Proxy er en liten fullmaktstjeneste på hver node for å håndtere individuell vertsunderskudd. Det kan utføre rudimentær belastningsbalansering for TCP og UDP.

Docker

Kubernetes er først og fremst avhengig av at Docker kjører containere. Det er i stand til å bygge applikasjoner fra Docker -bilder.

rkt

Kubernetes støtter også RKT -containere. Støtten er for øyeblikket eksperimentell.

Supervisord

Supervisord kan brukes til å overvåke og kontrollere Kubelets og Docker -containere.

Fluentd

Fluentd er en deamon for å tilby logging på custer-nivå.

Arbeidsmengder

Kubernetes arbeidsmengder kan defineres som følger:

Pods

En pod er en grunnleggende enhet i Kubernetes arbeidsmengde. Containere blir ikke tildelt verter individuelt. Grupper av containere, som generelt tilhører en applikasjon, er representert som en pod og pod blir deretter distribuert til verten som en enkelt enhet. Selvfølgelig kan en pod bare inneholde en beholder. Dette er generelt mer vanlig i Kubernetes. Imidlertid er containere gruppert sammen basert på ressurs- og applikasjonsbehov. Gruppering er ment å optimalisere ressursdeling.

Kontrollere

Kontrollere som replikasett, replikeringskontroller, distribusjoner, statlige sett, søppelinnsamling og cronjobber hjelper til med å administrere Kubernetes arbeidsmengder. Replikeringskontrollere administrerer antall belg. Det starter og avslutter belg for å opprettholde riktig antall pods som kjører. Distribusjonskontroller hjelper til med å endre belg og distribusjonsobjekter for å nå ønsket distribusjonstilstand.

Andre viktige ideer

Tjenester

Kubernetes pods opprettes og ødelegges regelmessig. Så det er vanskelig å følge med på dem gjennom IP -adresser. Pods dynamiske natur gjør det vanskelig for dem å kommunisere med hverandre. En tjeneste fungerer som en abstraksjon. Det gir policyen for å nå et logisk sett med pods. I Kubernetes er en tjeneste et hvileobjekt. Tjenester forenkler containerdesign.

Etiketter

Etiketter er en kraftig måte å holde oversikt og administrere grupper av arbeidskomponenter. Etiketter er nøkkelverdipar som fungerer som vilkårlige tagger for å få finere kontroll over forskjellige funksjoner i systemet.

Del 2: Hands-on Project

Kjører et Minikube -prosjekt

Minikube er en binær som setter opp en enkelt Kubernetes -klynge på en lokal maskin. I dette prosjektet, en node.JS -applikasjonen vil bli omgjort til et Docker Container -bilde, og bildet blir kjørt på Minikube.

Installere Minikube, Kubectl, Hypervisor, NodeJS og Docker

Du kan installere Minikube og Kubernetes kommandolinjeverktøy Kubectl på Mac OS X, Linux og Windows med forskjellige hypervisorer. Instruksjonene for forskjellige operativsystemer er tilgjengelige her. Du trenger også nodejs installert på maskinen din for å kjøre eksemplet Helloworld -applikasjonen. Du kan installere Docker her.

Starter en klynge

Bruk følgende kommando for å starte en klynge:

$ Minikube Begynn å starte lokale Kubernetes V1.7.5 Cluster ... Starter VM ... Last ned Minikube ISO 106.36 MB / 106.36 MB [==============================================] 100.00% 0s Få VM IP -adresse… Flytte filer til klynge… Sette opp sertifikater… Koble til klynge… Sette opp KubeConfig… Start klyngekomponenter… Kubectl er nå konfigurert til å bruke klyngen. 

Bruk kommandoen nedenfor for å se om klyngen kjører ordentlig:

$ Kubectl Cluster-Info Kubernetes Master kjører på https: // 192.168.99.100: 8443

Lag applikasjonsbilde

La oss opprette en server.JS -fil med følgende innhold:

var http = krever ('http');
var handleRequest = funksjon (forespørsel, svar)
konsoll.Logg ('Mottatt forespørsel om URL:' + Forespørsel.URL);
respons.Writhead (200);
respons.Slutt ('Hei verden!');
;
var www = http.CreateServer (HandleRequest);
www.Hør (8080);

Du kan kjøre følgende kommando:

$ node -server.JS

Og sjekk om serveren kjører på http: // localhost: 8080. Du burde se “Hello World!”Tekst på websiden.

Konverter til Docker Container

I samme katalog som server.JS Opprett en fil DockerFile med følgende tekst:

Fra node: 6.9.2
Utsett 8080
Kopier server.JS .
CMD -nodeserver.JS

Dockerfile vil lage et bilde som starter fra noden: 6.9.2 bilde på Docker Hub.
Vi ønsker å kjøre Docker -bildene lokalt. Så følgende kommando vil fortelle Docker å bruke Minikube Deamon til for Docker Image Storage:

$ eval $ (Minikube Docker-Env)

Du kan bruke Eval $ (Minikube Docker -Env -u) for å endre den tilbake til standard.
La oss nå bygge Docker -bildet:

$ docker build -t my -node: v1 . Sende byggekontekst til Docker Daemon 3.072KB Trinn 1: Fra node: 6.9.2 6.9.2: Trekk fra bibliotek/node 75a822cd7888: Pull Complete 57De64C72267: Pull Complete 4306be1e8943: Pull Complete 871436AB7225: Pull Complete 0110c26a367a 60FAF429D6C97D928C762CB36F1940F4456CE4BD33FBDC34DE94A5E043 Status: Lastet ned nyere bilde for node: 6.9.2 ---> FAAADB4AAF9B TRINN 2: EXPOSE 8080 ---> Kjør i DA7D251B3FD5 ---> 881F9FB69B2C Fjerning av mellombeholder DA7D251B3FD5 Trinn 3: Kopier server.JS . ---> 0ACF61D9E75E Fjerning av mellombeholder 3A4025539CF6 Trinn 4: CMD Node Server.JS ---> Kjør i 8aa9a4cbd723 ---> 41445e5c48fe Fjerning av mellombeholder 8aa9a4cbd723 Bygget 41445e5c48fe 

Distribuere til klyngen
For å distribuere My-Node: V1, kjør følgende kommando:

$ Kubectl Run My-Node --Image = My-Node: V1 --port = 8080 Distribusjon "My-Node" opprettet

Det vil lage en pod på klyngen. Vi kan sjekke POD -statusene med følgende kommandoer:

$ Kubectl Få distribusjoner Navn ønsket strøm oppdatert Age My-Node 1 1 1 1 34S 
$ kubectl få pods navn klar status omstart alder my-node-276881918-qth5s 1/1 løpende 0 1m 
$ kubectl få hendelser sistseen firstseen count name kind underobjekt type grunn kilde melding 32m 32m 1 minikube node normal startkube-proxy, minikube starter kube-proxy. 32m 32m 1 Minikube Node Normal Start Kubelet, Minikube Startkubelet. 32M 32M 2 Minikube Node Normal NodeHassufficientDisk Kubelet, Minikube Node Minikube Status er nå: NodeHassufficientDisk 32M 32M 2 Minikube node Node NodeHassufficient NodeHuBeletyDyKs MINIKUBE Node MinikMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMEMMEBEMMEBEMYBEBEUMYBE Node MINIKUBEMMMEBEMMEMYBEBEBE Node Node Node Node NodeHUSNMeBeBeBeNeNuBe Node Node Node Node NodeHUSNMeBeBeBeNube Node Node Node Node NodeHUSNMeBeBe. Ubelet, Minikube Node Minikube Status er nå: NodeHasnodiskpressure 32M 32M 1 Minikube Node Normal NodeAllocatableNforced Kubelet, Minikube Oppdatert Node Allocatable grense over pods 32M 32M 1 Minikube Node MINIKUBEBEBUBEUBEBEUTERMYRODYRODYROLOD NODEOD MINIKUBE EVENT: Registered Node MinikuBUBUBUBUBUBUBUBUBEUTERME NODEAD NODEAD NODYROLOD NODEAD NODYROLOD NODYROLOD NODYROLOD NODYROLOD NODYRODYRODYNODYNODYNOBE 32M 32M 32m 1 minikube 1 Minikube 1 Minikube 1 Minikube Ubelet, Minikube Node Minikube Status er nå: NODEREADY 6M 6M 1 Minikube Node Normal RegisteredNode ControllerManager Node Minikube Event: Registrert node Minikube i nodecontroller 5m 5m 1 minikube node Normal Startkubelet,Minikube starter Kubelet. 5m 5m 1 Minikube Node Normal NodeAlocatable Kubelet, Minikube oppdatert node tildelbar grense over pods 5m 5m 1 minikube node normal nodehassufficientDisk kubelet, miniKube node minikube status er nå: nodehassufficientDisk 5m 5m 1 miniKuKube nodehassufficientMeme Kube 5m 5m 1 miniKube MINIKUBE NodeHassufficientDisk Kubory, miniKnube NodeHassufficientDisk Kubory, minikusnode NodeHassufficientDisk Kubory, miniKuBeNuBeNute NodeHassufficientDisk Kubory, miniKuBeNuBeNube NodeHassufficientDisk Kubory. e Status er nå: NodeHassufficientMemory 5m 5m 1 minikube Node Normal NodeHasNoDiskPressure kubelet, minikube Node minikube status is now: NodeHasNoDiskPressure 5m 5m 1 minikube Node Normal NodeNotReady kubelet, minikube Node minikube status is now: NodeNotReady 5m 5m 1 minikube Node Normal Starting kube-proxy, minikube Starting kube-proxy. 5m 5m 1 Minikube Node Normal Nodeready Kubelet, Minikube Node Minikube Status er nå: Nodeready 2m 2m 1 My-Node-276881918-Qth5s Pod Normal Planlagt standard-QTHEDULER vellykket tilordnede My-Node-27881918-qtheduler. -276881918-qth5s pod normal vellykket mountvolume kubelet, Minikube Mountvolume.Oppsett lyktes for volum "Standard-Token-R5pl1" 2M 2M 1 My-Node-276881918-Qth5S POD Spec.Containere my-node normal trukket kubelet, Minikube Container Image "My-Node: V1" allerede til stede på maskin 2M 2M 1 My-Node-276881918-Qth5S POD Spec.Containere my-node normal laget kubelet, Minikube laget container 2m 2m 1 my-node-276881918-qth5s pod spec.Containere my-node normal startet kubelet, minikube startet container 2m 2m 1 my-node-276881918 replicaset normal vellykket create replicaset-controller opprettet pod: my-node-276881918-qth5S 2M 2M 1-Node-276881918-Qth5S 2M 2M 1-NOD-NODE-276881918-Qth5S 2M 2M 1-NOD-NODE-276881918-Kontroller opprettet Pod: My-NOD-NODE-276881918-CONTROLLER-kontrollen. Up replica set my-node-276881918 

Lag en tjeneste
En pod er utilgjengelig. Du må lage en tjeneste for å gjøre poden tilgjengelig for verden. Følgende kommando skal opprette den nødvendige tjenesten:

$ Kubectl eksponer distribusjon My-Node --Type = LoadBalancer Service "My-Node" Exposed

Du kan sjekke tjenestestatusen slik:

$ Kubectl Få tjenester Navn Cluster-IP Ekstern-IP-port (er) Alder Kubernetes 10.0.0.1  443/TCP 34M My-Node 10.0.0.213  8080: 31460/TCP 31S 

Hvis du bruker følgende kommando, vil den åpne tjenesten i en nettleser:

$ Minikube Service My-Node Opening Kubernetes Service Standard/My-Node i standard nettleser .. 

Du kan sjekke hva som går i poden din med “Logs” -kommandoen - KUBECTL LOGS [NAMEOFTHEPOD].

$ Kubectl logger My-Node-276881918-Qth5s mottatt forespørsel om URL: / Mottatt forespørsel om URL: / Favicon.ICO 

Ovennevnte logger viser forespørslene til serveren.JS -applikasjonen som kjører på klyngen.

Rydder opp
Du kan slette tjenesten og poden med følgende kommandoer:

$ Kubectl Delete Service My-Node Service "My-Node" Deleted $ Kubectl Delete Distribusjon My-Node [/Code] Deployment "My-Node" slettet

Du kan stoppe Minikube:

$ Minikube Stop Stoping Local Kubernetes Cluster ... Maskin stoppet. 

Konklusjon

Kubernetes er et stort system med storstilt evner. Kubernetes dokumentasjon er det beste stedet å lære om denne kraftige teknologien.

Videre studier:
Kubernetes Dokumentasjon: https: // Kubernetes.IO/Docs