Tworzenie wielu puli węzłów dla klastra w usłudze Azure Kubernetes Service (AKS) i zarządzanie nimi

W Azure Kubernetes Service (AKS) węzły tej samej konfiguracji są grupowane razem w pule węzłów. Te pule węzłów zawierają bazowe maszyny wirtualne, które uruchamiają aplikacje. Początkowa liczba węzłów i ich rozmiar (SKU) jest definiowana podczas tworzenia klastra usługi AKS, który tworzy pulę węzłów systemowych. Aby obsługiwać aplikacje, które mają różne wymagania dotyczące zasobów obliczeniowych lub magazynu, możesz utworzyć dodatkowe pule węzłów użytkownika. Pule węzłów systemu służą przede wszystkim do hostowania krytycznych zasobników systemu, takich jak CoreDNS i tunnelfront. Pule węzłów użytkownika służą do podstawowego celu hostowania zasobników aplikacji. Jednak zasobniki aplikacji można zaplanować w pulach węzłów systemowych, jeśli chcesz mieć tylko jedną pulę w klastrze usługi AKS. Pule węzłów użytkownika służą do umieszczania zasobników specyficznych dla aplikacji. Na przykład użyj tych dodatkowych pul węzłów użytkownika, aby zapewnić procesory GPU dla aplikacji intensywnie korzystających z obliczeń lub dostęp do magazynu SSD o wysokiej wydajności.

Uwaga

Ta funkcja umożliwia wyższą kontrolę nad tworzeniem wielu pul węzłów i zarządzaniem nimi. W związku z tym do tworzenia/aktualizowania/usuwania wymagane są oddzielne polecenia. Wcześniej operacje klastra za pośrednictwem az aks create interfejsu API zarządzanegocluster i az aks update były jedynymi opcjami zmiany płaszczyzny sterowania i pojedynczej puli węzłów. Ta funkcja uwidacznia oddzielny zestaw operacji dla pul agentów za pośrednictwem interfejsu API puli agentów i wymaga użycia az aks nodepool zestawu poleceń do wykonywania operacji w pojedynczej puli węzłów.

W tym artykule przedstawiono sposób tworzenia wielu pul węzłów i zarządzania nimi w klastrze usługi AKS.

Zanim rozpoczniesz

Interfejs wiersza polecenia platformy Azure w wersji 2.2.0 lub nowszej jest zainstalowany i skonfigurowany. 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.

Ograniczenia

Podczas tworzenia klastrów usługi AKS i zarządzania nimi obowiązują następujące ograniczenia, które obsługują wiele pul węzłów:

  • Zobacz Limity przydziału, ograniczenia rozmiaru maszyny wirtualnej i dostępność regionu w Azure Kubernetes Service (AKS).
  • Pule węzłów systemowych można usunąć, pod warunkiem że istnieje inna pula węzłów systemu, która ma zostać utworzona w klastrze usługi AKS.
  • Pule systemu muszą zawierać co najmniej jeden węzeł, a pule węzłów użytkownika mogą zawierać zero lub więcej węzłów.
  • Klaster usługi AKS musi używać modułu równoważenia obciążenia jednostki SKU w warstwie Standardowa do korzystania z wielu pul węzłów. Ta funkcja nie jest obsługiwana w przypadku modułów równoważenia obciążenia jednostki SKU w warstwie Podstawowa.
  • Klaster usługi AKS musi używać zestawów skalowania maszyn wirtualnych dla węzłów.
  • Nie można zmienić rozmiaru maszyny wirtualnej puli węzłów po jej utworzeniu.
  • Nazwa puli węzłów może zawierać tylko małe litery alfanumeryczne i musi zaczynać się od małej litery. W przypadku pul węzłów systemu Linux długość musi zawierać się od 1 do 12 znaków, w przypadku pul węzłów systemu Windows długość musi zawierać się od 1 do 6 znaków.
  • Wszystkie pule węzłów muszą znajdować się w tej samej sieci wirtualnej.
  • Podczas tworzenia wielu pul węzłów w czasie tworzenia klastra wszystkie wersje platformy Kubernetes używane przez pule węzłów muszą być zgodne z wersją ustawioną dla płaszczyzny sterowania. Można to zaktualizować po aprowizacji klastra przy użyciu operacji puli węzłów.

Tworzenie klastra AKS

Ważne

Jeśli uruchamiasz jedną pulę węzłów systemowych dla klastra usługi AKS w środowisku produkcyjnym, zalecamy użycie co najmniej trzech węzłów dla puli węzłów.

Aby rozpocząć pracę, utwórz klaster usługi AKS z jedną pulą węzłów. W poniższym przykładzie użyto polecenia az group create , aby utworzyć grupę zasobów o nazwie myResourceGroup w regionie eastus . Klaster usługi AKS o nazwie myAKSCluster jest następnie tworzony przy użyciu polecenia az aks create .

Uwaga

