Dostosowywanie aplikacji do użycia w klastrach Kubernetes o mieszanych systemach operacyjnych
Dotyczy: usługa AKS w usłudze Azure Stack HCI 22H2, AKS w systemie Windows Server
Usługa AKS włączona przez usługę Arc umożliwia uruchamianie klastrów Kubernetes z węzłami systemu Linux i Windows, ale należy wprowadzić niewielkie zmiany w aplikacjach do użycia w tych klastrach mieszanego systemu operacyjnego. W tym przewodniku z instrukcjami opisano sposób, w jaki aplikacja jest zaplanowana w odpowiednim systemie operacyjnym hosta przy użyciu selektorów węzłów lub defektów i tolerancji.
W tym artykule przyjęto założenie, że podstawowa wiedza na temat pojęć związanych z platformą Kubernetes. Aby uzyskać więcej informacji, zobacz Podstawowe pojęcia dotyczące usługi Kubernetes dla usługi AKS włączone przez usługę Arc.
Selektory węzłów
Selektor węzłów to proste pole w specyfikacji YAML zasobnika, które ogranicza harmonogram zasobników tylko do węzłów w dobrej kondycji pasujących do systemu operacyjnego. W specyfikacji zasobnika YAML określ nodeSelector
wartość systemu Windows lub Linux, jak pokazano w następujących przykładach:
kubernetes.io/os = Windows
lub
kubernetes.io/os = Linux
Aby uzyskać więcej informacji na temat selektorów węzłów, zobacz Selektory węzłów.
Taints i tolerancje
Defekty i tolerancje współpracują ze sobą, aby upewnić się, że zasobniki nie są przypadkowo zaplanowane na węzłach. Węzeł może być "skażony", aby odrzucić zasobniki, które nie są jawnie tolerowane przez "tolerancję" w specyfikacji YAML zasobnika.
Węzły systemu operacyjnego Windows w usłudze AKS Arc mogą być skażone podczas tworzenia za pomocą polecenia New-AksHciNodePool lub New-AksHciCluster . Możesz również użyć tych poleceń, aby skażone węzły systemu operacyjnego Linux. W poniższym przykładzie węzły systemu Windows są skażone.
Stosowanie defektu do nowego klastra
Jeśli utworzysz również nowy klaster, uruchom następujące polecenie, aby utworzyć pulę węzłów systemu Windows z defektem. Jeśli masz istniejący klaster, do którego chcesz dodać pulę węzłów z defektem, zobacz następny przykład, który używa New-AksHciNodePool
polecenia .
New-AksHciCluster -name mycluster -nodePoolName taintnp -nodeCount 1 -osType Windows -osSku Windows2022 -taints sku=Windows:NoSchedule
Dodawanie skażonej puli węzłów do istniejącego klastra
Aby dodać skażoną pulę węzłów do istniejącego klastra, uruchom następujące polecenie:
New-AksHciNodePool -clusterName <cluster-name> -nodePoolNAme taintnp -count 1 -osType Windows -osSku Windows2022 -taints sku=Windows:NoSchedule
Aby sprawdzić, czy pula węzłów została pomyślnie wdrożona za pomocą narzędzia taint, uruchom następujące polecenie:
Get-AksHciNodePool -clusterName <cluster-name> -name taintnp
Przykładowe wyjście:
Status : {Phase, Details}
ClusterName : mycluster
NodePoolName : taintnp
Version : v1.20.7-kvapkg.1
OsType : Windows
NodeCount : 0
VmSize : Standard_K8S3_v1
Phase : Deployed
Taints : {sku=Windows:NoSchedule}
Określanie tolerancji dla zasobnika
Tolerancję zasobnika można określić w specyfikacji YAML zasobnika. Poniższa tolerancja "pasuje" do defektu utworzonego kubectl
przez linię skażoną pokazaną w poprzednim przykładzie. Wynikiem jest to, że zasobnik z tolerancją może być zaplanowany na skażone węzły.
tolerations:
- key: node.kubernetes.io/os
operator: Equal
value: Windows
effect: NoSchedule
Kroki opisane w tej sekcji działają dobrze, jeśli masz kontrolę nad wdrażaną specyfikacją zasobnika. Jednak w niektórych przypadkach użytkownicy mają wstępnie istniejącą dużą liczbę wdrożeń dla kontenerów systemu Linux, a także ekosystem typowych konfiguracji, takich jak wykresy programu Helm społeczności. Nie będziesz mieć dostępu do specyfikacji zasobnika, chyba że chcesz pobrać i edytować wykres.
Jeśli te wykresy programu Helm zostaną wdrożone w środowisku klastra mieszanego z węzłami roboczymi systemu Linux i Windows, zasobniki aplikacji kończą się niepowodzeniem z powodu błędu "ImagePullBackOff". Na przykład:
kubectl get pods
NAMESPACE NAME READY STATUS RESTARTS AGE
default nginx-deployment-558fc78868-795dp 0/1 ImagePullBackOff 0 6m24s
default nginx-deployment-6b474476c4-gpb77 0/1 ImagePullBackOff 0 11m
W tym przypadku możesz użyć defektów , aby pomóc w tym. Węzły systemu Windows Server mogą być skażone parą node.kubernetes.io/os=windows:NoSchedule
klucz-wartość .
Aby uzyskać więcej informacji na temat defektów i tolerancji, zobacz Taints and Tolerations (Taints and Tolerations).
Następne kroki
W tym przewodniku z instrukcjami przedstawiono sposób dodawania selektorów węzłów lub defektów i tolerancji do klastrów Kubernetes przy użyciu narzędzia kubectl. Następnie możesz wykonać następujące czynności: