Hur man distribuerar applikationer i Kubernetes

Kubernetes är en av de mest populära automationsplattformarna för att distribuera, skala och driva applikationsbehållare på ett kluster av värdar eller noder.

Den här artikeln kommer att diskutera ett av de centrala objekten i Kubernetes: distribution. Målet är att förstå dess beteende och hur man skapar, uppdaterar och tar bort det.

Vad är en implementering?

En Deployment är ett av objekten som används för att starta Pods. Kubernetes bästa praxis uppmuntrar användningen av distributioner för tillståndslösa applikationer. Utan en distribution skulle du behöva skapa, uppdatera och ta bort flera Pods manuellt, vilket skulle vara tråkigt och omöjligt för många Pods.

En distribution deklarerar ett enda objekt i YAML som inte bara skapar poddarna utan också säkerställer att de är uppdaterade och körs. Du kan också enkelt skala dina applikationer automatiskt med hjälp av en distribution på Kubernetes. Således används en distribution för att skala, distribuera och återställa versioner av dina applikationer i Pods.

En distribution berättar också för Kubernetes hur många kopior av en Pod vi vill köra, och Kubernetes tar hand om resten. Den associerade kontrollern kommer att skapa ett ReplicaSet från din konfiguration när du skapar en distribution. Styrenheten som är associerad med ReplicaSet kommer att skapa en serie Pods från ReplicaSet-konfigurationen.

Fördelarna med att använda en distribution istället för att direkt skapa en ReplicaSet är:

  • Historik av objektet: varje ändring i objektet (via en ”apply” eller en ”edit”) kommer att skapa en säkerhetskopia av den tidigare versionen.
  • Utrullning och återställningshantering: Du kan gå tillbaka på en konfiguration i samband med föregående punkt.

Skapa en distribution

Det finns två metoder vi kan använda för att skapa en Kubernetes-distribution:

Imperativ metod

Kubernetes API:er tillåter ett mer direkt och imperativt tillvägagångssätt utan att kräva konfigurationsfiler eller YAML-formaterade manifest. I detta tillvägagångssätt behöver vi bara säga vad vi vill göra, och Kubernetes kommer att ta ansvar för att definiera vad som måste göras för att uppnå det förväntade resultatet.

För att använda imperativmetoden, använd bara kommandot nedan:

kubectl create deployment nginx-deployment --image nginx --port=80

Deklarativ metod

I den här metoden måste du deklarera allt, och när du använder den här koden läser Kubernetes bara dina definitioner och skapar exakt som presenterat eller deklarerat.

För att använda deklarativ distribution måste du skapa en YAML-fil.

YAML-fil för distribution med namnet 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 den här YAML-filen, efter att ha definierat Kubernetes API-version, typen av objekt du skapar och namnet på distributionen, finns specifikationsavsnittet. I det här avsnittet definierar du först repliknyckeln, som anger antalet Pod-instanser som distributionen måste hålla aktiv.

Använd en väljaretikett för att identifiera poddarna i distributionen. För detta kan du använda distributionsetiketten, som talar om att alla poddar som matchar dessa etiketter är grupperade i distribution.

Efter det har du mallobjektet där du har en Pod-modell i din distributionsspecifikation. När distributionen skapar Pods skapas dem med den här mallen. Specifikationen för en vanlig pod finns under mallnyckeln.

Med denna distribution kommer Nginx-bilder med etiketter att distribueras till Pods. Dessutom måste du också vara försiktig på denna punkt, och Pod är skalbarhetsenheten i Kubernetes, så du måste tänka på vilket mönster du vill använda om du lägger flera behållare i samma Pod.

Använd sedan filen new_deployment.yaml Yaml, använd följande kommando:

kubectl apply -f new_deployment.yaml

Efter några sekunder kan du få distributionsstatus med följande:

kubectl get all

Hämta och uppdatera distributionen

Observera att du har skapade poddar, distributionen och även en replikuppsättning. Så en distribution skapar och hanterar alltid en replikuppsättning. Nu kan du använda följande kommando för att beskriva distributionen:

kubectl describe deployment nginx-deployment 

Nu har du en fullständig beskrivning av implementeringen. Den belyser strategin som används för att skapa/återbygga poddarna när en uppdatering har definierats som RollingUpdate.

RollingUpdate-strategin möjliggör en ordnad migrering av en version av en applikation till en nyare version. Det är standardstrategin som används i Kubernetes.

Utöver detta har vi även följande strategier:

  • Återskapa: Avslutar de aktuella Pod-instanserna och ”återskapar” dem med den nya versionen;
  • Blå/grön: Denna strategi skapar två separata men identiska miljöer. I den blå miljön körs applikationen som den är, medan den i den gröna miljön körs som den kommer att vara i framtiden;
  • Canary: En distributionsstrategi där en delmängd användare är involverade i den stegvisa versionen av en applikation eller tjänst.

Om du väljer ”rullande uppdatering” kan du konfigurera dess beteende om antalet önskade repliker.

  • maxSurge låter dig ange (i procent eller absoluta termer) hur många Pods den kan skapa utöver antalet repliker som för närvarande är konfigurerade.
  • maxUnavailable låter dig ange (i procent eller absoluta termer) hur många Pods som kan vara ”otillgängliga” under uppdateringen, beroende på antalet konfigurerade repliker.

Beroende på din applikation och din autoscaler, kommer dessa konfigurationer att tillåta dig att säkerställa QoS eller påskynda dina distributioner.

Därefter måste du skala Pods till 10 och ändra Nginx-bildtaggen till den senaste.

kubectl scale deployment nginx-deployment --replicas=10

Observera att vi har 5 behållare som skapas, och av 10 Pods har vi 5 tillgängliga.

Efter några sekunder, använd följande kommando:

kubectl get all

Här kan du se att alla Pods har skapats, och behållarna är igång.

Ta bort din distribution

För att ta bort en Kubernetes-distribution kan du använda följande kommandon:

kubectl delete deploy nginx-deployment 
kubectl delete deploy new_deployment.yaml

Helm: Förenkla distributioner

När du vill distribuera en komplex applikation som använder tiotals eller till och med hundratals Kubernetes-resurser, blir kubectl-verktyget olämpligt, vilket är anledningen till att verktyget Helm utvecklades. Helm är en pakethanterare för Kubernetes som bygger på kubectl och förenklar applikationsdistributioner.

I Helm-vokabulären kallas en applikation för release. Den är associerad med ett diagram, dvs en samling konfigurationsfiler i YAML-format som innehåller globala variabler och mallar som beskriver Kubernetes-resurser.

Slutsats

Implementeringen är ett viktigt Kubernetes-objekt. Eftersom en stor makt innebär ett stort ansvar måste du vara försiktig när du konfigurerar den eller riskera att få oväntade beteenden. För att gå längre med distributionskonfigurationerna kan du hänvisa till Kubernetes-dokumentationen.

Du kan också utforska några av de bästa Kubernetes-handledningarna för att lära dig från grunden och bli en expert.