Podstawowa jednostka SKU modułu równoważenia obciążenia nie jest obsługiwana w przypadku korzystania z wielu pul węzłów. Domyślnie klastry usługi AKS są tworzone przy użyciu standardowej jednostki SKU modułu równoważenia obciążenia z poziomu interfejsu wiersza polecenia platformy Azure i Azure Portal.

# Create a resource group in East US
az group create --name myResourceGroup --location eastus

# Create a basic single-node AKS cluster
az aks create \
    --resource-group myResourceGroup \
    --name myAKSCluster \
    --vm-set-type VirtualMachineScaleSets \
    --node-count 2 \
    --generate-ssh-keys \
    --load-balancer-sku standard

Utworzenie klastra trwa kilka minut.

Uwaga

Aby zapewnić niezawodne działanie klastra, należy uruchomić co najmniej 2 (dwa) węzły w domyślnej puli węzłów, ponieważ podstawowe usługi systemowe działają w tej puli węzłów.

Gdy klaster jest gotowy, użyj polecenia az aks get-credentials , aby pobrać poświadczenia klastra do użycia z poleceniem kubectl:

az aks get-credentials --resource-group myResourceGroup --name myAKSCluster

Dodawanie puli węzłów

Klaster utworzony w poprzednim kroku ma jedną pulę węzłów. Dodajmy drugą pulę węzłów przy użyciu polecenia az aks nodepool add . Poniższy przykład tworzy pulę węzłów o nazwie mynodepool , która uruchamia 3 węzły:

az aks nodepool add \
    --resource-group myResourceGroup \
    --cluster-name myAKSCluster \
    --name mynodepool \
    --node-count 3

Uwaga

Nazwa puli węzłów musi zaczynać się od małej litery i może zawierać tylko znaki alfanumeryczne. W przypadku pul węzłów systemu Linux długość musi zawierać się od 1 do 12 znaków, w przypadku pul węzłów systemu Windows długość musi zawierać się od 1 do 6 znaków.

Aby wyświetlić stan pul węzłów, użyj polecenia az aks node pool list i określ grupę zasobów i nazwę klastra:

az aks nodepool list --resource-group myResourceGroup --cluster-name myAKSCluster

Poniższe przykładowe dane wyjściowe pokazują, że pula mynodepool została pomyślnie utworzona z trzema węzłami w puli węzłów. Po utworzeniu klastra usługi AKS w poprzednim kroku utworzono domyślną pulę węzłów1 z liczbą węzłów 2.

[
  {
    ...
    "count": 3,
    ...
    "name": "mynodepool",
    "orchestratorVersion": "1.15.7",
    ...
    "vmSize": "Standard_DS2_v2",
    ...
  },
  {
    ...
    "count": 2,
    ...
    "name": "nodepool1",
    "orchestratorVersion": "1.15.7",
    ...
    "vmSize": "Standard_DS2_v2",
    ...
  }
]

Porada

Jeśli podczas dodawania puli węzłów nie określono rozmiaru maszyny wirtualnej , domyślnym rozmiarem jest Standard_D2s_v3 dla pul węzłów systemu Windows i Standard_DS2_v2 dla pul węzłów systemu Linux. Jeśli nie określono elementu OrchestratorVersion , domyślnie jest to ta sama wersja co płaszczyzna sterowania.

Dodawanie puli węzłów ARM64

Procesor ARM64 zapewnia niskie moc obliczeniową dla obciążeń Kubernetes. Aby utworzyć pulę węzłów ARM64, musisz wybrać maszynę wirtualną z serii Dpsv5, Dplsv5 lub Epsv5 .

Użyj az aks nodepool add polecenia , aby dodać pulę węzłów ARM64.

az aks nodepool add \
    --resource-group myResourceGroup \
    --cluster-name myAKSCluster \
    --name armpool \
    --node-count 3 \
    --node-vm-size Standard_Dpds_v5

Dodawanie puli węzłów z unikatową podsiecią

Obciążenie może wymagać podzielenia węzłów klastra na oddzielne pule na potrzeby izolacji logicznej. Ta izolacja może być obsługiwana z oddzielnymi podsieciami dedykowanymi dla każdej puli węzłów w klastrze. Może to dotyczyć wymagań, takich jak brak ciągłej przestrzeni adresowej sieci wirtualnej w celu podziału między pule węzłów.

Uwaga

Upewnij się, że używasz wersji interfejsu wiersza polecenia platformy Azure lub nowszej 2.35.0 .

