Udostępnij za pośrednictwem


Używanie defektów węzłów w usłudze AKS włączonej przez klaster usługi Azure Arc

Dotyczy: Azure Local, wersja 23H2

W tym artykule opisano sposób używania defektów węzłów w klastrze usługi AKS.

Omówienie

Mechanizm planowania usługi AKS jest odpowiedzialny za umieszczanie zasobników na węzłach i jest oparty na nadrzędnym harmonogramie Kubernetes, kube-scheduler. Zasobnik można ograniczyć do uruchamiania w określonych węzłach, nakazując węzłowi odrzucenie zestawu zasobników przy użyciu defektów węzłów, które współdziałają z harmonogramem usługi AKS.

Węzły działają, oznaczając węzeł tak, aby harmonogram unikał umieszczania niektórych zasobników w oznaczonych węzłach. Tolerancje można umieścić na zasobniku, aby umożliwić harmonogramowi zaplanowanie tego zasobnika w węźle z pasującym defektem. Taints i tolerancje współpracują ze sobą, aby ułatwić kontrolowanie sposobu, w jaki harmonogram umieszcza zasobniki na węzłach. Aby uzyskać więcej informacji, zobacz przykładowe przypadki użycia defektów i tolerancji.

Taints to pary klucz-wartość z efektem. Istnieją trzy wartości pola efektu podczas używania defektów węzłów: NoExecute, NoSchedulei PreferNoSchedule.

  • NoExecute: Zasobniki działające już w węźle są natychmiast eksmitowane, jeśli nie mają zgodnej tolerancji. Jeśli zasobnik ma zgodną tolerancję, może zostać wykluczony, jeśli tolerationSeconds zostanie określony.
  • NoSchedule: na tym węźle są umieszczane tylko zasobniki z pasującą tolerancją. Istniejące zasobniki nie są eksmitowane.
  • PreferNoSchedule: Harmonogram unika umieszczania żadnych zasobników, które nie mają pasującej tolerancji.

Zanim rozpoczniesz

  • W tym artykule założono, że masz istniejący klaster usługi AKS. Jeśli potrzebujesz klastra usługi AKS, możesz go utworzyć przy użyciu interfejsu wiersza polecenia platformy Azure, programu Azure PowerShell lub witryny Azure Portal.
  • Podczas tworzenia puli węzłów można dodać do niej defekty. Po dodaniu defektu wszystkie węzły w tej puli węzłów również uzyskają ten błąd.

Ważne

Należy dodać znaki lub etykiety do węzłów dla całej puli węzłów przy użyciu polecenia az aksarc nodepool. Nie zalecamy używania metody kubectl , aby zastosować defekty lub etykiety do poszczególnych węzłów w puli węzłów.

Ustawianie parametrów puli węzłów

Utwórz pulę węzłów z defektem az aksarc nodepool add za pomocą polecenia . Określ nazwę taintnp i użyj parametru --node-taints , aby określić sku=gpu:NoSchedule parametr dla parametru :

az aksarc nodepool add \
    --resource-group myResourceGroup \
    --cluster-name myAKSCluster \
    --name taintnp \
    --node-count 1 \
    --node-taints sku=gpu:NoSchedule \
    --no-wait

Sprawdź stan puli węzłów przy użyciu az aksarc nodepool list polecenia :

az aksarc nodepool list -g myResourceGroup --cluster-name myAKSCluster

Następujące przykładowe dane wyjściowe pokazują, że pula taintnp węzłów tworzy węzły o określonej wartości nodeTaints:

[
  {
    ...
    "count": 1,
    ...
    "name": "taintnp",
    ...
    "provisioningState": "Succeeded",
    ...
    "nodeTaints":  [
      "sku=gpu:NoSchedule"
    ],
    ...
  },
 ...
]

Informacje o defektach są widoczne na platformie Kubernetes na potrzeby obsługi reguł planowania dla węzłów. Harmonogram platformy Kubernetes może używać defektów i tolerancji, aby ograniczyć obciążenia, które mogą być uruchamiane w węzłach.

  • Taint jest stosowany do węzła, który wskazuje, że na nich można zaplanować tylko określone zasobniki.
  • Tolerancja jest następnie stosowana do zasobnika, który umożliwia im "tolerowanie" defektu węzła.

Ustawianie tolerancji puli węzłów

W poprzednim kroku zastosowano sku=gpu:NoSchedule defekt podczas tworzenia puli węzłów. Poniższy przykładowy manifest YAML używa tolerancji, aby umożliwić harmonogramowi Kubernetes uruchamianie zasobnika NGINX w węźle w tej puli węzłów:

Utwórz plik o nazwie nginx-toleration.yaml i skopiuj/wklej następujący przykład YAML :

apiVersion: v1
kind: Pod
metadata:
  name: mypod
spec:
  containers:
  - image: mcr.microsoft.com/oss/nginx/nginx:1.15.9-alpine
    name: mypod
    resources:
      requests:
        cpu: 100m
        memory: 128Mi
      limits:
        cpu: 1
        memory: 2G
  tolerations:
  - key: "sku"
    operator: "Equal"
    value: "gpu"
    effect: "NoSchedule"

Zaplanuj zasobnik przy kubectl apply użyciu polecenia :

kubectl apply -f nginx-toleration.yaml

Zaplanowanie zasobnika i ściągnięcie obrazu NGINX zajmuje kilka sekund.

Sprawdź stan przy użyciu kubectl describe pod polecenia :

kubectl describe pod mypod

Następujące skrócone przykładowe dane wyjściowe pokazują, że tolerancja sku=gpu:NoSchedule jest stosowana. W sekcji Zdarzenia harmonogram przypisał zasobnik do węzłamoc-lbeof1gn6x3:

[...]
Tolerations:     node.kubernetes.io/not-ready:NoExecute op=Exists for 300s
                 node.kubernetes.io/unreachable:NoExecute op=Exists for 300s
                 sku=gpu:NoSchedule
Events:
  Type    Reason     Age    From                Message
  ----    ------     ----   ----                -------
  Normal  Scheduled  54s  default-scheduler   Successfully assigned default/mypod to moc-lbeof1gn6x3
  Normal  Pulling    53s  kubelet             Pulling image "mcr.microsoft.com/oss/nginx/nginx:1.15.9-alpine"
  Normal  Pulled     48s  kubelet             Successfully pulled image "mcr.microsoft.com/oss/nginx/nginx:1.15.9-alpine" in 3.025148695s (3.025157609s including waiting)
  Normal  Created    48s  kubelet             Created container
  Normal  Started    48s  kubelet             Started container

W węzłach programu taintnpmożna zaplanować tylko zasobniki, które mają tę tolerancję. Wszystkie inne zasobniki są zaplanowane w puli węzłów nodepool1 . Jeśli tworzysz więcej pul węzłów, możesz użyć defektów i tolerancji, aby ograniczyć harmonogram zasobników w tych zasobach węzłów.

Aktualizowanie puli węzłów klastra w celu dodania defektu węzła

Zaktualizuj klaster, aby dodać defekt węzła przy użyciu az aksarc update polecenia i parametru --node-taints w celu określenia sku=gpu:NoSchedule parametru dla parametru . Wszystkie istniejące defekty są zastępowane nowymi wartościami. Stare defekty są usuwane:

az aksarc update -g myResourceGroup --cluster-name myAKSCluster --name taintnp --node-taints "sku=gpu:NoSchedule"   

Następne kroki