Nuta
Dostęp do tej strony wymaga autoryzacji. Możesz spróbować się zalogować lub zmienić katalog.
Dostęp do tej strony wymaga autoryzacji. Możesz spróbować zmienić katalogi.
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 opiera się na głównym harmonogramie Kubernetes, kube-scheduler. Można ograniczyć działanie poda do uruchamiania na określonych węzłach, dołączając pody do zestawu węzłów za pomocą koligacji węzłów lub instruując węzeł, aby odrzucił zestaw podów za pomocą taintów węzłów, które współdziałają z harmonogramem AKS.
Zanieczyszczenia węzłów działają poprzez oznaczanie węzła, tak aby harmonizator unikał umieszczania niektórych zasobników na oznaczonych węzłach. Tolerancje można umieścić na zasobniku, aby umożliwić harmonogramowi zaplanowanie tego zasobnika w węźle z pasującym skażeniem. Tainty i tolerancje współdziałają, aby ułatwić kontrolowanie, jak scheduler umieszcza zasobniki na węzłach. Aby uzyskać więcej informacji, zobacz przykładowe przypadki użycia plam i tolerancji.
Taints to pary klucz-wartość z określonym 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ślitolerationSecondszostanie określony. -
NoSchedule: Na tym węźle są umieszczane tylko pody, które mają pasującą tolerancję. Istniejące zasobniki nie są usuwane. -
PreferNoSchedule: Harmonogram unika umieszczania żadnych zasobników, które nie mają pasującej tolerancji.
Opcje skażenia węzła
Istnieją dwa typy skażeń, które można zastosować do węzłów usługi AKS: skażenia węzłów i skażenia inicjowania węzłów.
- 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.
- Inicjalizacyjne skazy węzłów są umieszczane na węźle podczas rozruchu i mają być używane tymczasowo, na przykład w scenariuszach, w których może być potrzebny dodatkowy czas na skonfigurowanie węzłów. Można usunąć defekt inicjowania węzła przy użyciu interfejsu API platformy Kubernetes i nie są one gwarantowane podczas cyklu życia węzła. Będą one wyświetlane w nowych replikach węzła, gdy jest skalowany w górę lub we wszystkich replikach po uaktualnieniu węzła. Jeśli chcesz całkowicie usunąć plamy inicjalizacji, możesz je usunąć przy użyciu interfejsu API usługi AKS po usunięciu taintów z węzłów za pomocą interfejsu API Kubernetes. Po usunięciu zanieczyszczeń inicjalizacyjnych ze specyfikacji klastra przy użyciu interfejsu API AKS, nowo utworzone węzły nie posiadają już tych zanieczyszczeń inicjalizacyjnych. Jeśli znacznik inicjalizacji jest nadal obecny na istniejących węzłach, możesz go trwale usunąć, wykonując operację aktualizacji obrazu węzła.
Uwaga
Zabrudzenia węzłów i etykiety stosowane za pomocą interfejsu API puli węzłów usługi AKS nie mogą być modyfikowane za pomocą interfejsu API platformy Kubernetes i na odwrót. Modyfikacje defektów systemowych nie są dozwolone.
Nie dotyczy to defektów inicjowania węzła.
Używanie taintów węzłów
Wymagania wstępne
W tym artykule założono, że masz istniejący klaster 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 zanieczyszczeniem węzła
Utwórz pulę węzłów z skażeniem lub oznaczeniem przy użyciu polecenia
az aks nodepool addi użyj parametru--node-taints, aby określićsku=gpu:NoScheduledla tego oznaczenia.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-waitSprawdź stan puli węzłów.
Aktualizowanie puli węzłów w celu dodania defektu węzła
Zaktualizuj pulę węzłów, aby dodać znacznik węzła za pomocą polecenia
az aks nodepool updatei użyj parametru--node-taintsw celu określeniasku=gpu:NoScheduletego znacznika.az aks nodepool update \ --resource-group $RESOURCE_GROUP_NAME \ --cluster-name $CLUSTER_NAME \ --name $NODE_POOL_NAME \ --node-taints "sku=gpu:NoSchedule" \ --no-waitSprawdź 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 z możliwością dobrowolnego wyboru. 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ą na zasadzie najlepszych starań. 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.0b3interfejsu 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. - Podczas korzystania z interfejsu API AKS można stosować tainty inicjalizacyjne tylko podczas tworzenia lub uaktualniania klastra. Jeśli używasz szablonu ARM, który spowoduje operację na poziomie klastra zarządzanego, możesz określić cechy inicjalizacyjne węzłów podczas tworzenia i aktualizowania puli węzłów. Operacje na poziomie puli agentów są blokowane, gdy
NodeInitializationTaintsznajdują się w treści żądania. - Nie można zastosować defektów inicjowania do pul węzłów systemu Windows przy użyciu interfejsu wiersza polecenia platformy Azure.
Pobierz poświadczenia do klastra
Pobierz poświadczenia dla klastra usługi AKS przy użyciu
az aks get-credentialspolecenia .az aks get-credentials --resource-group $RESOURCE_GROUP_NAME --name $CLUSTER_NAME
Zainstaluj rozszerzenie Azure CLI aks-preview
Zarejestruj lub zaktualizuj rozszerzenie aks-preview za pomocą polecenia
az extension addlubaz extension update.# Register the aks-preview extension az extension add --name aks-preview # Update the aks-preview extension az extension update --name aks-preview
Zarejestruj flagę funkcji NodeInitializationTaintsPreview
Zarejestruj flagę
NodeInitializationTaintsPreviewfunkcji przy użyciuaz feature registerpolecenia .az feature register --namespace "Microsoft.ContainerService" --name "NodeInitializationTaintsPreview"Wyświetlenie stanu Zarejestrowane trwa kilka minut.
Sprawdź stan rejestracji przy użyciu
az feature showpolecenia .az feature show --namespace "Microsoft.ContainerService" --name "NodeInitializationTaintsPreview"Gdy stan odzwierciedla Zarejestrowano, odśwież rejestrację dostawcy zasobów Microsoft.ContainerService za pomocą polecenia
az provider register.az provider register --namespace Microsoft.ContainerService
Tworzenie klastra z zanieczyszczeniem inicjacyjnym węzła
Utwórz klaster z zanieczyszczeniem inicjalizacji węzła, używając polecenia
az aks createi parametru--node-initialization-taints, aby określićsku=gpu:NoScheduledla zanieczyszczenia.Ważne
Inicjowanie węzła, które określisz, ma zastosowanie do wszystkich pul węzłów w klastrze. Aby zastosować taint inicjalizacji do określonego węzła, możesz użyć szablonu 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-keysSprawdź stan puli węzłów.
Aktualizacja klastra w celu dodania skazy inicjalizacji węzła
Zaktualizuj klaster, aby dodać taint inicjalizacji węzła przy użyciu polecenia
az aks updatei parametru--node-initialization-taintsw celu określeniasku=gpu:NoScheduledla tainta.Ważne
Podczas aktualizowania klastra z użyciem skażenia inicjalizacji węzła, skażenia te mają zastosowanie do wszystkich pul węzłów w klastrze. Jeśli węzły korzystają z zestawu skalowania maszyn wirtualnych, możesz wyświetlić aktualizacje parametrów inicjowania węzła w węźle po zaktualizowaniu modelu zestawu skalowania maszyn wirtualnych węzła (na przykład po operacji uaktualniania wersji obrazu węzła). Znaczniki inicjalizacji nie będą widoczne na węzłach, dopóki nie zostanie uruchomiona operacja, która wyzwala aktualizację modelu VMSS.
az aks update \ --resource-group $RESOURCE_GROUP_NAME \ --name $CLUSTER_NAME \ --node-init-taints "sku=gpu:NoSchedule"Sprawdź stan puli węzłów.
Sprawdź stan puli węzłów
Po zastosowaniu znaku węzła lub znaku inicjalizacji sprawdź stan puli węzłów przy użyciu polecenia
az aks nodepool list.az aks nodepool list --resource-group $RESOURCE_GROUP_NAME --cluster-name $CLUSTER_NAMEJeśli zastosowano skazy węzłów, następujące przykładowe dane wyjściowe pokazują, że
<node-pool-name>pula węzłów maCreatingwęzły 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 jestCreatingwę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ź zabrudzenia węzła i zabrudzenia inicjalizacji węzła w konfiguracji węzła przy użyciu polecenia
kubectl describe node.kubectl describe node $NODE_NAMEJeś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 ... ], ... ... ]
Ważne
Jeśli węzły korzystają z VMSS, znaki inicjacji węzła nie będą widoczne na rzeczywistych węzłach w klastrze, dopóki nie nastąpi operacja wyzwalana przez aktualizację modelu VMSS (na przykład uaktualnienie wersji Kubernetes lub uaktualnienie wersji obrazu węzła).
Usuń skazy węzłów
Usuń określone skażenie węzła
Usuń zanieczyszczenia węzłów przy użyciu polecenia
az aks nodepool update. 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 updatepolecenia . 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ń tainty inicjalizacyjne węzła przy użyciu interfejsu API Kubernetes. Jeśli usuniesz je w ten sposób, tainty pojawią się ponownie po skalowaniu lub aktualizacji węzła. Nowe węzły nadal mają skażenie inicjalizacji węzła po skalowaniu. Po aktualizacji skazy inicjalizacji węzła pojawiają się na wszystkich węzłach.
- 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ń skazy inicjalizacji z replik puli węzłów, istniejąca skaza inicjalizacji może ponownie pojawić się po uaktualnieniu wraz z jakimikolwiek nowymi skazami inicjalizacji.
Tymczasowe usunięcie zanieczyszczeń inicjalizacji węzłów
Tymczasowo usuń "tainty" inicjalizacji węzła przy użyciu polecenia
kubectl taint nodes.To polecenie usuwa defekt tylko z określonego węzła. Jeśli chcesz usunąć skazę z każdego węzła w puli węzłów, musisz uruchomić polecenie dla każdego węzła, z którego ta skaza ma zostać usunięta.
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ń skazę z węzła z użyciem interfejsu API AKS przy użyciu
az aks updatepolecenia. 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ź zabrudzenia węzła i zabrudzenia inicjalizacji węzła w konfiguracji węzła przy użyciu polecenia
kubectl describe node.kubectl describe node $NODE_NAMEJeśli usunięto skażenie węzła, następujące przykładowe dane wyjściowe pokazują, że
<node-pool-name>pula węzłów nie ma usuniętego skażenia wTaints:[ ... 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 praktykach dotyczących zaawansowanych funkcji harmonogramu AKS.
- Dowiedz się więcej o etykietach Kubernetes w dokumentacji etykiet Kubernetes.