Ograniczenia

  • Wszystkie podsieci przypisane do pul węzłów muszą należeć do tej samej sieci wirtualnej.
  • Zasobniki systemowe muszą mieć dostęp do wszystkich węzłów/zasobników w klastrze, aby zapewnić krytyczne funkcje, takie jak rozpoznawanie nazw DNS i tunelowanie dzienników kubectl/exec/port-forward proxy.
  • Jeśli rozszerzysz sieć wirtualną po utworzeniu klastra, musisz zaktualizować klaster (wykonać dowolną operację klastra zarządzanego, ale operacje puli węzłów nie są liczone) przed dodaniem podsieci poza oryginalną cidr. Usługa AKS spowoduje błąd podczas dodawania puli agentów, choć pierwotnie ją zezwoliliśmy. aks-preview Rozszerzenie interfejsu wiersza polecenia platformy Azure (wersja 0.5.66+) obsługuje teraz uruchamianie az aks update -g <resourceGroup> -n <clusterName> bez żadnych opcjonalnych argumentów. To polecenie wykona operację aktualizacji bez wprowadzania żadnych zmian, które mogą odzyskać klaster zablokowany w stanie niepowodzenia.
  • W klastrach z platformą Kubernetes w wersji < 1.23.3 usługa kube-proxy będzie prowadzić do ruchu SNAT z nowych podsieci, co może spowodować usunięcie pakietów przez usługę Azure Network Policy.
  • Węzły systemu Windows będą kierować ruch SNAT do nowych podsieci do momentu ponownego odtworzenia puli węzłów.
  • Wewnętrzne moduły równoważenia obciążenia są domyślne dla jednej z podsieci puli węzłów (zwykle pierwsza podsieć puli węzłów podczas tworzenia klastra). Aby zastąpić to zachowanie, możesz jawnie określić podsieć modułu równoważenia obciążenia przy użyciu adnotacji.

Aby utworzyć pulę węzłów z dedykowaną podsiecią, przekaż identyfikator zasobu podsieci jako dodatkowy parametr podczas tworzenia puli węzłów.

az aks nodepool add \
    --resource-group myResourceGroup \
    --cluster-name myAKSCluster \
    --name mynodepool \
    --node-count 3 \
    --vnet-subnet-id <YOUR_SUBNET_RESOURCE_ID>

Uaktualnianie puli węzłów

Uwaga

Operacje uaktualniania i skalowania w klastrze lub puli węzłów nie mogą wystąpić jednocześnie, jeśli zostanie zwrócony błąd. Zamiast tego każdy typ operacji musi zostać ukończony w zasobie docelowym przed następnym żądaniem dla tego samego zasobu. Przeczytaj więcej na ten temat w naszym przewodniku rozwiązywania problemów.

Polecenia w tej sekcji wyjaśniają, jak uaktualnić jedną określoną pulę węzłów. Relacja między uaktualnieniem wersji platformy Kubernetes płaszczyzny sterowania i puli węzłów jest objaśniona w poniższej sekcji.

Uwaga

Wersja obrazu systemu operacyjnego puli węzłów jest powiązana z wersją klastra Kubernetes. Po uaktualnieniu klastra uzyskasz tylko uaktualnienia obrazu systemu operacyjnego.

Ponieważ w tym przykładzie istnieją dwie pule węzłów, musimy użyć polecenia az aks nodepool upgrade , aby uaktualnić pulę węzłów. Aby wyświetlić dostępne uaktualnienia, użyj polecenia az aks get-upgrades

az aks get-upgrades --resource-group myResourceGroup --name myAKSCluster

Uaktualnijmy pulę mynodepool. Użyj polecenia az aks nodepool upgrade , aby uaktualnić pulę węzłów, jak pokazano w poniższym przykładzie:

az aks nodepool upgrade \
    --resource-group myResourceGroup \
    --cluster-name myAKSCluster \
    --name mynodepool \
    --kubernetes-version KUBERNETES_VERSION \
    --no-wait

Wyświetl ponownie stan pul węzłów przy użyciu polecenia az aks node pool list . W poniższym przykładzie pokazano, że pula mynodepool znajduje się w stanie Uaktualnianie do KUBERNETES_VERSION:

az aks nodepool list -g myResourceGroup --cluster-name myAKSCluster
[
  {
    ...
    "count": 3,
    ...
    "name": "mynodepool",
    "orchestratorVersion": "KUBERNETES_VERSION",
    ...
    "provisioningState": "Upgrading",
    ...
    "vmSize": "Standard_DS2_v2",
    ...
  },
  {
    ...
    "count": 2,
    ...
    "name": "nodepool1",
    "orchestratorVersion": "1.15.7",
    ...
    "provisioningState": "Succeeded",
    ...
    "vmSize": "Standard_DS2_v2",
    ...
  }
]

Uaktualnienie węzłów do określonej wersji trwa kilka minut.

Najlepszym rozwiązaniem jest uaktualnienie wszystkich pul węzłów w klastrze usługi AKS do tej samej wersji rozwiązania Kubernetes. Domyślnym zachowaniem programu az aks upgrade jest uaktualnienie wszystkich pul węzłów wraz z płaszczyzną sterowania w celu osiągnięcia tego wyrównania. Możliwość uaktualnienia poszczególnych pul węzłów umożliwia przeprowadzenie uaktualnienia stopniowego i zaplanowanie zasobników między pulami węzłów w celu utrzymania czasu działania aplikacji w ramach powyższych ograniczeń.

