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
, NoSchedule
i 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ślitolerationSeconds
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 taintnp
moż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
- Używanie etykiet w klastrze usługi AKS z obsługą usługi Azure Arc.