Udostępnij za pośrednictwem


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, 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.

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

  1. 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
    
  2. Sprawdź stan puli węzłów.

  3. Sprawdź, czy właściwość taint jest ustawiona w węźle.

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

  1. 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ślenia sku=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
    
  2. Sprawdź stan puli węzłów.

  3. Sprawdź, czy parametr taint został ustawiony w węźle.

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 polecenie az --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 lub az 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

  1. Zarejestruj flagę NodeInitializationTaintsPreview funkcji przy użyciu az feature register polecenia .

    az feature register --namespace "Microsoft.ContainerService" --name "NodeInitializationTaintsPreview"
    

    Wyświetlenie stanu Zarejestrowane trwa kilka minut.

  2. Sprawdź stan rejestracji przy użyciu az feature show polecenia .

    az feature show --namespace "Microsoft.ContainerService" --name "NodeInitializationTaintsPreview"
    
  3. 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

  1. Utwórz klaster z parametrem inicjalizacji węzła przy użyciu az aks create polecenia i parametru --node-initialization-taints w celu określenia sku=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
    
  2. Sprawdź stan puli węzłów.

  3. Sprawdź, czy właściwość taint jest ustawiona w węźle.

Aktualizowanie klastra w celu dodania inicjalizacji węzła

  1. Zaktualizuj klaster, aby dodać parametr inicjowania węzła przy użyciu az aks update polecenia i parametru --node-initialization-taints w celu określenia sku=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"
    
  2. Sprawdź stan puli węzłów.

  3. Sprawdź, czy właściwość taint jest ustawiona w węźle.

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 jest Creating węzłami o określonej wartości nodeTaints:

    [
      {
        ...
        "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 jest Creating węzłami o określonym parametrze nodeInitializationTaints:

    [
      {
        ...
        "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 parametr Taints:

    [
        ...
        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

  1. 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.

  2. 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 obszarze Taints:

    [
        ...
        Name: <node-pool-name>
        ...
        Taints: 
        ...
        ],
        ...
     ...
    ]
    

Następne kroki