Uaktualnianie płaszczyzny sterowania klastrem z wieloma pulami węzłów

Uwaga

Platforma Kubernetes używa standardowego schematu przechowywania wersji semantycznych . Numer wersji jest wyrażony jako x.y.z, gdzie x jest wersją główną, y jest wersją pomocniczą, a z jest wersją poprawki. Na przykład w wersji 1.12.6 1 jest wersją główną, 12 jest wersją pomocniczą, a 6 jest wersją poprawki. Wersja platformy Kubernetes płaszczyzny sterowania i początkowej puli węzłów są ustawiane podczas tworzenia klastra. Wszystkie dodatkowe pule węzłów mają ustawioną wersję rozwiązania Kubernetes po dodaniu ich do klastra. Wersje platformy Kubernetes mogą się różnić między pulami węzłów, a także między pulą węzłów a płaszczyzną sterowania.

Klaster usługi AKS ma dwa obiekty zasobów klastra ze skojarzonymi wersjami platformy Kubernetes.

  1. Wersja platformy Kubernetes płaszczyzny sterowania klastra.
  2. Pula węzłów z wersją platformy Kubernetes.

Płaszczyzna sterowania jest mapowa na jedną lub wiele pul węzłów. Zachowanie operacji uaktualniania zależy od tego, które polecenie interfejsu wiersza polecenia platformy Azure jest używane.

Uaktualnienie płaszczyzny sterowania usługi AKS wymaga użycia polecenia az aks upgrade. To polecenie uaktualnia wersję płaszczyzny sterowania i wszystkie pule węzłów w klastrze.

az aks upgrade Wydanie polecenia z flagą --control-plane-only uaktualnia tylko płaszczyznę sterowania klastrem. Żadna ze skojarzonych pul węzłów w klastrze nie zostanie zmieniona.

Uaktualnienie poszczególnych pul węzłów wymaga użycia polecenia az aks nodepool upgrade. To polecenie uaktualnia tylko docelową pulę węzłów z określoną wersją platformy Kubernetes

Reguły weryfikacji uaktualnień

Prawidłowe uaktualnienia platformy Kubernetes dla płaszczyzny sterowania klastra i pul węzłów są weryfikowane przez następujące zestawy reguł.

  • Reguły dotyczące prawidłowych wersji uaktualniania pul węzłów:

    • Wersja puli węzłów musi mieć taką samą wersję główną jak płaszczyzna sterowania.
    • Wersja pomocnicza puli węzłów musi należeć do dwóch wersji pomocniczych wersji płaszczyzny sterowania.
    • Wersja puli węzłów nie może być większa niż wersja kontroli major.minor.patch .
  • Reguły przesyłania operacji uaktualniania:

    • Nie można obniżyć poziomu płaszczyzny sterowania ani wersji platformy Kubernetes puli węzłów.
    • Jeśli nie określono wersji platformy Kubernetes puli węzłów, zachowanie zależy od używanego klienta. Deklaracja w szablonach Resource Manager powraca do istniejącej wersji zdefiniowanej dla puli węzłów, jeśli jest używana, jeśli żadna z nich nie jest ustawiona, wersja płaszczyzny sterowania jest używana do powrotu.
    • W danym momencie można uaktualnić lub skalować płaszczyznę sterowania lub pulę węzłów. Nie można jednocześnie przesyłać wielu operacji na jednej płaszczyźnie sterowania lub zasobie puli węzłów.

Ręczne skalowanie puli węzłów

W miarę zmiany zapotrzebowania na obciążenie aplikacji może być konieczne skalowanie liczby węzłów w puli węzłów. Liczbę węzłów można skalować w górę lub w dół.

Aby skalować liczbę węzłów w puli węzłów, użyj polecenia az aks node pool scale . Poniższy przykład skaluje liczbę węzłów w puli mynodepool do 5:

az aks nodepool scale \
    --resource-group myResourceGroup \
    --cluster-name myAKSCluster \
    --name mynodepool \
    --node-count 5 \
    --no-wait

Ponownie wyświetl stan pul węzłów za pomocą polecenia az aks node pool list . Poniższy przykład pokazuje, że pula mynodepool znajduje się w stanie Skalowanie z nową liczbą 5 węzłów:

az aks nodepool list -g myResourceGroup --cluster-name myAKSCluster
[
  {
    ...
    "count": 5,
    ...
    "name": "mynodepool",
    "orchestratorVersion": "1.15.7",
    ...
    "provisioningState": "Scaling",
    ...
    "vmSize": "Standard_DS2_v2",
    ...
  },
  {
    ...
    "count": 2,
    ...
    "name": "nodepool1",
    "orchestratorVersion": "1.15.7",
    ...
    "provisioningState": "Succeeded",
    ...
    "vmSize": "Standard_DS2_v2",
    ...
  }
]

Ukończenie operacji skalowania trwa kilka minut.

