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.

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.
  Gjenopprett lydoppfatningen med disse 11 høreapparatappene

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.

  Hvordan spille Pokémon-spill på en PC

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.
  Hva er ATT ESPN-kanalnummer?

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.