Concepten van schaalbaarheid

Voltooid

Om te beginnen met het schaalbaarheidsproject dat uw bedrijf wil bereiken, moet u eerst begrijpen wat schaalbaarheid is en hoe deze wordt toegepast op Kubernetes zelf en de bijbehorende toepassingen.

In dit hoofdstuk bekijkt u enkele concepten van schaalbaarheid.

Schaalbaarheid

Schaalbaarheid is het woord dat wordt gebruikt om de mogelijkheid van een toepassing of systeem te beschrijven voor het verwerken van een toenemende hoeveelheid werk door er meer resources aan toe te voegen.

In dit geval is de hoeveelheid werk die wordt verhoogd bijvoorbeeld het aantal aanvragen van de gebruikers, terwijl de hoeveelheid toegevoegde resources op twee manieren kan worden weergegeven, verticaleschaalbaarheid en horizontale schaalbaarheid.

Verticale schaalbaarheid

Verticale schaalbaarheid is wanneer een systeem wordt geschaald door er meer fysieke resources aan toe te voegen, zoals geheugen of CPU-kracht. Als de website van het bedrijf bijvoorbeeld te veel geheugen verbruikt, kunt u uw VM-exemplaar bijwerken om meer geheugen op te nemen terwijl dezelfde onderliggende toepassing behouden blijft.

Verticaal schaaldiagram.

Kortom, het verticaal schalen verhoogt de VM-grootte terwijl het aantal toepassingen hetzelfde blijft.

Deze methode is waardevol wanneer u te veel rekenkracht nodig hebt voor monolithische toepassingen, maar die te kostbaar zijn om in kleinere onderdelen op te splitsen.

Deze toepassingen worden meestal gehost in VM's in plaats van gedistribueerde systemen als Kubernetes.

Ondanks dat de kosten beheersbaar zijn, kunnen grote VM's te duur zijn omdat de kosten voor het toevoegen van meer rekenkracht groter zijn dan de kosten voor het dupliceren van kleine VM's.

Er is ook een bovengrens voor het aantal resources dat u aan één VIRTUELE machine kunt toevoegen, wat betekent dat u de VM uiteindelijk dupliceerd zodra u de bovengrens hebt bereikt.

Horizontale schaalbaarheid

Horizontale schaalbaarheid is echter het meest gebruikte type schaalbaarheid wanneer u gedistribueerde toepassingen hebt, zoals toepassingen die zijn geïmplementeerd in AKS. Het bestaat uit het dupliceren van de hele toepassing en het verdelen van de taak ertussen.

Horizontaal schaaldiagram.

Horizontaal schalen wordt uitgeschaald, het wordt veel gebruikt in staatloze systemen, omdat u meerdere containers met dezelfde toepassing in één VIRTUELE machine kunt instellen. Op deze manier kunt u de meeste resources extraheren terwijl u één exemplaar blijft betalen in plaats van meerdere VM's.

Omdat de bedrijfssite staatloos is, is dit de beste manier van handelen, ook omdat Kubernetes out-of-the-box een resource met de naam HorizontalPodAutoscaler biedt waarmee u uw implementaties kunt uitschalen.

Handmatige schaalbaarheid in Kubernetes

Voordat u de HPA-resource (HorizontalPodAutoscaler) opent, moet u weten dat het mogelijk is om implementaties handmatig te schalen in Kubernetes.

Elke implementatie is gebonden aan een andere resource met de naam ReplicaSet, de laatste is verantwoordelijk voor het onderhouden van een 'gewenste replicastatus' en het schalen van de echte toepassing in of uit om de gewenste status hetzelfde te houden als de werkelijke status.

U kunt het aantal replica's in een implementatie beheren via de sleutel in de spec.replicas implementatiespecificatie. Met deze instelling wordt het aantal gewenste replica's in de onderliggende ReplicaSet ingesteld en wordt de replicatiecontroller gedwongen dit aantal replica's op elk gewenst moment te behouden.

U kunt ook het aantal replica's in een implementatie beheren via de kubectl scale deploy/contoso-website --replicas <number> opdracht. Met deze opdracht wordt het aantal gewenste replica's in een implementatie dynamisch gewijzigd en wordt de toepassing in- of uitgeschaald.

HorizontalPodAutoscaler

De HPA is de systeemeigen Kubernetes 1.8+-resource die horizontale schaalbaarheid biedt voor pods in het cluster. De API voor metrische gegevens wordt elke 30 seconden gecontroleerd op wijzigingen in het gewenste replicaaantal.

Als het gewenste aantal replica's verschilt van het huidige aantal replica's, wordt de implementatie in of uit geschaald door de controllerbeheerder, waarmee HPA-objecten worden beheerd.

Ontwerpdiagram horizontalPodAutoscaling.

HPA's werken met de autoscaling API-groep in Kubernetes. Er zijn twee versies voor deze API-groep. Met v1 de versie kan de implementatie alleen worden geschaald op basis van metrische CPU-gegevens, terwijl de v2beta2 versie, die uiteindelijk zal worden v2, systeemeigen bewaking van zowel CPU als geheugen toestaat. In deze leermodule werken we met de v2beta2 versie.

Elke HPA wordt gekoppeld aan een schaalreferentie, die is gedefinieerd in de spec.scaleTargetRef sleutel van het HPA-manifest. Deze schaalreferentie moet onderliggende pods hebben die moeten worden geschaald, anders werkt de HPA niet, omdat het niet mogelijk is om schalen toe te passen op objecten die niet kunnen worden geschaald, zoals DaemonSets.

Het is ook belangrijk dat elke pod een resourceaanvraag heeft ingesteld in de specificatie, anders worden de metrische gegevens niet correct berekend omdat het resourcegebruik niet wordt bepaald door het HPA-algoritme. U kunt deze beperking instellen via de spec.template.spec.containers[].resources sleutel in het implementatiemanifest, zoals:

spec:
  template:
    spec:
      containers:
        - resources:
            requests:
              cpu: 250m
              memory: 256M
            limits:
              cpu: 500m
              memory: 512M

Dit is een voorbeeld van een HPA-manifest:

apiVersion: autoscaling/v2beta2
kind: HorizontalPodAutoscaler
metadata:
  name: php-apache
spec:
  scaleTargetRef:
    apiVersion: apps/v1
    kind: Deployment
    name: php-apache
  minReplicas: 1
  maxReplicas: 10
  metrics:
  - type: Resource
    resource:
      name: cpu
      target:
        type: Utilization
        averageUtilization: 50

Daarnaast kunt u met de v2beta2 versie het schaalgedrag verfijnen, zodat u kunt bepalen hoe uw toepassing zich gedraagt wanneer deze wordt ingeschaald of uitgeschaald. Het biedt ook ondersteuning voor het schalen van aangepaste metrische gegevens, hoewel dit leertraject geen instructies biedt voor hoe u dit doet.

Kennis testen

1.

Wat is horizontale schaalaanpassing?

2.

Waarom is het belangrijk dat een resourceaanvraag is ingesteld op pods die zijn gebonden aan een HPA?

3.

Waarom wordt verticaal schalen minder aanbevolen voor stateless toepassingen?