Concept - Toepassing uitrollen

Voltooid

Voordat u uw toepassing in Kubernetes implementeert, gaan we Kubernetes-implementaties bekijken en hun beperkingen in ons scenario bespreken.

Wat zijn Kubernetes-implementaties?

een diagram met een Kubernetes-implementatie met een label en drie pods.

Een Kubernetes-implementatie is een evolutie van pods. Implementaties verpakken pods in een intelligent object waarmee ze kunnenuitschalen. U kunt uw toepassing eenvoudig dupliceren en schalen om meer belasting te ondersteunen zonder dat u complexe netwerkregels hoeft te configureren.

Met deployments kunt u uw toepassingen bijwerken zonder uitvaltijd door de imagetag te wijzigen. Als u een implementatie bijwerkt, worden de online-apps één voor één uitgeschakeld en vervangen door de nieuwste versie in plaats van alle apps te verwijderen en nieuwe apps te maken. Dit betekent dat de implementatie de pods erin kan bijwerken zonder zichtbaar effect op beschikbaarheid.

Hoewel er veel voordelen zijn bij het gebruik van implementaties via pods, kunnen ze ons scenario niet adequaat verwerken.

Dit scenario omvat een gebeurtenisgestuurde toepassing die een groot aantal gebeurtenissen op verschillende momenten ontvangt. Zonder een KEDA Scaler-object of HPA moet u het aantal replica's handmatig aanpassen om het aantal gebeurtenissen te verwerken en omlaag schalen de implementatie wanneer de belasting weer normaal wordt uitgevoerd.

Voorbeeldimplementatiemanifest

Hier volgt een voorbeeldfragment van ons implementatiemanifest:

apiVersion: apps/v1
kind: Deployment
metadata:
  name: contoso-microservice
spec:
  replicas: 10                      # Tells K8S the number of pods needed to process the Redis list items
  selector:                         # Define the wrapping strategy
    matchLabels:                    # Match all pods with the defined labels
      app: contoso-microservice     # Labels follow the `name: value` template
  template:                         # Template of the pod inside the deployment
    metadata:
      labels:
        app: contoso-microservice
    spec:
      containers:
        - image: mcr.microsoft.com/mslearn/samples/redis-client:latest
          name: contoso-microservice

In het voorbeeldmanifest is replicas ingesteld op 10. Dit is het hoogste aantal dat we kunnen instellen voor de benodigde replica's die beschikbaar zijn voor het verwerken van het piekaantal gebeurtenissen. Dit zorgt er echter voor dat de toepassing te veel resources verbruikt tijdens niet-piektijden, waardoor andere Deployments binnen het cluster te weinig middelen kunnen krijgen.

Een oplossing is om een zelfstandige HPA te gebruiken om het CPU-gebruik van de pods te bewaken. Dit is een betere optie dan handmatig schalen in beide richtingen. De HPA richt zich echter niet op het aantal gebeurtenissen dat de Redis-lijst ontvangt.

De beste oplossing is om KEDA en een Redis-schaalset te te gebruiken om een query uit te voeren op de lijst en te bepalen of er meer of minder pods nodig zijn om de gebeurtenissen te verwerken.