Automatyczne skalowanie określonej puli węzłów przez włączenie skalowania automatycznego klastra

Usługa AKS oferuje osobną funkcję umożliwiającą automatyczne skalowanie pul węzłów za pomocą funkcji nazywanej funkcją automatycznego skalowania klastra. Tę funkcję można włączyć dla puli węzłów z unikatowymi minimalną i maksymalną liczbą skalowania na pulę węzłów. Dowiedz się, jak używać narzędzia do automatycznego skalowania klastra na pulę węzłów.

Usuwanie puli węzłów

Jeśli pula nie jest już potrzebna, możesz ją usunąć i usunąć bazowe węzły maszyny wirtualnej. Aby usunąć pulę węzłów, użyj polecenia az aks node pool delete i określ nazwę puli węzłów. Poniższy przykład usuwa pulę mynodepool utworzoną w poprzednich krokach:

Przestroga

Po usunięciu puli węzłów usługa AKS nie wykonuje kordonu i opróżniania i nie ma opcji odzyskiwania utraty danych, które mogą wystąpić po usunięciu puli węzłów. Jeśli nie można zaplanować zasobników w innych pulach węzłów, te aplikacje staną się niedostępne. Upewnij się, że nie usuwasz puli węzłów, gdy w używanych aplikacjach nie ma kopii zapasowych danych ani możliwości uruchamiania ich w innych pulach węzłów w klastrze. Aby zminimalizować zakłócenia związane z ponownym harmonogramem zasobników aktualnie uruchomionych w puli węzłów, którą zamierzasz usunąć, przed usunięciem wykonaj kordon i opróżnij wszystkie węzły w puli węzłów. Aby uzyskać więcej informacji, zobacz cordon i opróżnianie pul węzłów.

az aks nodepool delete -g myResourceGroup --cluster-name myAKSCluster --name mynodepool --no-wait

Następujące przykładowe dane wyjściowe polecenia az aks node pool list pokazują, że pula mynodepool ma stan Usuwanie :

az aks nodepool list -g myResourceGroup --cluster-name myAKSCluster
[
  {
    ...
    "count": 5,
    ...
    "name": "mynodepool",
    "orchestratorVersion": "1.15.7",
    ...
    "provisioningState": "Deleting",
    ...
    "vmSize": "Standard_DS2_v2",
    ...
  },
  {
    ...
    "count": 2,
    ...
    "name": "nodepool1",
    "orchestratorVersion": "1.15.7",
    ...
    "provisioningState": "Succeeded",
    ...
    "vmSize": "Standard_DS2_v2",
    ...
  }
]

Usunięcie węzłów i puli węzłów zajmuje kilka minut.

