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ę Azure 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 systemu operacyjnego mieszanego. W tym przewodniku z instrukcjami dowiesz się, jak zapewnić, że aplikacja zostanie zaplanowana w odpowiednim systemie operacyjnym hosta przy użyciu selektorów węzłów lub za pomocą taints i tolerancji.

W tym artykule założono podstawową wiedzę 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łączonej przez usługę Arc.

Selektory węzłów

Selektor węzłów to proste pole w specyfikacji YAML zasobnika, które ogranicza harmonogram 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 poniższych przykładach:

kubernetes.io/os = Windows

Lub

kubernetes.io/os = Linux

Aby uzyskać więcej informacji na temat węzłówWybieracze, zobacz selektory węzłów.

Taints i tolerancje

Taints i tolerancje współpracują ze sobą, aby upewnić się, że zasobniki nie są zaplanowane na węzłach przypadkowo. 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 można zastosować podczas tworzenia za pomocą polecenia New-AksHciNodePool lub New-AksHciCluster. Za pomocą tych poleceń można również za pomocą tych poleceń zaciemniać węzły systemu operacyjnego Linux. W poniższym przykładzie węzły systemu Windows są skażone.

Stosowanie taint do nowego klastra

Jeśli utworzysz również nowy klaster, uruchom następujące polecenie, aby utworzyć pulę węzłów systemu Windows z taint. Jeśli masz istniejący klaster, do którego chcesz dodać pulę węzłów z taint, 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 niezamierzonej puli węzłów do istniejącego klastra

Aby dodać 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 dane wyjściowe:

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

Można określić tolerancję zasobnika w specyfikacji ZASOBNIKA YAML. Poniższa tolerancja "pasuje" do błędu utworzonego kubectl przez linię taint pokazaną w poprzednim przykładzie. Wynikiem jest to, że zasobnik z tolerancją może zaplanować na zaciemnianych węzłach.

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

Kroki opisane w tej sekcji działają prawidłowo, 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 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ć taints , aby pomóc w tym. Węzły systemu Windows Server można zastosować do pary node.kubernetes.io/os=windows:NoScheduleklucz-wartość .

Aby uzyskać więcej informacji na temat taints 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 taints i tolerancji do klastrów Kubernetes przy użyciu narzędzia kubectl. Następnie możesz wykonać następujące czynności: