Forutsetninger
Det første du trenger vil være tilgang til en Kubernetes-klynge. Du kan opprette en ved hjelp av Minikube eller bruke Docker for Windows eller Docker for Mac, som begge kommer med en enkelt node Kubernetes-distribusjon som du kan aktivere i Dockers innstillinger.
Du må også ha litt kunnskap om Kubernetes på forhånd. Her er et veldig bra utgangspunkt.
Opprette Pods
Vanligvis lager vi pods ved hjelp av en yaml-fil som spesifiserer hvilket containerbilde som skal brukes, hvilke porter som skal eksponeres, osv. Her er en enkel fil for å lage en nginx-pod.
apiVersion: v1snill: Pod
metadata:
navn: nginx-1
merkelapp:
app: webserver
spesifikasjon:
containere:
- navn: nginx
bilde: nginx: 1.7.9
porter:
- containerPort: 80
Lagre den under navnet nginx-pod.yaml i en katalog, og kjør deretter kommandoen fra innsiden av samme katalog:
$ kubectl create -f ./ nginx-pod.yaml## Bekreft at pod er opprettet ved å kjøre:
$ kubectl få pods
Du vil merke at en enkelt pod heter “Nginx-1” er oppe og går. Men du kan ikke skalere denne enkelt podden. Løping kubectl lage igjen vil gi deg en feil siden navnet nginx-1 kan ikke brukes på nytt.
Kubernetes har gitt muligheten til å skape pods til høyere abstraksjoner som Implementeringer og ReplicaSets. Som lager pods fra en gitt podmal som spesifiserer hvilke bilder du skal bruke, hvilke porter du skal eksponere i hver av de nye podene, etc, men ingenting for spesifikt om en enkelt pod. ReplicaSet (og Deployments, så vel) og deretter gå om å lage nye pods, og gi hver nye pod et unikt navn, samt en ikke-unik etikett som hjelper ReplicaSet å holde oversikt over pods som ble opprettet fra en gitt mal.
ReplicaSet sørger for at et bestemt antall pods av en gitt etikett alltid er i gang. Hvis for eksempel en node går ned, er det jobben til ReplicaSet å lage flere pods på tvers av andre noder for å kompensere for tapet. For å skrive en replikasett yaml-fil, vil vi følge mønsteret som ligner på å skrive en pod. Den vil ha en API-versjon (apper / v1), en type (ReplicaSet) og et navn i metadataene. Selve replikasettet kan ha etiketter, men vi vil holde ting enkelt for nå og bare gi det et unikt navn my-replicaset.
Vi trenger da å flytte fra metadata seksjon til kjøtt av materie spesifikasjon. Her gir vi antall replikasjoner vi ønsker under seksjonen kopier. Så gir vi dette ReplicaSet a velgeren som vil bli brukt til å matche en etikett, si, app til en verdi, si, Internett server, blant de løpende belgene. Hvis det er færre av disse podene, vil det opprette pods i henhold til den gitte malen og legge til den samme etiketten til disse nye pods. Hvis det er flere belter enn nødvendig, slettes det noen få.
Å spesifisere en mal som vil fungere som en base for å lage nye pods er det mest involverte trinnet. Denne malen vil ikke ha noe navn, siden replikasettet vil opprette et nytt navn for hver nye pod som opprettes. Det vil imidlertid ha etiketter, og du kan legge merke til at den samme etiketten app = webserver at malen har er valgt via velgeren parameter i replikasettet.
apiVersion: apper / v1snill: ReplicaSet
metadata:
navn: min replikasett
spesifikasjon:
kopier: 3
velger:
matchLabels:
app: webserver
mal:
metadata:
etiketter:
app: webserver
spesifikasjon:
containere:
- navn: nginx
bilde: nginx: 1.7.9
porter:
- containerPort: 80
Lagre denne filen som nginx-replikasett.yaml og opprett replikasettet ved hjelp av kommandoen:
$ kubectl opprett -f nginx-replikasett.yamlFordi vi tidligere har laget en pod med samme etikett app = webserver, replikasettet ville bare lage to pods til. Du kan liste opp alle pods ved å bruke kommandoen:
$ kubectl få podsNAVN KLAR STATUS RESTARTER ALDER
my-replicaset-nmvt9 1/1 Running 0 9s
my-replicaset-xf9mx 1/1 Running 0 9s
nginx-1 1/1 Kjører 0 28s
Hver av belgene har et unikt navn tilknyttet. Som den aller første podden vi opprettet hadde et navn nginx-1. Du kan prøve å slette denne med kommandoen:
$ kubectl slett pod nginx-1$ kubectl få pods
NAVN KLAR STATUS RESTARTER ALDER
my-replicaset-nmvt9 1/1 Kjører 0 1m
my-replicaset-pkn4q 1/1 Running 0 22s
my-replicaset-xf9mx 1/1 Kjører 0 1m
Du vil legge merke til at kontrolleren ReplicaSet nesten øyeblikkelig opprettet en ny pod for å erstatte den vi slettet. Dermed sikre at antall løpende pods, med etikett app = webserver er alltid 3, som spesifisert i vårt replikas manifest, ovenfor.
Du får mye kontroll takket være etiketter og velgere. Du kan videre spre podene over flere noder ved hjelp av nodeSelectors, som brukes til å tildele et bestemt antall pods på en bestemt noder.
Hva replikksett ikke tillater er oppdateringer. Hvis en nyere versjon av appen din, si, nginx: 1.8 kommer, må du slette dette replikasettet og opprette et nytt med det bildet som er nevnt i replikasettets yaml-manifest. Det er her begrepet distribusjoner kommer godt med. Det inkluderer ideen om replikasett og utvides ved å gi ekstra støtte for oppdatering av appene dine. Nå som du er komfortabel med replikater, kan det være lurt å se på Kubernetes Deployments.
Referanser
- Opprette Pods
- Opprette ReplicaSets