Kubernetes

Kubernetes Kom godt i gang

Kubernetes Kom godt i gang

Kubernetes er en open source-platform til styring af containeriserede applikationer på tværs af en klynge af fysiske eller virtuelle maskiner. Den originale inspiration til Kubernetes var Googles Borg-system. Borg er et klyngestyringssystem, der håndterer hundreder af tusinder af job og applikationer på tværs af massive Google-datacentre. Kubernetes var beregnet til at være en mere venlig version af klyngestyringssystemet, som alle kunne bruge.

Populariteten af ​​containere i softwareudviklingsprocessen gør også Kubernetes populære. I den gamle softwareudviklingsproces blev applikationer implementeret på fysiske værtsmaskiner. Udviklere, der arbejder på forskellige komponenter i applikationen, var nødvendige for at opretholde et sammenhængende miljø. Drift og it-personale, der er nødvendige for nøje at styre eksekverbare filer, konfigurationer og biblioteker. Forskellige komponenter i applikationen kan løbe i konflikt under integrationsprocessen. Processen var også modtagelig for menneskelige fejl og fejlkommunikation.

Virtuelle maskiner (VM) hjalp med at bringe et vist niveau af pålidelighed til processen. Men det var stadig svært at administrere applikationer. Også virtuelle computere er dyre at vedligeholde. Containere ændrede landskabet. Med containere var det muligt for udviklere, der arbejdede på forskellige komponenter i den samme software, at opretholde separate miljøer. Beholdere er lette, billige og hurtige. Disse fordele gav anledning til ideen om at udvikle software ved hjælp af mikrotjenester, hvor hver container tjener en bestemt opgave til applikationen.

Med stigningen i containerbrug er Kubernetes blevet et effektivt værktøj til at planlægge og køre applikationer på tværs af klynger. Som en platform kan det frigøre udviklere fra byrden ved at håndtere enhver form for maskiner. I stedet for at designe til værtscentrerede infrastrukturer med fysiske eller virtuelle maskinovervejelser, kan udviklere begynde at designe til containercentreret infrastruktur. Kubernetes giver det nødvendige abstraktionslag.

Del 1: Begreber

Master komponenter

Hovedkomponenter er de kontrollerende tjenester til klyngen. Disse komponenter håndterer globale beslutninger og begivenheder. Enhver node i klyngen kan køre dem. Imidlertid betragtes det som god praksis at tildele bestemte noder til disse komponenter.

kube-apiserver

Kube-apiserver betjener Kubernetes API. Kubernetes API implementerer en RESTful-grænseflade. Det fungerer som broen mellem forskellige Kubernetes-komponenter som bælg, tjenester, replikeringscontrollere og andre. Det er ansvarligt for konsistensen af ​​kommunikationen mellem etcd-butikken og de implementerede containere.

osv

Etcd er ansvarlig for lagring af alle Kubernetes-klyngedata. Etcd-projektet blev udviklet af CoreOS-teamet. Det er en let, distribueret nøgleværdibutik, der bruger HTTP / JSON API. Noder i klyngen kan bruge konfigurationsdata fra etcd til at opdage tjenester og gendanne fra mislykkede tilstande. På grund af vigtigheden af ​​dataene skal etcd sikkerhedskopieres korrekt.

kube-controller-manager

Kube-controller-manager kører forskellige controllere for at levere forskellige tjenester. For eksempel genopretter node-controllere mislykkede noder, og replikerings-controllere opretholder det korrekte antal bælg. Hver controller kører som en separat tråd og afhænger af etcd-oplysningerne for at udføre deres opgaver.

cloud-controller-manager

Cloud-controller-manager leverer cloud-specifikke controllere. Det kan deaktiveres i kube-controller-manager. Cloud-controller-manager er blevet adskilt fra kernen for at tillade Kubernetes-kernen at udvikle sig uafhængigt af cloud-udbyderens specifikke kode. Tidligere forårsagede afhængighederne problemer.

kube-scheduler

Kube-scheduler er ansvarlig for arbejdsbyrdefordeling. Det holder styr på ressourcebehov og tildeler noder til nyoprettede bælg. Det tager sig også af kvaliteten af ​​servicekravene.

addons

Addons er pods og tjenester, der bruges til at implementere klyngefunktioner. Brugere kan bruge add-on manager til at oprette og vedligeholde addons. Nogle vigtige og nyttige tilføjelser er DNS, Web UI (Dashboard), Container Resource Monitoring og Cluster-level logging.

Nodekomponenter

En arbejdsmaskine i Kubernetes kaldes en node. Nodekomponenter er til stede i hver node, og de håndterer forskellige aspekter af arbejdsbyrden.

kubelet

Kubelet-tjenesten på hver node er den primære agent. Det holder styr på de bælg, der er tildelt sin node gennem apiserver eller lokal konfigurationsfil. Det kommunikerer med masterkomponenterne for at finde ud af arbejdsanmodninger og rapportere status for dens node.

kube-proxy

Kube-proxy er en lille proxytjeneste på hver node til at håndtere individuel værtsundernet. Det kan udføre rudimentær belastningsafbalancering for TCP og UDP.

docker

Kubernetes afhænger primært af docker for at køre containere. Det er i stand til at oprette applikationer fra dockerbilleder.

rkt

Kubernetes understøtter også rkt containere. Support er i øjeblikket eksperimentel.

tilsyn

Supervisor kan bruges til at overvåge og kontrollere kubeletter og dockercontainere.

flydende

Den fluentd er en deamon til at levere custer-niveau logning.

Arbejdsmængder

Kubernetes-arbejdsbelastninger kan defineres som følger:

Bælg

En pod er en grundlæggende enhed i Kubernetes arbejdsbyrde. Beholdere tildeles ikke individuelt til værter. Grupper af containere, der generelt hører til en applikation, er repræsenteret som en pod, og pod'en distribueres derefter til værten som en enkelt enhed. Selvfølgelig kan en pod kun indeholde en container. Dette er generelt mere almindeligt i Kubernetes. Imidlertid er containere grupperet sammen baseret på ressource- og applikationsbehov. Grupperingen er beregnet til at optimere ressourcedeling.

Controllere

Controllere som replika sæt, replikering controller, implementeringer, stateful sæt, skrald indsamling og cron job hjælper med at administrere Kubernetes arbejdsbelastninger. Replikeringskontrollere styrer antallet af bælg. Det starter og afslutter bælg for at opretholde det korrekte antal bælg, der kører. Implementeringscontroller hjælper med at ændre bælg og implementeringsobjekter for at nå den ønskede implementeringstilstand.

Andre vigtige ideer

Tjenester

Kubernetes bælg oprettes og destrueres regelmæssigt. Så det er svært at holde styr på dem gennem IP-adresser. Bælgenes dynamiske natur gør det vanskeligt for dem at kommunikere med hinanden. En tjeneste fungerer som en abstraktion. Det giver politikken for at nå et logisk sæt bælg. I Kubernetes er en tjeneste et REST-objekt. Tjenester forenkler containerdesignet.

Mærkater

Etiketter er en effektiv måde at holde styr på og styre grupper af arbejdskomponenter. Etiketter er nøgleværdipar, der fungerer som vilkårlige tags for at få bedre kontrol over systemets forskellige funktioner.

Del 2: Praktisk projekt

Kører et Minikube-projekt

Minikube er en binær, der opretter en enkelt Kubernetes-klynge på en lokal maskine. I dette projekt, en node.js-applikationen bliver til et docker-containerbillede, og billedet køres på Minikube.

Installation af Minikube, kubectl, Hypervisor, NodeJS og Docker

Du kan installere Minikube og Kubernetes kommandolinjeværktøj kubectl på Mac OS X, Linux og Windows med forskellige hypervisorer. Instruktionerne til forskellige operativsystemer er tilgængelige her. Du skal også have NodeJS installeret på din maskine for at køre eksemplet HelloWorld-applikationen. Du kan installere docker her.

Start af en klynge

Brug følgende kommando til at starte en klynge:

$ minikube start Start af lokal Kubernetes v1.7.5 klynge ... Start af VM ... Download af Minikube ISO 106.36 MB / 106.36 MB [===============================================] 100.00% 0s Få VM-IP-adresse ... Flytning af filer til klynge ... Opsætning af certs ... Tilslutning til klynge ... Opsætning af kubeconfig ... Start af klyngekomponenter ... Kubectl er nu konfigureret til at bruge klyngen. 

Brug kommandoen nedenfor for at se, om klyngen kører korrekt:

