Aanbevolen procedures voor eenvoudige scheduler-functies in Azure Kubernetes Service (AKS)

Wanneer u clusters beheert in Azure Kubernetes Service (AKS), moet u vaak teams en workloads isoleren. Met de Kubernetes-planner kunt u de distributie van rekenresources beheren of de impact van onderhoudsevenementen beperken.

Dit artikel over aanbevolen procedures is gericht op basisfuncties voor Kubernetes-planning voor clusteroperators. In dit artikel leert u het volgende:

  • Resourcequota gebruiken om een vaste hoeveelheid resources aan teams of workloads te bieden
  • De impact van gepland onderhoud beperken met podonderbrekingsbudgetten

Resourcequota afdwingen

Richtlijnen voor best practices

Plan en pas resourcequota toe op het niveau van de naamruimte. Als pods geen resourceaanvragen en -limieten definiëren, wijst u de implementatie af. Bewaak het resourcegebruik en pas waar nodig quota aan.

Resourceaanvragen en -limieten worden in de podspecificatie geplaatst. Aanvragen worden tijdens de implementatie door de Kubernetes-planner gebruikt om een beschikbaar knooppunt in het cluster te vinden. Limieten en aanvragen werken op het niveau van de afzonderlijke pods. Zie Aanvragen en limieten voor podresources definiëren voor meer informatie over het definiëren van deze waarden.

Als u een manier wilt bieden om resources in een ontwikkelingsteam of project te reserveren en te beperken, moet u resourcequota gebruiken. Deze quota worden gedefinieerd voor een naamruimte en kunnen worden gebruikt om quota in te stellen op de volgende basis:

  • Rekenresources, zoals CPU en geheugen, of GPU's.
  • Opslagresources, inclusief het totale aantal volumes of de hoeveelheid schijfruimte voor een bepaalde opslagklasse.
  • Het aantal objecten, zoals het maximum aantal geheimen, services of taken, kan worden gemaakt.

Kubernetes heeft geen te veel resources nodig. Zodra het totale aantal cumulatieve resourceaanvragen het toegewezen quotum heeft overschreden, zijn alle verdere implementaties mislukt.

Wanneer u resourcequota definieert, moeten alle pods die in de naamruimte zijn gemaakt limieten of aanvragen in hun podspecificaties bevatten. Als ze deze waarden niet opgeven, kunt u de implementatie weigeren. In plaats daarvan kunt u standaardaanvragen en limieten voor een naamruimte configureren.

In het volgende voorbeeld van het YAML-manifest met de naam dev-app-team-quotas.yaml wordt een vaste limiet ingesteld van in totaal 10 CPU's, 20Gi geheugen en 10 pods:

apiVersion: v1
kind: ResourceQuota
metadata:
  name: dev-app-team
spec:
  hard:
    cpu: "10"
    memory: 20Gi
    pods: "10"

Dit resourcequotum kan worden toegepast door de naamruimte op te geven, zoals dev-apps:

kubectl apply -f dev-app-team-quotas.yaml --namespace dev-apps

Werk samen met uw toepassingsontwikkelaars en -eigenaren om inzicht te hebben in hun behoeften en de juiste resourcequota toe te passen.

Zie Resourcequota in Kubernetes voor meer informatie over beschikbare resourceobjecten, bereiken en prioriteiten.

Beschikbaarheid plannen met podonderbrekingsbudgetten

Richtlijnen voor best practices

Als u de beschikbaarheid van toepassingen wilt behouden, definieert u PDB's (Pod Disruption Budgets) om ervoor te zorgen dat er een minimum aantal pods beschikbaar is in het cluster.

Er zijn twee verstorende gebeurtenissen die ertoe leiden dat pods worden verwijderd:

Onvrijwillige onderbrekingen

Onvrijwillige onderbrekingen zijn gebeurtenissen die buiten de normale controle van de clusteroperator of toepassingseigenaar vallen. Inclusief:

  • Hardwarefout op de fysieke machine
  • Kernel-panic
  • Verwijderen van een knooppunt-VM

Onvrijwillige onderbrekingen kunnen worden verzacht door:

  • Meerdere replica's van uw pods gebruiken in een implementatie.
  • Meerdere knooppunten uitvoeren in het AKS-cluster.

Vrijwillige onderbrekingen

Vrijwillige onderbrekingen zijn gebeurtenissen die zijn aangevraagd door de clusteroperator of de eigenaar van de toepassing. Inclusief:

  • Clusterupgrades
  • Bijgewerkte implementatiesjabloon
  • Per ongeluk een pod verwijderen

Kubernetes biedt budgetten voor podonderbreking voor vrijwillige onderbrekingen, zodat u kunt plannen hoe implementaties of replicasets reageren wanneer een vrijwillige onderbreking plaatsvindt. Met behulp van pod-onderbrekingsbudgetten kunnen clusteroperators een minimaal beschikbaar of maximaal aantal niet-beschikbare resources definiëren.

Als u een cluster bijwerkt of een implementatiesjabloon bijwerkt, plant de Kubernetes-planner extra pods op andere knooppunten voordat vrijwillige onderbrekingsevenementen kunnen worden voortgezet. De scheduler wacht met het opnieuw opstarten van een knooppunt totdat het gedefinieerde aantal pods is gepland op andere knooppunten in het cluster.

Laten we eens kijken naar een voorbeeld van een replicaset met vijf pods waarop NGINX wordt uitgevoerd. Aan de pods in de replicaset wordt het label app: nginx-frontendtoegewezen. Tijdens een vrijwillige onderbreking, zoals een clusterupgrade, wilt u ervoor zorgen dat ten minste drie pods blijven worden uitgevoerd. Het volgende YAML-manifest voor een PodDisruptionBudget-object definieert deze vereisten:

apiVersion: policy/v1
kind: PodDisruptionBudget
metadata:
   name: nginx-pdb
spec:
   minAvailable: 3
   selector:
    matchLabels:
      app: nginx-frontend

U kunt ook een percentage definiëren, zoals 60%, waarmee u automatisch kunt compenseren voor het omhoog schalen van het aantal pods door de replicaset.

U kunt een maximum aantal niet-beschikbare exemplaren in een replicaset definiëren. Er kan ook een percentage worden gedefinieerd voor het maximum aantal pods dat niet beschikbaar is. Het volgende YAML-manifest voor podonderbrekingsbudget definieert dat niet meer dan twee pods in de replicaset niet beschikbaar zijn:

apiVersion: policy/v1
kind: PodDisruptionBudget
metadata:
   name: nginx-pdb
spec:
   maxUnavailable: 2
   selector:
    matchLabels:
      app: nginx-frontend

Zodra het onderbrekingsbudget voor pods is gedefinieerd, maakt u dit in uw AKS-cluster, net als bij elk ander Kubernetes-object:

kubectl apply -f nginx-pdb.yaml

Werk samen met uw toepassingsontwikkelaars en -eigenaren om inzicht te krijgen in hun behoeften en de juiste podonderbrekingsbudgetten toe te passen.

Zie Een onderbrekingsbudget voor uw toepassing opgeven voor meer informatie over het gebruik van podonderbrekingsbudgetten.

Volgende stappen

Dit artikel is gericht op basisfuncties van Kubernetes-scheduler. Zie de volgende best practices voor meer informatie over clusterbewerkingen in AKS: