Dostosowywanie aplikacji do klastrów Kubernetes z mieszanym systemem operacyjnym przy użyciu selektorów węzłów lub węzłów i tolerancji

Dotyczy: Azure Stack HCI, wersje 21H2 i 20H2; Windows Server 2022 Datacenter, Windows Server 2019 Datacenter

Azure Kubernetes Service on Azure Stack HCI umożliwia uruchamianie klastrów Kubernetes z węzłami systemów Linux i Windows, ale wymaga niewielkich zmian w aplikacjach do użycia w tych klastrach z mieszanym systemem operacyjnym. Z tego przewodnika dowiesz się, jak upewnić się, że aplikacja zostanie zaplanowana w odpowiednim hoście systemu operacyjnego przy użyciu selektorów węzłów lub awarii i tolerancji.

W tym przewodniku założono podstawową wiedzę na temat pojęć związanych z platformą Kubernetes. Aby uzyskać więcej informacji, zobacz Kubernetes core concepts for Azure Kubernetes Service on Azure Stack HCI (Podstawowepojęcia dotyczące rozwiązania Kubernetes dla Azure Kubernetes Service on Azure Stack HCI ).

Selektor węzłów

Selektor węzłów to proste pole w specyfikacji zasobnika YAML, które ogranicza zaplanowanie zasobników tylko na węzłach w dobrej kondycji zgodnych z systemem operacyjnym. W specyfikacji zasobnika YAML określ wartość - Windows lub Linux, jak nodeSelector pokazano w poniższych przykładach.

kubernetes.io/os = Windows

Lub

kubernetes.io/os = Linux

Aby uzyskać więcej informacji na temat selektorów węzłów, odwiedź stronę selektorów węzłów.

Taints i tolerancje

Taints i tolerancje współpracują ze sobą, aby upewnić się, że zasobniki nie są zaplanowane w węzłach w sposób niezamierzony. Węzeł może zostać "zmyty", aby nie akceptować zasobników, które nie są jawnie tolerowane przez "tolerancję" w specyfikacji ZASOBNIKA YAML.

Windows systemu operacyjnego w układzie AKS na platformie Azure Stack HCI mogą zostać zamiecione po utworzeniu za pomocą polecenia New-AksHciNodePool lub polecenia New-AksHciCluster. Za pomocą tych poleceń można również zaciemniać węzły systemu operacyjnego Linux. W poniższym przykładzie użyto Windows.

Uruchom następujące polecenie, aby utworzyć pulę Windows węzła z awarii, jeśli tworzysz również nowy klaster. Jeśli masz istniejący klaster, do którego chcesz dodać pulę węzłów z dostępem do usługi , przejdź do następnego przykładu, który używa New-AksHciNodePool polecenia .

New-AksHciCluster -name mycluster -nodePoolName taintnp -nodeCount 1 -osType windows -taints sku=Windows:NoSchedule

Aby dodać pulę węzłów z nieskabamiacymi węzłami do istniejącego klastra, uruchom następujące polecenie.

New-AksHciNodePool -clusterName <cluster-name> -nodePoolNAme taintnp -count 1 -osType windows -taints sku=Windows:NoSchedule

Uruchom następujące polecenie, aby sprawdzić, czy pula węzłów została pomyślnie wdrożona z awarii.

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}

Tolerancję dla zasobnika określa się w specyfikacji zasobnika YAML. Następująca tolerancja "pasuje" do usterek utworzonych przez powyższy wiersz omdlenia, dlatego zasobnik z tolerancją będzie mógł zaplanować na węzłach, które zostały kubectl narysowane.

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

Kroki opisane w tej sekcji będą działać dobrze, jeśli masz kontrolę nad wdrażaną specyfikacją zasobnika. Jednak w niektórych przypadkach użytkownicy mają już 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ć wykres i go edytować. W przypadku wdrożenia tych wykresów programu Helm w środowisku klastra mieszanego z węzłami procesów roboczych systemów Linux i Windows zasobniki aplikacji nie powiodą się z błędem "ImagePullBackOff", na przykład:

C:\>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 wystąpieniu należy przyjrzeć się temu, korzystając z funkcji taints: węzły serwera Windows można za pomocą następującej pary klucz-wartość node.kubernetes.io/os=windows:NoSchedule

Aby uzyskać więcej informacji na temat najechań i tolerancji, odwiedź strony Taints and Tolerations (Taints i Tolerancje).

Następne kroki

W tym przewodniku po tym przewodniku popisano sposób dodawania selektorów węzłów lub węzłów i tolerancji do klastrów Kubernetes przy użyciu narzędzia kubectl. Następnie możesz: