Używanie defektów węzłów w klastrze usługi Azure Kubernetes Service (AKS)
W tym artykule opisano sposób używania defektów węzłów w klastrze usługi Azure Kubernetes Service (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 na określonych węzłach, dołączając zasobniki do zestawu węzłów przy użyciu koligacji węzłów lub instruując węzeł, aby odeprzeć zestaw 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.
Opcje defektu węzła
Istnieją dwa typy defektów węzłów, które można zastosować do węzłów usługi AKS: defekty węzłów i defekty inicjowania węzła.
- Defekty węzłów mają pozostać trwale w węźle na potrzeby planowania zasobników z koligacją węzła. Defekty węzłów można dodawać, aktualizować lub usuwać całkowicie tylko przy użyciu interfejsu API usługi AKS.
- Inicjalizacja węzła jest umieszczana w węźle w czasie rozruchu i ma być używana tymczasowo, na przykład w scenariuszach, w których może być potrzebny dodatkowy czas na skonfigurowanie węzłów. Synchronizację inicjowania węzła można usunąć przy użyciu interfejsu API platformy Kubernetes i nie ma gwarancji podczas cyklu życia węzła. Są one wyświetlane dopiero po skalowaniu węzła w górę lub uaktualnieniu/ponownym obrazie. Nowe węzły nadal mają synchronizację inicjowania węzła po skalowaniu. Inicjowanie węzła jest wyświetlane na wszystkich węzłach po uaktualnieniu. Jeśli chcesz całkowicie usunąć defekty inicjowania, możesz je usunąć przy użyciu interfejsu API usługi AKS po niezamierzeniu węzłów przy użyciu interfejsu API kubernetes. Po usunięciu defektów inicjowania ze specyfikacji klastra przy użyciu interfejsu API usługi AKS nowo utworzone węzły nie wymyślają tych parametrów inicjowania. Jeśli inicjalizacja jest nadal obecna w istniejących węzłach, możesz ją trwale usunąć, wykonując operację uaktualniania obrazu węzła.
Uwaga
Znaki węzłów i etykiety zastosowane przy użyciu interfejsu API puli węzłów usługi AKS nie są modyfikowalne z interfejsu API platformy Kubernetes i odwrotnie. Modyfikacje defektów systemowych nie są dozwolone.
Nie dotyczy to defektów inicjowania węzła.
Używanie defektów węzłów
Wymagania wstępne
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.
Tworzenie puli węzłów z defektem węzła
Utwórz pulę węzłów z defektem
az aks nodepool add
za pomocą polecenia i użyj parametru--node-taints
, aby określićsku=gpu:NoSchedule
parametr dla parametru .az aks nodepool add \ --resource-group $RESOURCE_GROUP_NAME \ --cluster-name $CLUSTER_NAME \ --name $NODE_POOL_NAME \ --node-count 1 \ --node-taints "sku=gpu:NoSchedule" \ --no-wait
Sprawdź stan puli węzłów.
Aktualizowanie puli węzłów w celu dodania defektu węzła
Zaktualizuj pulę węzłów, aby dodać defekt węzła przy użyciu
az aks nodepool update
polecenia i użyj parametru--node-taints
w celu określeniasku=gpu:NoSchedule
parametru dla parametru .az aks nodepool update \ --resource-group $RESOURCE_GROUP_NAME \ --cluster-name $CLUSTER_NAME \ --name $NODE_POOL_NAME \ --node-taints "sku=gpu:NoSchedule" \ --no-wait
Sprawdź stan puli węzłów.
Używanie parametrów inicjowania węzła (wersja zapoznawcza)
Ważne
Funkcje usługi AKS w wersji zapoznawczej są dostępne na zasadzie samoobsługi. Wersje zapoznawcze są udostępniane w wersji "as is" i "jako dostępne" i są wykluczone z umów dotyczących poziomu usług i ograniczonej gwarancji. Wersje zapoznawcze usługi AKS są częściowo objęte pomocą techniczną dla klientów. W związku z tym te funkcje nie są przeznaczone do użytku produkcyjnego. Aby uzyskać więcej informacji, zobacz następujące artykuły pomocy technicznej:
Wymagania wstępne i ograniczenia
- Potrzebna jest wersja
3.0.0b3
interfejsu wiersza polecenia platformy Azure lub nowsza, zainstalowana i skonfigurowana. Uruchom polecenieaz --version
, aby dowiedzieć się, jaka wersja jest używana. Jeśli konieczna będzie instalacja lub uaktualnienie, zobacz Instalowanie interfejsu wiersza polecenia platformy Azure. - W przypadku korzystania z interfejsu API usługi AKS można stosować tylko teinty inicjacyjne za pośrednictwem klastra tworzenia lub uaktualniania. W przypadku korzystania z szablonów usługi ARM można określić defekty inicjowania węzłów podczas tworzenia i aktualizowania puli węzłów.
- Nie można zastosować defektów inicjowania do pul węzłów systemu Windows przy użyciu interfejsu wiersza polecenia platformy Azure.
Pobieranie poświadczeń dla klastra
Pobierz poświadczenia dla klastra usługi AKS przy użyciu
az aks get-credentials
polecenia .az aks get-credentials --resource-group $RESOURCE_GROUP_NAME --name $CLUSTER_NAME
Instalowanie rozszerzenia interfejsu wiersza polecenia platformy aks-preview
Azure
Zarejestruj lub zaktualizuj rozszerzenie aks-preview przy użyciu
az extension add
polecenia lubaz extension update
.# Register the aks-preview extension az extension add --name aks-preview # Update the aks-preview extension az extension update --name aks-preview
Rejestrowanie flagi NodeInitializationTaintsPreview
funkcji
Zarejestruj flagę
NodeInitializationTaintsPreview
funkcji przy użyciuaz feature register
polecenia .az feature register --namespace "Microsoft.ContainerService" --name "NodeInitializationTaintsPreview"
Wyświetlenie stanu Zarejestrowane trwa kilka minut.
Sprawdź stan rejestracji przy użyciu
az feature show
polecenia .az feature show --namespace "Microsoft.ContainerService" --name "NodeInitializationTaintsPreview"
Gdy stan będzie odzwierciedlał wartość Zarejestrowano, odśwież rejestrację dostawcy zasobów Microsoft.ContainerService przy użyciu
az provider register
polecenia .az provider register --namespace Microsoft.ContainerService
Tworzenie klastra z inicjacją węzła
Utwórz klaster z parametrem inicjalizacji węzła przy użyciu
az aks create
polecenia i parametru--node-initialization-taints
w celu określeniasku=gpu:NoSchedule
parametru dla parametru .Ważne
Inicjowanie węzła, które określisz, ma zastosowanie do wszystkich pul węzłów w klastrze. Aby zastosować inicjację do określonego węzła, możesz użyć szablonu usługi ARM zamiast interfejsu wiersza polecenia.
az aks create \ --resource-group $RESOURCE_GROUP_NAME \ --name $CLUSTER_NAME \ --node-count 1 \ --node-init-taints "sku=gpu:NoSchedule" \ --generate-ssh-keys
Sprawdź stan puli węzłów.
Aktualizowanie klastra w celu dodania inicjalizacji węzła
Zaktualizuj klaster, aby dodać parametr inicjowania węzła przy użyciu
az aks update
polecenia i parametru--node-initialization-taints
w celu określeniasku=gpu:NoSchedule
parametru dla parametru .Ważne
Podczas aktualizowania klastra przy użyciu parametru inicjalizacji węzła te wartości mają zastosowanie do wszystkich pul węzłów w klastrze. Aktualizacje inicjowania węzła można wyświetlić w węźle po operacji ponownego obrazu.
az aks update \ --resource-group $RESOURCE_GROUP_NAME \ --name $CLUSTER_NAME \ --node-init-taints "sku=gpu:NoSchedule"
Sprawdź stan puli węzłów.
Sprawdzanie stanu puli węzłów
Po zastosowaniu defektu węzła lub inicjalizacji sprawdź stan puli węzłów przy użyciu
az aks nodepool list
polecenia .az aks nodepool list --resource-group $RESOURCE_GROUP_NAME --cluster-name $CLUSTER_NAME
Jeśli zastosowano defekty węzłów, następujące przykładowe dane wyjściowe pokazują, że
<node-pool-name>
pula węzłów jestCreating
węzłami o określonej wartościnodeTaints
:[ { ... "count": 1, ... "name": "<node-pool-name>", "orchestratorVersion": "1.15.7", ... "provisioningState": "Creating", ... "nodeTaints": [ "sku=gpu:NoSchedule" ], ... }, ... ]
W przypadku zastosowania parametrów inicjalizacji węzła następujące przykładowe dane wyjściowe pokazują, że
<node-pool-name>
pula węzłów jestCreating
węzłami o określonym parametrzenodeInitializationTaints
:[ { ... "count": 1, ... "name": "<node-pool-name>", "orchestratorVersion": "1.15.7", ... "provisioningState": "Creating", ... "nodeInitializationTaints": [ "sku=gpu:NoSchedule" ], ... }, ... ]
Sprawdź, czy właściwość taint jest ustawiona w węźle
Sprawdź defekty węzła i inicjację węzła w konfiguracji węzła
kubectl describe node
przy użyciu polecenia .kubectl describe node $NODE_NAME
Jeśli zastosowano defekty węzłów, następujące przykładowe dane wyjściowe pokazują, że
<node-pool-name>
pula węzłów ma określony parametrTaints
:[ ... Name: <node-pool-name> ... Taints: sku=gpu:NoSchedule ... ], ... ... ]
Usuwanie defektów węzłów
Usuwanie określonego węzła
Usuń defekty węzłów przy użyciu
az aks nodepool update
polecenia . Następujące przykładowe polecenie usuwa"sku=gpu:NoSchedule"
defekt węzła z puli węzłów.az aks nodepool update \ --cluster-name $CLUSTER_NAME \ --name $NODE_POOL_NAME \ --resource-group $RESOURCE_GROUP_NAME \ --node-taints "sku=gpu:NoSchedule"
Usuń wszystkie defekty węzłów
Usuń wszystkie defekty węzłów z puli węzłów przy użyciu
az aks nodepool update
polecenia . Poniższe przykładowe polecenie usuwa wszystkie defekty węzłów z puli węzłów.az aks nodepool update \ --cluster-name $CLUSTER_NAME \ --resource-group $RESOURCE_GROUP_NAME \ --name $NODE_POOL_NAME \ --node-taints ""
Usuwanie defektów inicjowania węzła
Dostępne są następujące opcje usuwania defektów inicjowania węzła z węzła:
- Tymczasowo usuń inicjacje inicjowania węzła przy użyciu interfejsu API platformy Kubernetes. Jeśli usuniesz je w ten sposób, taints pojawi się ponownie po skalowaniu lub uaktualnieniu węzła. Nowe węzły nadal mają synchronizację inicjowania węzła po skalowaniu. Inicjowanie węzła jest wyświetlane na wszystkich węzłach po uaktualnieniu.
- Usuń trwałe defekty inicjowania węzła przez niezamierzenie węzła przy użyciu interfejsu API platformy Kubernetes, a następnie usunięcie defektu przy użyciu interfejsu API usługi AKS. Po usunięciu parametrów inicjalizacji ze specyfikacji klastra przy użyciu interfejsu API usługi AKS nowo utworzone węzły po operacjach ponownego obrazu nie mają już zaświadczeń inicjowania.
Po usunięciu wszystkich wystąpień inicjalizacji z replik puli węzłów istniejące zdarzenie inicjalizacji może pojawić się ponownie po uaktualnieniu z wszelkimi nowymi defektami inicjalizacji.
Tymczasowe usuwanie inicjalizacji węzłów
Tymczasowe usuwanie parametrów inicjalizacji węzła
kubectl taint nodes
przy użyciu polecenia .To polecenie usuwa defekt tylko z określonego węzła. Jeśli chcesz usunąć defekt z każdego węzła w puli węzłów, musisz uruchomić polecenie dla każdego węzła, z którego ma zostać usunięta taint.
kubectl taint nodes $NODE_POOL_NAME sku=gpu:NoSchedule-
Po usunięciu inicjowanie węzła pojawia się ponownie po przeprowadzeniu skalowania lub uaktualniania węzłów.
Trwałe usuwanie defektów inicjowania węzła
Wykonaj kroki opisane w temacie Tymczasowe usuwanie defektów inicjowania węzła, aby usunąć defekt inicjowania węzła przy użyciu interfejsu API platformy Kubernetes.
Usuń defekt z węzła przy użyciu interfejsu API usługi AKS przy użyciu
az aks update
polecenia . To polecenie usuwa inicjację węzła z każdego węzła w klastrze.az aks update \ --resource-group $RESOURCE_GROUP_NAME \ --name $CLUSTER_NAME \ --node-init-taints ""
Sprawdź, czy defekt został usunięty z węzła
Sprawdź defekty węzła i inicjację węzła w konfiguracji węzła
kubectl describe node
przy użyciu polecenia .kubectl describe node $NODE_NAME
Jeśli usunięto defekt węzła, następujące przykładowe dane wyjściowe pokazują, że
<node-pool-name>
pula węzłów nie ma usuniętej defektu w obszarzeTaints
:[ ... Name: <node-pool-name> ... Taints: ... ], ... ... ]
Następne kroki
- Dowiedz się więcej o przykładowych przypadkach użycia dla defektów i tolerancji.
- Dowiedz się więcej o najlepszych rozwiązaniach dotyczących zaawansowanych funkcji harmonogramu usługi AKS.
- Dowiedz się więcej o etykietach kubernetes w dokumentacji etykiet Kubernetes.
Azure Kubernetes Service