Kojarzenie grup rezerwacji pojemności z pulami węzłów (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ą w oparciu o najlepsze wysiłki. 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:

Ponieważ obciążenia aplikacji wymagają, można skojarzyć pule węzłów z utworzonymi wcześniej grupami rezerwacji pojemności. Gwarantuje to przydzielanie gwarantowanej pojemności dla pul węzłów.

Aby uzyskać więcej informacji na temat grup rezerwacji pojemności, zobacz Grupy rezerwacji pojemności.

Skojarzenie puli węzłów z istniejącą grupą rezerwacji pojemności można wykonać przy użyciu polecenia az aks nodepool add i określenia grupy rezerwacji pojemności z flagą --capacityReservationGroup" Grupa rezerwacji pojemności powinna już istnieć. W przeciwnym razie pula węzłów zostanie dodana do klastra z ostrzeżeniem i nie zostanie skojarzona żadna grupa rezerwacji pojemności.

az aks nodepool add -g MyRG --cluster-name MyMC -n myAP --capacityReservationGroup myCRG

Skojarzenie puli węzłów systemu z istniejącą grupą rezerwacji pojemności można wykonać za pomocą polecenia az aks create . Jeśli określona grupa rezerwacji pojemności nie istnieje, zostanie wyświetlone ostrzeżenie i klaster zostanie utworzony bez skojarzenia grupy rezerwacji pojemności.

az aks create -g MyRG --cluster-name MyMC --capacityReservationGroup myCRG

Usunięcie polecenia puli węzłów spowoduje niejawne usunięcie puli węzłów z dowolnej skojarzonej grupy rezerwacji pojemności przed usunięciem tej puli węzłów.

az aks nodepool delete -g MyRG --cluster-name MyMC -n myAP

Usunięcie polecenia klastra niejawnie usuwa skojarzenie wszystkich pul węzłów w klastrze z skojarzonych grup rezerwacji pojemności.

az aks delete -g MyRG --cluster-name MyMC

Określanie rozmiaru maszyny wirtualnej dla puli węzłów

W poprzednich przykładach do utworzenia puli węzłów domyślny rozmiar maszyny wirtualnej był używany dla węzłów utworzonych w klastrze. Bardziej typowym scenariuszem jest utworzenie pul węzłów o różnych rozmiarach i możliwościach maszyn wirtualnych. Można na przykład utworzyć pulę węzłów zawierającą węzły z dużą ilością procesora CPU lub pamięci albo pulą węzłów, która zapewnia obsługę procesora GPU. W następnym kroku użyjesz defektów i tolerancji , aby poinformować harmonogram kubernetes, jak ograniczyć dostęp do zasobników, które mogą być uruchamiane w tych węzłach.

W poniższym przykładzie utwórz pulę węzłów opartą na procesorze GPU, która używa rozmiaru maszyny wirtualnej Standard_NC6 . Te maszyny wirtualne są obsługiwane przez kartę NVIDIA Tesla K80. Aby uzyskać informacje na temat dostępnych rozmiarów maszyn wirtualnych, zobacz Rozmiary maszyn wirtualnych z systemem Linux na platformie Azure.

Utwórz pulę węzłów za pomocą polecenia az aks node pool add . Tym razem określ nazwę gpunodepool i użyj parametru --node-vm-size , aby określić rozmiar Standard_NC6 :

az aks nodepool add \
    --resource-group myResourceGroup \
    --cluster-name myAKSCluster \
    --name gpunodepool \
    --node-count 1 \
    --node-vm-size Standard_NC6 \
    --no-wait

Następujące przykładowe dane wyjściowe polecenia az aks node pool list pokazują, że gpunodepool to Tworzenie węzłów o określonym rozmiarze vmSize:

az aks nodepool list -g myResourceGroup --cluster-name myAKSCluster
[
  {
    ...
    "count": 1,
    ...
    "name": "gpunodepool",
    "orchestratorVersion": "1.15.7",
    ...
    "provisioningState": "Creating",
    ...
    "vmSize": "Standard_NC6",
    ...
  },
  {
    ...
    "count": 2,
    ...
    "name": "nodepool1",
    "orchestratorVersion": "1.15.7",
    ...
    "provisioningState": "Succeeded",
    ...
    "vmSize": "Standard_DS2_v2",
    ...
  }
]

Pomyślne utworzenie puli gpunodepool trwa kilka minut.

Określanie defektu, etykiety lub tagu dla puli węzłów

Podczas tworzenia puli węzłów można dodawać defekty, etykiety lub tagi do tej puli węzłów. Po dodaniu defektu, etykiety lub tagu wszystkie węzły w tej puli węzłów również uzyskują ten defekt, etykietę lub tag.

Ważne

Dodawanie defektów, etykiet lub tagów do węzłów powinno odbywać się dla całej puli węzłów przy użyciu polecenia az aks nodepool. Stosowanie defektów, etykiet lub tagów do poszczególnych węzłów w puli węzłów przy użyciu kubectl polecenia nie jest zalecane.

Ustawianie defektów puli węzłów

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

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

Następujące przykładowe dane wyjściowe polecenia az aks nodepool list pokazują, że taintnp to Tworzenie węzłów z określonym węzłemTaints:

az aks nodepool list -g myResourceGroup --cluster-name myAKSCluster
[
  {
    ...
    "count": 1,
    ...
    "name": "taintnp",
    "orchestratorVersion": "1.15.7",
    ...
    "provisioningState": "Creating",
    ...
    "nodeTaints":  [
      "sku=gpu:NoSchedule"
    ],
    ...
  },
 ...
]

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

  • Defekt 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 pozwala im tolerować defekt węzła.

Aby uzyskać więcej informacji na temat korzystania z zaawansowanych funkcji zaplanowanych na platformie Kubernetes, zobacz Najlepsze rozwiązania dotyczące zaawansowanych funkcji harmonogramu w usłudze AKS

W poprzednim kroku zastosowano parametr sku=gpu:NoSchedule podczas tworzenia puli węzłów. Poniższy podstawowy przykład manifestu 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 go w poniższym przykładzie 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 -f nginx-toleration.yaml użyciu polecenia :

kubectl apply -f nginx-toleration.yaml

Zaplanowanie zasobnika i ściągnięcie obrazu NGINX zajmuje kilka sekund. Użyj polecenia kubectl describe pod, aby wyświetlić stan zasobnika. Następujące skrócone przykładowe dane wyjściowe pokazują, że zastosowano tolerancję sku=gpu:NoSchedule . W sekcji zdarzeń harmonogram przypisał zasobnik do węzła aks-taintnp-28993262-vmss0000000 :

kubectl describe pod mypod
[...]
Tolerations:     node.kubernetes.io/not-ready:NoExecute for 300s
                 node.kubernetes.io/unreachable:NoExecute for 300s
                 sku=gpu:NoSchedule
Events:
  Type    Reason     Age    From                Message
  ----    ------     ----   ----                -------
  Normal  Scheduled  4m48s  default-scheduler   Successfully assigned default/mypod to aks-taintnp-28993262-vmss000000
  Normal  Pulling    4m47s  kubelet             pulling image "mcr.microsoft.com/oss/nginx/nginx:1.15.9-alpine"
  Normal  Pulled     4m43s  kubelet             Successfully pulled image "mcr.microsoft.com/oss/nginx/nginx:1.15.9-alpine"
  Normal  Created    4m40s  kubelet             Created container
  Normal  Started    4m40s  kubelet             Started container

Tylko zasobniki, które mają tę tolerancję, można zaplanować na węzłach w narzędziu taintnp. Każdy inny zasobnik zostanie zaplanowany w puli węzłów nodepool1 . Jeśli tworzysz dodatkowe pule węzłów, możesz użyć dodatkowych defektów i tolerancji, aby ograniczyć harmonogram zasobników w tych zasobach węzłów.

Ustawianie etykiet puli węzłów

Aby uzyskać więcej informacji na temat używania etykiet z pulami węzłów, zobacz Używanie etykiet w klastrze Azure Kubernetes Service (AKS).

Ustawianie tagów puli węzłów platformy Azure

Aby uzyskać więcej informacji na temat używania tagów platformy Azure z pulami węzłów, zobacz Używanie tagów platformy Azure w usłudze Azure Kubernetes Service (AKS).

Dodawanie puli węzłów z obsługą standardu FIPS

Aby uzyskać więcej informacji na temat włączania standardu FIPS (Federal Information Process Standard) dla klastra usługi AKS, zobacz Enable Federal Information Process Standard (FIPS) for Azure Kubernetes Service (AKS) node pools (Enable Federal Information Process Standard) for Azure Kubernetes Service (AKS) node pools (Włączanie pul węzłów federal information process Standard).

Zarządzanie pulami węzłów przy użyciu szablonu Resource Manager

Gdy używasz szablonu usługi Azure Resource Manager do tworzenia i zarządzania zasobami, zazwyczaj można zaktualizować ustawienia w szablonie i ponownie wdrożyć, aby zaktualizować zasób. W przypadku pul węzłów w usłudze AKS nie można zaktualizować początkowego profilu puli węzłów po utworzeniu klastra usługi AKS. To zachowanie oznacza, że nie można zaktualizować istniejącego szablonu Resource Manager, wprowadzić zmianę w pulach węzłów i wdrożyć ponownie. Zamiast tego należy utworzyć oddzielny szablon Resource Manager, który aktualizuje tylko pule węzłów dla istniejącego klastra usługi AKS.

Utwórz szablon, taki jak aks-agentpools.json i wklej następujący przykładowy manifest. Ten przykładowy szablon konfiguruje następujące ustawienia:

  • Aktualizacje pulę węzłów systemu Linux o nazwie myagentpool, aby uruchomić trzy węzły.
  • Ustawia węzły w puli węzłów, aby uruchomić platformę Kubernetes w wersji 1.15.7.
  • Definiuje rozmiar węzła jako Standard_DS2_v2.

Edytuj te wartości zgodnie z potrzebami, aby aktualizować, dodawać lub usuwać pule węzłów:

{
    "$schema": "https://schema.management.azure.com/schemas/2015-01-01/deploymentTemplate.json#",
    "contentVersion": "1.0.0.0",
    "parameters": {
        "clusterName": {
            "type": "string",
            "metadata": {
                "description": "The name of your existing AKS cluster."
            }
        },
        "location": {
            "type": "string",
            "metadata": {
                "description": "The location of your existing AKS cluster."
            }
        },
        "agentPoolName": {
            "type": "string",
            "defaultValue": "myagentpool",
            "metadata": {
                "description": "The name of the agent pool to create or update."
            }
        },
        "vnetSubnetId": {
            "type": "string",
            "defaultValue": "",
            "metadata": {
                "description": "The Vnet subnet resource ID for your existing AKS cluster."
            }
        }
    },
    "variables": {
        "apiVersion": {
            "aks": "2020-01-01"
        },
        "agentPoolProfiles": {
            "maxPods": 30,
            "osDiskSizeGB": 0,
            "agentCount": 3,
            "agentVmSize": "Standard_DS2_v2",
            "osType": "Linux",
            "vnetSubnetId": "[parameters('vnetSubnetId')]"
        }
    },
    "resources": [
        {
            "apiVersion": "2020-01-01",
            "type": "Microsoft.ContainerService/managedClusters/agentPools",
            "name": "[concat(parameters('clusterName'),'/', parameters('agentPoolName'))]",
            "location": "[parameters('location')]",
            "properties": {
                "maxPods": "[variables('agentPoolProfiles').maxPods]",
                "osDiskSizeGB": "[variables('agentPoolProfiles').osDiskSizeGB]",
                "count": "[variables('agentPoolProfiles').agentCount]",
                "vmSize": "[variables('agentPoolProfiles').agentVmSize]",
                "osType": "[variables('agentPoolProfiles').osType]",
                "storageProfile": "ManagedDisks",
                "type": "VirtualMachineScaleSets",
                "vnetSubnetID": "[variables('agentPoolProfiles').vnetSubnetId]",
                "orchestratorVersion": "1.15.7"
            }
        }
    ]
}

Wdróż ten szablon przy użyciu polecenia az deployment group create , jak pokazano w poniższym przykładzie. Zostanie wyświetlony monit o nazwę i lokalizację istniejącego klastra usługi AKS:

az deployment group create \
    --resource-group myResourceGroup \
    --template-file aks-agentpools.json

Porada

Tag można dodać do puli węzłów, dodając właściwość tagu w szablonie, jak pokazano w poniższym przykładzie.

...
"resources": [
{
  ...
  "properties": {
    ...
    "tags": {
      "name1": "val1"
    },
    ...
  }
}
...

Zaktualizowanie klastra usługi AKS w zależności od ustawień puli węzłów i operacji zdefiniowanych w szablonie Resource Manager może potrwać kilka minut.

Przypisywanie publicznego adresu IP na węzeł dla pul węzłów

Węzły usługi AKS nie wymagają własnych publicznych adresów IP do komunikacji. Jednak scenariusze mogą wymagać, aby węzły w puli węzłów odbierały własne dedykowane publiczne adresy IP. Typowy scenariusz dotyczy obciążeń gier, w których konsola musi nawiązać bezpośrednie połączenie z maszyną wirtualną w chmurze, aby zminimalizować przeskoki. Ten scenariusz można osiągnąć w usłudze AKS przy użyciu publicznego adresu IP węzła.

Najpierw utwórz nową grupę zasobów.

az group create --name myResourceGroup2 --location eastus

Utwórz nowy klaster usługi AKS i dołącz publiczny adres IP dla węzłów. Każdy z węzłów w puli węzłów otrzymuje unikatowy publiczny adres IP. Możesz to sprawdzić, przeglądając wystąpienia zestawu skalowania maszyn wirtualnych.

az aks create -g MyResourceGroup2 -n MyManagedCluster -l eastus  --enable-node-public-ip

W przypadku istniejących klastrów usługi AKS można również dodać nową pulę węzłów i dołączyć publiczny adres IP dla węzłów.

az aks nodepool add -g MyResourceGroup2 --cluster-name MyManagedCluster -n nodepool2 --enable-node-public-ip

Używanie prefiksu publicznego adresu IP

Istnieje wiele korzyści związanych z używaniem prefiksu publicznego adresu IP. Usługa AKS obsługuje używanie adresów z istniejącego prefiksu publicznego adresu IP dla węzłów przez przekazanie identyfikatora zasobu z flagą node-public-ip-prefix podczas tworzenia nowego klastra lub dodawania puli węzłów.

Najpierw utwórz prefiks publicznego adresu IP przy użyciu polecenia az network public-ip prefix create:

az network public-ip prefix create --length 28 --location eastus --name MyPublicIPPrefix --resource-group MyResourceGroup3

Wyświetl dane wyjściowe i zanotuj id wartość dla prefiksu:

{
  ...
  "id": "/subscriptions/<subscription-id>/resourceGroups/myResourceGroup3/providers/Microsoft.Network/publicIPPrefixes/MyPublicIPPrefix",
  ...
}

Na koniec podczas tworzenia nowego klastra lub dodawania nowej puli węzłów użyj flagi node-public-ip-prefix i przekaż identyfikator zasobu prefiksu:

az aks create -g MyResourceGroup3 -n MyManagedCluster -l eastus --enable-node-public-ip --node-public-ip-prefix /subscriptions/<subscription-id>/resourcegroups/MyResourceGroup3/providers/Microsoft.Network/publicIPPrefixes/MyPublicIPPrefix

Lokalizowanie publicznych adresów IP dla węzłów

Publiczne adresy IP dla węzłów można zlokalizować na różne sposoby:

Ważne

Grupa zasobów węzła zawiera węzły i ich publiczne adresy IP. Użyj grupy zasobów węzła podczas wykonywania poleceń, aby znaleźć publiczne adresy IP dla węzłów.

az vmss list-instance-public-ips -g MC_MyResourceGroup2_MyManagedCluster_eastus -n YourVirtualMachineScaleSetName

Czyszczenie zasobów

W tym artykule utworzono klaster usługi AKS zawierający węzły oparte na procesorze GPU. Aby zmniejszyć niepotrzebne koszty, możesz usunąć pulę gpunodepool lub cały klaster usługi AKS.

Aby usunąć pulę węzłów opartą na procesorze GPU, użyj polecenia az aks nodepool delete , jak pokazano w poniższym przykładzie:

az aks nodepool delete -g myResourceGroup --cluster-name myAKSCluster --name gpunodepool

Aby usunąć sam klaster, użyj polecenia az group delete , aby usunąć grupę zasobów usługi AKS:

az group delete --name myResourceGroup --yes --no-wait

Możesz również usunąć dodatkowy klaster utworzony dla publicznego adresu IP dla scenariusza pul węzłów.

az group delete --name myResourceGroup2 --yes --no-wait

Następne kroki