Best practices voor algemene scheduler-functies in Azure Kubernetes Service (AKS)
Bij het beheren van clusters in Azure Kubernetes Service (AKS) moet u vaak teams en workloads isoleren. Met de Kubernetes-scheduler kunt u de distributie van rekenresources beheren of de impact van onderhoudsgebeurtenissen beperken.
Dit artikel met best practices richt zich op eenvoudige Kubernetes-planningsfuncties voor clusteroperators. In dit artikel leert u het volgende:
- Resourcequota gebruiken om teams of workloads een vaste hoeveelheid resources te bieden
- De impact van gepland onderhoud beperken met behulp van 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, weigert u de implementatie. Bemonitor het resourcegebruik en pas quota naar behoefte aan.
Resourceaanvragen en -limieten worden in de podspecificatie geplaatst. Limieten worden tijdens de implementatie door de Kubernetes-scheduler gebruikt om een beschikbaar knooppunt in het cluster te vinden. Limieten en aanvragen werken op het niveau van de afzonderlijke pods. Zie Resourceaanvragen en -limieten voor pods definiëren voor meer informatie over het definiëren van deze waarden
Als u een manier wilt bieden om resources voor een ontwikkelteam of project te reserveren en te beperken, moet u resourcequota gebruiken. Deze quota worden gedefinieerd voor een naamruimte en kunnen worden gebruikt om quota op de volgende basis in te stellen:
- Rekenbronnen, zoals CPU en geheugen, of GPU's.
- Opslagbronnen, 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 maakt geen overcommiting van resources. Zodra het totaal van uw cumulatieve resourceaanvraag het toegewezen quotum overschrijdt, zullen alle verdere implementaties mislukt.
Wanneer u resourcequota definieert, moeten alle pods die in de naamruimte zijn gemaakt, limieten of aanvragen in de podspecificaties bieden. Als deze waarden niet worden verstrekt, kunt u de implementatie afwijzen. In plaats daarvan kunt u standaardaanvragen en -limieten configureren voor een naamruimte.
In het volgende YAML-voorbeeldmanifest met de naam dev-app-team-quotas.yaml wordt een harde limiet van in totaal 10 CPU's, 20Gi aan geheugen en 10 pods vastgesteld:
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 krijgen in hun behoeften en pas de juiste resourcequota toe.
Zie Resourcequota in Kubernetesvoor meer informatie over beschikbare resourceobjecten, -scopes en -prioriteiten.
Beschikbaarheid plannen met behulp van podonderbrekingsbudgetten
Richtlijnen voor best practices
Als u de beschikbaarheid van toepassingen wilt behouden, definieert u Pod Disruption Budgets (PDBs) om ervoor te zorgen dat er een minimum aantal pods beschikbaar is in het cluster.
Er zijn twee verstorende gebeurtenissen die ervoor zorgen dat pods worden verwijderd:
Onvrijwillige onderbrekingen
Onvrijwillige onderbrekingen zijn gebeurtenissen die buiten de normale controle van de clusteroperator of toepassingseigenaar liggen. Neem het volgende op:
- Hardwarefout op de fysieke computer
- Kernel in angst
- Verwijdering van een knooppunt-VM
Onvrijwillige onderbrekingen kunnen worden vereenvuld door:
- Meerdere replica's van uw pods gebruiken in een implementatie.
- Meerdere knooppunten uitvoeren in het AKS-cluster.
Vrijwillig onderbrekingen
Vrijwillig onderbrekingen zijn gebeurtenissen die zijn aangevraagd door de clusteroperator of toepassingseigenaar. Neem het volgende op:
- Clusterupgrades
- Bijgewerkte implementatiesjabloon
- Per ongeluk een pod verwijderen
Kubernetes biedt podonderbrekingsbudgetten voor vrijwillig onderbrekingen, zodat u kunt plannen hoe implementaties of replicasets reageren wanneer er een vrijwillig onderbrekingsgebeurtenis optreedt. Met behulp van podonderbrekingsbudgetten kunnen clusteroperators een minimaal beschikbaar of maximaal aantal niet-beschikbare resources definiëren.
Als u een cluster bijwerkt of een implementatiesjabloon bijwerkt, worden door de Kubernetes-scheduler extra pods op andere knooppunten gepland voordat het vrijwillig verstoren van gebeurtenissen wordt voortgezet. De scheduler wacht tot een knooppunt opnieuw wordt opgestart 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 die NGINX uitvoeren. Aan de pods in de replicaset is het label app: nginx-frontend toegewezen. Tijdens een vrijwillig onderbrekingsgebeurtenis, 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/v1beta1
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 in de replicaset.
U kunt een maximum aantal niet-beschikbare exemplaren in een replicaset definiëren. Ook hier kan een percentage voor het maximum aantal niet-beschikbare pods worden gedefinieerd. Het volgende YAML-manifest voor podonderbrekingsbudget definieert dat niet meer dan twee pods in de replicaset niet beschikbaar zijn:
apiVersion: policy/v1beta1
kind: PodDisruptionBudget
metadata:
name: nginx-pdb
spec:
maxUnavailable: 2
selector:
matchLabels:
app: nginx-frontend
Zodra uw budget voor podonderbreking is gedefinieerd, maakt u het 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 pas de juiste podonderbrekingsbudgetten toe.
Zie Een onderbrekingsbudget opgeven voor uw toepassing voor meer informatie over het gebruik van podonderbrekingsbudgetten.
Volgende stappen
Dit artikel is gericht op eenvoudige Kubernetes-scheduler-functies. Zie de volgende best practices voor meer informatie over clusterbewerkingen in AKS: