Slik distribuerer du applikasjoner i Kubernetes
Kubernetes er en av de mest populære automatiseringsplattformene for distribusjon, skalering og drift av applikasjonsbeholdere på en klynge av verter eller noder.
Denne artikkelen vil diskutere et av de sentrale objektene i Kubernetes: distribusjon. Målet er å forstå dens oppførsel og hvordan du oppretter, oppdaterer og sletter den.
Innholdsfortegnelse
Hva er en distribusjon?
En distribusjon er et av objektene som brukes til å starte Pods. Kubernetes beste praksis oppfordrer til bruk av distribusjoner for statsløse applikasjoner. Uten en distribusjon, må du manuelt opprette, oppdatere og slette flere Pods, noe som ville være kjedelig og umulig for mange Pods.
En distribusjon erklærer et enkelt objekt i YAML som ikke bare oppretter Pods, men også sikrer at de er oppdaterte og kjører. Du kan også enkelt automatisk skalere applikasjonene dine ved å bruke en distribusjon på Kubernetes. Dermed brukes en distribusjon til å skalere, distribuere og rulle tilbake versjoner av applikasjonene dine i Pods.
En distribusjon forteller også Kubernetes hvor mange kopier av en Pod vi vil kjøre, og Kubernetes tar seg av resten. Den tilknyttede kontrolleren vil opprette et replikasett fra konfigurasjonen når du oppretter en distribusjon. Kontrolleren knyttet til ReplicaSet vil lage en serie med Pods fra ReplicaSet-konfigurasjonen.
Fordelene ved å bruke en distribusjon i stedet for å opprette et replikasett direkte er:
- Historisering av objektet: hver endring i objektet (via en «apply» eller en «edit») vil lage en sikkerhetskopi av den forrige versjonen.
- Utrulling og tilbakerulling: Du kan gå tilbake på en konfigurasjon i forbindelse med forrige punkt.
Opprette en distribusjon
Det er to metoder vi kan bruke for å lage en Kubernetes-distribusjon:
Imperativ metode
Kubernetes API-ene tillater en mer direkte og imperativ tilnærming uten å kreve konfigurasjonsfiler eller YAML-formaterte manifester. I denne tilnærmingen trenger vi bare å si hva vi vil ha gjort, og Kubernetes vil ta ansvar for å definere hva som må gjøres for å oppnå det forventede resultatet.
For å bruke den imperative metoden, bruk bare kommandoen nedenfor:
kubectl create deployment nginx-deployment --image nginx --port=80
Deklarativ metode
I denne metoden må du deklarere alt, og når du bruker denne koden, leser Kubernetes bare definisjonene dine og oppretter nøyaktig som presentert eller deklarert.
For å bruke deklarativ distribusjon må du opprette en YAML-fil.
YAML-fil for distribusjon med navnet new_deployment.yaml:
apiVersion: apps/v1 kind: Deployment metadata: name: nginx-deployment spec: #Specifies the number of Pod Copies replicas: 3 #Selects the Pod to be managed by the deployment selector: #Matches the defined labels matchLabels: deploy: example template: metadata: #Specifies the labels on the Pod. labels: deploy: example spec: containers: - name: nginx image: nginx:1.20.2
I denne YAML-filen, etter å ha definert Kubernetes API-versjonen, typen objekt du oppretter, og navnet på distribusjonen, er det spesifikasjonsdelen. I denne delen definerer du først replika-nøkkelen, som angir antall Pod-forekomster distribusjonen må holde aktiv.
Bruk en velgeretikett for å identifisere Pods i distribusjonen. For dette kan du bruke distribusjonsetiketten, som forteller at alle pods som samsvarer med disse etikettene er gruppert i distribusjon.
Etter det har du malobjektet der du har en Pod-modell i distribusjonsspesifikasjonen din. Når distribusjonen oppretter Pods, opprettes de ved hjelp av denne malen. Spesifikasjonen for en vanlig pod finner du under malnøkkelen.
Med denne distribusjonen vil Nginx-bilder med etiketter bli distribuert til Pods. Dessuten må du også være forsiktig på dette punktet, og Pod er skalerbarhetsenheten i Kubernetes, så du må tenke på mønsteret du vil bruke hvis du legger flere beholdere i samme Pod.
Deretter bruker du new_deployment.yaml Yaml-filen, bruk følgende kommando:
kubectl apply -f new_deployment.yaml
Etter noen sekunder kan du få distribusjonsstatus ved å bruke følgende:
kubectl get all
Hent og oppdater distribusjon
Vær oppmerksom på at du har opprettet pods, distribusjonen og også et replikasett. Så en distribusjon oppretter og administrerer alltid et replikasett. Nå kan du bruke følgende kommando for å beskrive distribusjonen:
kubectl describe deployment nginx-deployment
Nå har du en fullstendig beskrivelse av distribusjonen. Den fremhever strategien som brukes til å opprette/rebygge podene når en oppdatering er definert som RollingUpdate.
RollingUpdate-strategien tillater en ryddig migrering av én versjon av en applikasjon til en nyere versjon. Det er standardstrategien som brukes i Kubernetes.
I tillegg til dette har vi også følgende strategier:
- Gjenopprett: Avslutter Pod-forekomstene som kjører for øyeblikket og «gjenskaper» dem med den nye versjonen;
- Blå/grønn: Denne strategien skaper to separate, men identiske miljøer. I det blå miljøet kjører applikasjonen som den er, mens i det grønne miljøet kjører applikasjonen som den vil være i fremtiden;
- Canary: En distribusjonsstrategi der en undergruppe av brukere er involvert i den inkrementelle utgivelsen av en applikasjon eller tjeneste.
Hvis du velger «rullende oppdatering», kan du konfigurere oppførselen om antall replikaer du ønsker.
- maxSurge lar deg indikere (i prosent eller absolutt) hvor mange Pods den kan lage i tillegg til antall replikaer som er konfigurert for øyeblikket.
- maxUnavailable lar deg indikere (i prosent eller absolutte termer) hvor mange Pods som kan være «utilgjengelige» under oppdateringen, avhengig av antall replikaer som er konfigurert.
Avhengig av applikasjonen din og autoscaler, vil disse konfigurasjonene tillate deg å sikre QoS eller øke hastigheten på distribusjonene dine.
Deretter må du skalere Pods til 10 og endre Nginx-bildekoden til den nyeste.
kubectl scale deployment nginx-deployment --replicas=10
Legg merke til at vi har 5 beholdere under opprettelse, og av 10 Pods har vi 5 tilgjengelige.
Etter noen sekunder, bruk følgende kommando:
kubectl get all
Her kan du se at alle Pods er opprettet, og containerne kjører.
Sletter distribusjonen din
For å slette en Kubernetes-distribusjon, kan du bruke følgende kommandoer:
kubectl delete deploy nginx-deployment kubectl delete deploy new_deployment.yaml
Ror: Forenkle implementeringer
Når du vil distribuere en kompleks applikasjon som bruker titalls eller til og med hundrevis av Kubernetes-ressurser, blir kubectl-verktøyet uegnet, og det er grunnen til at Helm-verktøyet ble utviklet. Helm er en pakkebehandling for Kubernetes som bygger på kubectl og forenkler applikasjonsdistribusjoner.
I Helm-vokabularet kalles en applikasjon en utgivelse. Det er assosiert med et diagram, dvs. en samling av konfigurasjonsfiler i YAML-format som inneholder globale variabler og maler som beskriver Kubernetes-ressurser.
Konklusjon
Utrullingen er et viktig Kubernetes-objekt. Ettersom en stor makt innebærer et stort ansvar, må du være forsiktig når du konfigurerer den eller risikere å ha uventet oppførsel. For å gå videre med distribusjonskonfigurasjonene kan du se Kubernetes-dokumentasjonen.
Du kan også utforske noen av de beste Kubernetes-opplæringene for å lære fra bunnen av og bli en ekspert.