Udostępnij za pośrednictwem


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:NoScheduleklucz-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: