Hantera poddar i Kubernetes-kluster med flera pooler

Slutförd

Contoso-utvecklare arbetar med att omvandla internt utvecklade Windows- och Linux-program till Docker-baserade avbildningar som kan distribueras med hjälp av Helm-diagram. När du planerar att implementera Kubernetes-kluster på Azure Stack HCI måste du säkerställa stöd för båda operativsystemplattformarna.

Vad är nodpooler i Kubernetes-kluster på Azure Stack HCI

AKS på Azure Stack HCI stöder flera nodpooler i samma Kubernetes-kluster. Varje pool består av identiskt konfigurerade virtuella datorer enligt de inställningar som du anger när du etablerar poolen.

Genom att gruppera noder i separata pooler kan du rikta podddistributioner till lämplig uppsättning virtuella datorer. Du kan till exempel ha containerbaserade arbetsbelastningar som endast stöds av Windows-operativsystemet eller som kräver specialiserad maskinvara, till exempel grafikprocessorenheter.

Styra distributionen av poddar till nodpooler i Kubernetes-kluster på Azure Stack HCI

Som standard schemalägger Kubernetes etablering av containerbaserade arbetsbelastningar på alla tillgängliga arbetsnoder på ett sätt som optimerar resursanvändningen. Om du vill ändra det här beteendet kan du tillämpa begränsningar för valet av noder baserat på anpassade kriterier som du anger. Dessa begränsningar omfattar nodväljare och taints och toleranser.

Nodväljare

Node Selector är en inställning inom den YAML-baserade definitionen av en podd eller en distribution som identifierar målnoderna som motsvarande podd kan schemaläggas till. Om din avsikt är att utse målnoder baserat på deras operativsystem kan du förlita dig på de inbyggda etiketter som automatiskt tilldelas noder av Kubernetes. Beroende på det avsedda operativsystemet kommer nodväljaren att ha formuläret kubernetes.io/os = Windows eller kubernetes.io/os = Linux. Följande YAML-baserade poddmanifest anger till exempel Linux-noder som distributionsmål:

apiVersion: v1
kind: Pod
metadata:
  name: nginx
  labels:
    env: test
spec:
  containers:
  - name: nginx
    image: nginx
  nodeSelector:
    kubernetes.io/os = Linux

Taints och toleranser

Taints och toleranser ger en alternativ metod för att kontrollera poddplacering. Med den här metoden är taints en del av nodkonfigurationen och toleranser är en del av poddspecifikationerna. Genom att tainting en nod förhindrar du effektivt att den är värd för någon podd utan motsvarande taint-specifik tolerans.

Om du till exempel vill tillåta att en podd schemaläggs på en Windows-nod i AKS på Azure Stack HCI bör du lägga till följande tolerans i dess definition:

tolerations:
- key: node.kubernetes.io/os
  operator: Equal
  value: Windows
  effect: NoSchedule

Dessutom skulle du behöva lägga till taint node.kubernetes.io/os=Windows:NoSchedule till var och en av de Windows-noder som du vill göra tillgängliga exklusivt för distribution av poddar med motsvarande tolerans. För att åstadkomma detta kan du använda kommandoradsverktyget kubectl och sedan, när du har anslutit till målklustret, köra följande kommando för var och en av noderna i omfånget (där <node_name> platshållaren anger namnet på målnoden):

kubectl taint node <node_name> node.kubernetes.io/os=Windows:NoSchedule

Kommentar

Nodväljare tillämpar placeringar av poddar på en specifik uppsättning noder. Toleranser gör att poddar kan köras på en angiven uppsättning fördärvade noder, men förhindrar inte deras placering på noder utan taints.

Kunskapstest

1.

Contoso planerar att distribuera windows- och Linux-containerbaserade arbetsbelastningar till AKS på Azure Stack HCI. Du måste dokumentera proceduren som säkerställer att Windows-baserade poddar distribueras till Kubernetes-klusternoderna som kör Windows. Du bestämde dig för att använda taints och toleranser för detta ändamål. På vilken klusterkomponent ska du använda taint?