$ kubectl cluster-info Kubernetes master kører på https: // 192.168.99.100: 8443

Opret applikationsbillede

Lad os oprette en server.js-fil med følgende indhold:

var http = kræve ('http'); var handleRequest = funktion (anmodning, svar) konsol.log ('Modtaget anmodning om URL:' + anmodning.url); respons.skrivehoved (200); respons.slut ('Hello World!'); ; var www = http.createServer (handleRequest); www.lyt (8080); 

Du kan køre følgende kommando:

$ node-server.js

Og kontroller, om serveren kører på http: // localhost: 8080. Du skulle se ”Hej verden!”Tekst på websiden.

Konverter til Docker Container

I samme bibliotek som serveren.js opretter en fil Dockerfile med følgende tekst:

FRA knude: 6.9.2 EXPOSE 8080 COPY-server.js . CMD-node-server.js 

Dockerfilen opretter et billede, der starter fra noden: 6.9.2 billede på Docker Hub.
Vi vil køre dockerbillederne lokalt. Så følgende kommando fortæller docker at bruge Minikube deamon til til docker billedlager:

$ eval $ (minikube docker-env)

Du kan bruge eval $ (minikube docker-env -u) til at ændre det tilbage til standard.
Lad os nu bygge dockerbilledet:

$ docker build -t my-node: v1 . Afsendelse af build-kontekst til Docker-dæmon 3.072kB Trin 1: FRA knude: 6.9.2 6.9.2: Trække fra biblioteket / node 75a822cd7888: Træk komplet 57de64c72267: Træk komplet 4306be1e8943: Træk komplet 871436ab7225: Træk komplet 0110c26a367a: Træk komplet 1f04fe713f1b: Træk komplet ac7c0b5fb553: Træk komplet Digest: SHA256: 2e95be60faf429d6c97d928c762cb36f1940f4456ce4bd33fbdc34de94a5e043 Status: Downloadet nyere billede til node: 6.9.2 ---> faaadb4aaf9b Trin 2: EXPOSE 8080 ---> Kører i da7d251b3fd5 ---> 881f9fb69b2c Fjernelse af mellembeholder da7d251b3fd5 Trin 3: COPY-server.js . ---> 0acf61d9e75e Fjernelse af mellembeholder 3a4025539cf6 Trin 4: CMD-nodeserver.js ---> Kører i 8aa9a4cbd723 ---> 41445e5c48fe Fjernelse af mellembeholder 8aa9a4cbd723 Bygget med succes 41445e5c48fe 

Implementere til klyngen
For at implementere min node: v1 skal du køre følgende kommando:

$ kubectl kør min-node --image = min-node: v1 --port = 8080 implementering "min-node" oprettet

Det opretter en pod på klyngen. Vi kan kontrollere podstatusene med følgende kommandoer:

$ kubectl få implementeringer NAVN ØNSKET AKTUELT OP-TIL DATUM TILGÆNGELIG ALDER my-node 1 1 1 1 34s 
$ kubectl få pods NAVN KLAR STATUS RESTARTS ALDER my-node-276881918-qth5s 1/1 Running 0 1m 
$ kubectl få begivenheder LASTSEEN FIRSTSEEN TÆLLENAVN SORT EMNE TYPE GRUND KILDEBESKED 32m 32m 1 minikube Knude Normal Start kube-proxy, minikube Start kube-proxy. 32m 32m 1 minikube Knude Normal startkubelet, minikube Startkubelet. 32m 32m 2 minikube Knude Normal NodeHasSufficientDisk kubelet, minikube Knude minikube status er nu: NodeHasSufficientDisk 32m 32m 2 minikube Knude Normal NodeHasSufficientMemory kubelet, minikube Node minikube status er nu: NodeHasSufficientMemory 32m 32m 2 minikube Node Minusube koden er nu: Node minasube er nu NodeHasNoDiskPressure 32m 32m 1 minikube Knude Normal NodeAlokeringsbarEnforced kubelet, minikube Opdateret Knude Tildelt grænse på tværs af bælg 32m 32m 1 minikube Knude Normal RegistreretNode-controller manager Node minikubehændelse: Registreret Node minikube i NodeController 32m 32m 1 minikube Node Normal NodeReady kubelet minikube, minikube NodeReady 6m 6m 1 minikube Knude Normal RegistreretNode controllermanager Knude minikubehændelse: Registreret knude minikube i NodeController 5m 5m 1 minikube Knude Normal Start kubelet, minikube Start kubelet. 5m 5m 1 minikube Knude Normal NodeAlokeringsbarEnforceret kubelet, minikube Opdateret Knude Allokerbar grænse på tværs af bælg 5m 5m 1 minikube Knude Normal NodeHasSufficientDisk kubelet, minikube Node minikube status er nu: NodeHasSufficientDisk 5m 5m 1 minikube Node Normal NodeHasSufficientMemory er Node 5m 5m 1 minikube Node Normal NodeHasNoDiskPressure kubelet, minikube Node minikube status er nu: NodeHasNoDiskPressure 5m 5m 1 minikube Node Normal NodeNotReady kubelet, minikube Node minikube status er nu: NodeNotReady 5m 5m 1 minikube Node Normal Start kube-proxy min. 5m 5m 1 minikube Node Normal NodeReady kubelet, minikube Node minikube status er nu: NodeReady 2m 2m 1 my-node-276881918-qth5s Pod Normal Planlagt standard-planlægger tildelt min-node-276881918-qth5s til minikube 2m 2m 1 my-node -276881918-qth5s Pod Normal SuccessfulMountVolume kubelet, minikube MountVolume.SetUp lykkedes for volumen "standard-token-r5pl1" 2m 2m 1 my-node-276881918-qth5s Pod spec.containere my-node Normal trukket kubelet, minikube Containerbillede "my-node: v1" findes allerede på maskinen 2m 2m 1 my-node-276881918-qth5s Pod spec.containere my-node Normal Oprettet kubelet, minikube Oprettet 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 Succesfuld Opret replicaset-controller Oprettet pod: my-node-276881918-qth5s 2m 2m 1 my-node Deployment Normal ScalingReplicaSet deployment-controller Scaled up replika sæt my-node-276881918 

Opret en tjeneste
En bælge er utilgængelig. Du skal oprette en tjeneste for at gøre pod'en tilgængelig for verden. Følgende kommando skal oprette den nødvendige service:

$ kubectl udsætter implementering min-node --type = LoadBalancer-tjeneste "min-node" eksponeret

Du kan kontrollere servicestatus sådan:

$ 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 bruger følgende kommando, åbner den tjenesten i en webbrowser:

$ minikube-tjeneste min-node Åbning af kubernetes-servicestandard / min-node i standardbrowser .. 

Du kan kontrollere, hvad der foregår i din pod med kommandoen "logs" - kubectl logs [nameOfThePod].

$ kubectl logger my-node-276881918-qth5s Modtaget anmodning om URL: / Modtaget anmodning om URL: / favicon.ico 

Ovenstående logfiler viser anmodningerne til serveren.js-applikation, der kører på klyngen.

Gøre rent
Du kan slette tjenesten og pod'en med følgende kommandoer:

$ kubectl-sletningstjeneste min-node-tjeneste "min-node" slettet $ kubectl-sletning-implementering min-node [/ code] -installation "min-node" slettet

Du kan stoppe minikuben:

$ minikube stop Stop den lokale Kubernetes klynge ... Maskinen stoppet. 

Konklusion

Kubernetes er et stort system med store kapaciteter. Kubernetes dokumentation er det bedste sted at lære om denne kraftfulde teknologi.

Yderligere studier:
Kubernetes-dokumentation: https: // kubernetes.io / docs

Mus AppyMouse pegefelt på skærmen og musemarkør til Windows-tablets
AppyMouse pegefelt på skærmen og musemarkør til Windows-tablets
Tabletbrugere savner ofte musemarkøren, især når de er vante til at bruge bærbare computere. Touchscreen-smartphones og tablets har mange fordele, og ...
Mus Midterste museknap fungerer ikke i Windows 10
Midterste museknap fungerer ikke i Windows 10
Det midterste museknap hjælper dig med at rulle gennem lange websider og skærme med en masse data. Hvis det stopper, vil du ende med at bruge tastatur...
Mus Sådan ændres venstre og højre museknap på Windows 10-pc
Sådan ændres venstre og højre museknap på Windows 10-pc
Det er en ganske normal, at alle computermusenheder er ergonomisk designet til højrehåndede brugere. Men der er musenheder til rådighed, der er specie...