Hantera poddar i Kubernetes-kluster med flera pooler
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.