Notatka
Dostęp do tej strony wymaga autoryzacji. Może spróbować zalogować się lub zmienić katalogi.
Dostęp do tej strony wymaga autoryzacji. Możesz spróbować zmienić katalogi.
W tym artykule wyjaśniono, jak skonfigurować zasoby AKSNodeClass w celu określenia ustawień specyficznych dla Azure do automatycznego aprowizowania węzłów (NAP) w Azure Kubernetes Service (AKS) z użyciem Karpenter.
AKSNodeClass umożliwia dostosowanie różnych aspektów węzłów, które Karpenter aprowizuje, takich jak obraz maszyny wirtualnej (VM), rozmiar dysku systemu operacyjnego (OS), maksymalna liczba pods na węzeł oraz konfiguracje kubeleta.
Ważne
Począwszy od November 30, 2025 Azure Kubernetes Service (AKS) nie obsługuje już aktualizacji zabezpieczeń dla systemu Azure Linux 2.0. Obraz węzła systemu Azure Linux 2.0 jest zamrożony w wersji 202512.06.0. Od 31 marca 2026 r. obrazy węzłów zostaną usunięte i nie będzie można skalować pul węzłów. Przeprowadź migrację do obsługiwanej wersji systemu Azure Linux, uaktualniając swoje pule węzłów do obsługiwanej wersji Kubernetes lub przechodząc na osSku AzureLinux3. Aby uzyskać więcej informacji, zobacz problem na GitHub dotyczący zakończenia oraz ogłoszenie o wycofaniu aktualizacji Azure. Aby być na bieżąco z ogłoszeniami i aktualizacjami, obserwuj notatki dotyczące wydań AKS.
Omówienie zasobów AKSNodeClass
AKSNodeClass zasoby umożliwiają konfigurowanie ustawień specyficznych dla NAP w Azure. Każdy NodePool zasób musi odwoływać się do AKSNodeClass przy użyciu spec.template.spec.nodeClassRef. Można mieć wiele NodePools, które wskazują na ten sam AKSNodeClass, co umożliwia współużytkowanie typowych konfiguracji Azure w różnych pulach węzłów.
Konfiguracja rodziny obrazów
Pole imageFamily określa domyślny obraz maszyny wirtualnej i logikę inicjalizacji dla węzłów dostarczanych za pośrednictwem elementu AKSNodeClass. Jeśli nie określisz rodziny obrazów, wartość domyślna to Ubuntu2204. Procesory GPU są obsługiwane w obu rodzinach obrazów w zgodnych rozmiarach maszyn wirtualnych.
Obsługiwane rodziny obrazów
-
Ubuntu: Ubuntu 22.04 Long Term Support (LTS) to domyślna dystrybucja systemu Linux dla węzłów usługi AKS. -
AzureLinux: Azure Linux to alternatywna dystrybucja systemu Linux Microsoft dla obciążeń usługi AKS. Aby uzyskać więcej informacji, zobacz dokumentację Azure Linux
Przykładowa konfiguracja rodziny obrazów
W poniższym przykładzie skonfigurowaliśmy element AKSNodeClass tak, aby korzystał z rodziny obrazów AzureLinux :
spec:
imageFamily: AzureLinux
Konfiguracja obrazu węzła zgodnego ze standardem FIPS
Można również włączyć obrazy węzłów zgodne ze standardami FIPS (Federal Information Processing Standards). Aby uzyskać więcej informacji na temat FIPS w usłudze AKS, zobacz dokumentację FIPS.
Pole fipsMode jest domyślnie ustawione na Wyłączone i można ustawić na następujące opcje:
- FiPS — wybieranie obrazów węzłów zgodnych ze standardem FIPS
- Wyłączone — nie używaj obrazów węzłów zgodnych ze standardem FIPS
W poniższym przykładzie skonfigurowano klasę "AKSNodeClass", aby wybrać obrazy węzłów zgodne ze standardem FIPS, ustawiając wartość fipsMode na :FIPS
spec:
fipsMode: FIPS
Konfiguracja podsieci sieci wirtualnej
Pole vnetSubnetID określa, która podsieć sieci wirtualnej Azure powinna być używana do aprowizacji interfejsów sieciowych węzłów. To pole jest opcjonalne. Jeśli nie określisz podsieci, NAP używa domyślnej podsieci skonfigurowanej podczas instalacji Karpenter. Aby uzyskać więcej informacji, zobacz Konfiguracje podsieci dla ochrony dostępu do sieci (NAP).
Przykładowa konfiguracja podsieci
Identyfikator podsieci musi mieć pełny format Azure Resource Manager (ARM), jak pokazano w poniższym przykładzie:
spec:
vnetSubnetID: "/subscriptions/{subscription-id}/resourceGroups/{resource-group}/providers/Microsoft.Network/virtualNetworks/{vnet-name}/subnets/{subnet-name}"
Konfiguracja rozmiaru dysku systemu operacyjnego
Pole osDiskSizeGB określa rozmiar dysku systemu operacyjnego w gigabajtach. Wartość domyślna to 128 GB, a minimalna wartość to 30 GB.
Rozważ większe rozmiary dysków systemu operacyjnego dla obciążeń, które:
- Lokalne przechowywanie znaczących danych.
- Wymagaj dodatkowego miejsca dla obrazów kontenerów.
- Mają wysokie wymagania dotyczące operacji we/wy dysku.
Przykładowa konfiguracja rozmiaru dysku systemu operacyjnego
spec:
osDiskSizeGB: 256 # 256 GB OS disk
Efemeryczna konfiguracja dysku systemu operacyjnego
NAP automatycznie używa Efemerycznych Dysków Systemu Operacyjnego, jeśli są dostępne i odpowiednie dla żądanego rozmiaru dysku. Efemeryczne dyski systemu operacyjnego zapewniają lepszą wydajność i niższe koszty w porównaniu z dyskami zarządzanymi.
Kryteria wyboru dysku efemerycznego
System automatycznie wybiera dyski efemeryczne w następujących scenariuszach:
- Typ wystąpienia maszyny wirtualnej obsługuje efemeryczne dyski systemu operacyjnego.
- Pojemność dysku efemerycznego jest większa lub równa żądanej
osDiskSizeGBwartości . - Maszyna wirtualna ma wystarczającą pojemność magazynu efemerycznego.
Jeśli te warunki nie zostaną spełnione, system wróci do korzystania z dysków zarządzanych.
Typy dysków efemerycznych i priorytetyzacja
Maszyny wirtualne Azure mogą mieć różne typy przechowywania efemerycznego. System używa następującej kolejności priorytetu:
- Dyski NVMe (najwyższa wydajność)
- Dyski pamięci podręcznej (zrównoważona wydajność)
- Dyski zasobów (podstawowa wydajność)
Przykładowa konfiguracja dysku efemerycznego
Możesz użyć wymagań puli węzłów, aby upewnić się, że węzły mają wystarczającą pojemność dysku efemerycznego, jak pokazano w poniższym przykładzie:
apiVersion: karpenter.sh/v1
kind: NodePool
metadata:
name: ephemeral-disk-pool
spec:
template:
spec:
requirements:
- key: karpenter.azure.com/sku-storage-ephemeralos-maxsize
operator: Gt
values: ["128"] # Require ephemeral disk larger than 128 GB
nodeClassRef:
apiVersion: karpenter.azure.com/v1beta1
kind: AKSNodeClass
name: my-node-class
---
apiVersion: karpenter.azure.com/v1beta1
kind: AKSNodeClass
metadata:
name: my-node-class
spec:
osDiskSizeGB: 128 # This will use ephemeral disk if available and large enough
Ta konfiguracja gwarantuje, że wybrano tylko typy wystąpień maszyn wirtualnych z dyskami efemerycznym większymi niż 128 GB, co gwarantuje użycie efemerycznego dysku dla określonego rozmiaru dysku systemu operacyjnego.
Maksymalna konfiguracja podów
Pole maxPods określa maksymalną liczbę podów, które można zaplanować na węźle. To ustawienie ma wpływ zarówno na gęstość klastra, jak i konfigurację sieci.
Wartość minimalna parametru maxPods to 10, a maksymalna wartość to 250.
Domyślne zachowanie dla maxPods
Domyślne zachowanie dla parametru maxPods zależy od konfiguracji wtyczki sieciowej. Poniższa tabela zawiera podsumowanie wartości domyślnych:
| Konfiguracja wtyczki sieciowej | Wartość domyślna maxPods na węzeł |
|---|---|
| Azure CNI ze standardowym sieciowaniem (v1 lub NodeSubnet) | 30 |
| Azure CNI z siecią overlay | 250 |
| Brak (brak wtyczki sieciowej) | 250 |
| Inne konfiguracje | 110 (standardowa domyślna wartość Kubernetes) |
Przykładowa konfiguracja maksymalnych podów
spec:
maxPods: 50 # Allow up to 50 pods per node
Konfiguracja lokalnych sieciDNS
LocalDNS wdraża serwer proxy DNS na poziomie węzła, który rozwiązuje zapytania DNS bliżej obciążeń, zmniejszając opóźnienia zapytań i poprawiając odporność podczas przejściowych zakłóceń DNS. Aby uzyskać więcej informacji, zobacz dokumentację LocalDNS. Domyślnie wartość LocalDNS jest ustawiona na Wyłączone i można ją skonfigurować, wybierając jedną z następujących opcji:
-
Disabled(ustawienie domyślne) — wyłącza funkcję LocalDNS. Zapytania DNS nie są rozwiązywane lokalnie w węźle. -
Preferred— Usługa AKS zarządza włączaniem LocalDNS w oparciu o wersję platformy Kubernetes puli węzłów. Konfiguracja jest zawsze weryfikowana i uwzględniana, ale usługa LocalDNS nie jest włączona, chyba że jest używana poprawna wersja platformy Kubernetes. -
Required— LocalDNS jest wymuszana w puli węzłów, jeśli zostały spełnione wszystkie wymagania wstępne. Jeśli wymagania nie zostaną spełnione, wdrożenie zakończy się niepowodzeniem.
Przykładowa konfiguracja localDNS
Konfiguracje localDNS, takie jak vnetDNSOverrides i kubeDNSOverrides, można dostosować. Aby uzyskać więcej informacji na temat obsługiwanych wtyczek, zobacz Dostosowywanie lokalnych sieciDNS.
spec:
LocalDNS:
mode: Required
vnetDNSOverrides:
- zone: "."
cacheDuration: "3600s"
forwardDestination: VnetDNS
forwardPolicy: Sequential
maxConcurrent: 1000
protocol: PreferUDP
queryLogging: Error
serveStale: Immediate
serveStaleDuration: "3600s"
- zone: "cluster.local"
cacheDuration: "3600s"
forwardDestination: ClusterCoreDNS
forwardPolicy: Sequential
maxConcurrent: 1000
protocol: ForceTCP
queryLogging: Error
serveStale: Immediate
serveStaleDuration: "3600s"
kubeDNSOverrides:
- zone: "."
cacheDuration: "3600s"
forwardDestination: ClusterCoreDNS
forwardPolicy: Sequential
maxConcurrent: 1000
protocol: PreferUDP
queryLogging: Error
serveStale: Immediate
serveStaleDuration: "3600s"
- zone: "cluster.local"
cacheDuration: "3600s"
forwardDestination: ClusterCoreDNS
forwardPolicy: Sequential
maxConcurrent: 1000
protocol: ForceTCP
queryLogging: Error
serveStale: Immediate
serveStaleDuration: "3600s"
Konfiguracja rozwiązania Kubelet
Sekcja kubelet umożliwia skonfigurowanie różnych parametrów kubelet, które wpływają na zachowanie węzła. Te parametry są typowymi argumentami kubelet, więc dostawca Azure po prostu przekazuje je do kubelet na węźle.
Ważne
Dokładnie skonfiguruj ustawienia narzędzia kubelet i przetestuj wszelkie zmiany w środowiskach nieprodukcyjnych.
Zarządzanie procesorem CPU
Następujące ustawienia kontrolują zachowanie zarządzania procesorem CPU dla narzędzia kubelet:
spec:
kubelet:
cpuManagerPolicy: "static" # or "none"
cpuCFSQuota: true
cpuCFSQuotaPeriod: "100ms"
-
cpuManagerPolicy: Określa sposób przydzielania zasobów procesora CPU przez kubelet. Ustaw wartość na"static"w przypadku przypinania procesora CPU w obciążeniach wrażliwych na opóźnienia. -
cpuCFSQuota: włącza wymuszanie limitów przydziału CPU Całkowicie Sprawiedliwego Harmonogramu (CFS) dla kontenerów, które określają limity CPU. -
cpuCFSQuotaPeriod: Ustawia okres przydziału procesora CPU CFS.
Odzyskiwanie pamięci obrazu
Następujące ustawienia kontrolują zachowanie usuwania nieużywanych obrazów przez kubelet.
spec:
kubelet:
imageGCHighThresholdPercent: 85
imageGCLowThresholdPercent: 80
Te ustawienia kontrolują, kiedy kubelet wykonuje zbieranie śmieci obrazów kontenera.
-
imageGCHighThresholdPercent: Procent użycia dysku, który wyzwala odśmiecanie obrazów. -
imageGCLowThresholdPercent: Procent użycia dysku docelowego po usunięciu pamięci.
Zarządzanie topologią
Następujące ustawienie steruje zasadami menedżera topologii dla narzędzia kubelet:
spec:
kubelet:
topologyManagerPolicy: "best-effort" # none, restricted, best-effort, single-numa-node
Menedżer topologii pomaga koordynować alokację zasobów dla obciążeń wrażliwych na opóźnienia w zasobach procesora CPU i urządzenia (na przykład procesora GPU).
Konfiguracja systemu
Następujące ustawienia umożliwiają skonfigurowanie dodatkowych parametrów systemowych dla narzędzia kubelet:
spec:
kubelet:
allowedUnsafeSysctls:
- "kernel.msg*"
- "net.ipv4.route.min_pmtu"
containerLogMaxSize: "50Mi"
containerLogMaxFiles: 5
podPidsLimit: 4096
-
allowedUnsafeSysctls: Lista dozwolonych niebezpiecznych systemów, których mogą używać zasobniki. -
containerLogMaxSize: Maksymalny rozmiar plików dziennika kontenera przed rotacją. -
containerLogMaxFiles: Maksymalna liczba plików dziennika kontenera do zachowania. -
podPidsLimit: Maksymalna liczba procesów dozwolona w dowolnym podzie.
konfiguracja tagów zasobów Azure
Można określić tagi zasobów Azure, które mają zastosowanie do wszystkich wystąpień maszyn wirtualnych utworzonych przy użyciu określonego zasobu AKSNodeClass. Tagi są przydatne w przypadku śledzenia kosztów, organizacji zasobów i wymagań dotyczących zgodności.
Ograniczenia tagów
- Azure tagi zasobów mają limit 50 tagów na zasób.
- Nazwy tagów są niewrażliwe na wielkość liter, ale wartości tagów rozróżniają wielkość liter.
- Azure rezerwuje niektóre nazwy tagów, których nie można użyć. Aby uzyskać więcej informacji, zobacz Wskazówki i limity tagów.
Przykładowa konfiguracja tagów
spec:
tags:
Environment: "production"
Team: "platform"
Application: "web-service"
CostCenter: "engineering"
Kompleksowy AKSNodeClass przykład konfiguracji
W poniższym przykładzie przedstawiono kompleksową AKSNodeClass konfigurację obejmującą wszystkie ustawienia omówione w tym artykule:
apiVersion: karpenter.sh/v1
kind: NodePool
metadata:
name: default
spec:
template:
spec:
nodeClassRef:
apiVersion: karpenter.azure.com/v1beta1
kind: AKSNodeClass
name: comprehensive-example
---
apiVersion: karpenter.azure.com/v1beta1
kind: AKSNodeClass
metadata:
name: comprehensive-example
spec:
# Image family configuration
# Default: Ubuntu
# Valid values: Ubuntu, AzureLinux
imageFamily: Ubuntu
# FIPS compliant mode - allows support for FIPS-compliant node images
# Default: Disabled
# Valid values: FIPS, Disabled
fipsMode: Disabled
# LocalDNS mode - allows use of LocalDNS feature
# Default: Disabled
# Valid values: Preferred, Required, Disabled
LocalDNS:
mode: Disabled
# additional details on vnetDNSOverrides and kubeDNSOverrides can be added here
# Virtual network subnet configuration (optional)
# If not specified, uses the default --vnet-subnet-id from Karpenter installation
vnetSubnetID: "/subscriptions/12345678-1234-1234-1234-123456789012/resourceGroups/my-rg/providers/Microsoft.Network/virtualNetworks/my-vnet/subnets/my-subnet"
# OS disk size configuration
# Default: 128 GB
# Minimum: 30 GB
osDiskSizeGB: 128
# Maximum pods per node configuration
# Default behavior depends on network plugin:
# - Azure CNI with standard networking: 30 pods
# - Azure CNI with overlay networking: 250 pods
# - Other configurations: 110 pods
# Range: 10-250
maxPods: 30
# Azure resource tags (optional)
# Applied to all VM instances created with this AKSNodeClass
tags:
Environment: "production"
Team: "platform-team"
Application: "web-service"
CostCenter: "engineering"
# Kubelet configuration (optional)
# All fields are optional with sensible defaults
kubelet:
# CPU management policy
# Default: "none"
# Valid values: none, static
cpuManagerPolicy: "static"
# CPU CFS quota enforcement
# Default: true
cpuCFSQuota: true
# CPU CFS quota period
# Default: "100ms"
cpuCFSQuotaPeriod: "100ms"
# Image garbage collection thresholds
# imageGCHighThresholdPercent must be greater than imageGCLowThresholdPercent
# Range: 0-100
imageGCHighThresholdPercent: 85
imageGCLowThresholdPercent: 80
# Topology manager policy
# Default: "none"
# Valid values: none, restricted, best-effort, single-numa-node
topologyManagerPolicy: "best-effort"
# Allowed unsafe sysctls (optional)
# Comma-separated list of unsafe sysctls or patterns
allowedUnsafeSysctls:
- "kernel.msg*"
- "net.ipv4.route.min_pmtu"
# Container log configuration
# containerLogMaxSize default: "50Mi"
containerLogMaxSize: "50Mi"
# containerLogMaxFiles default: 5, minimum: 2
containerLogMaxFiles: 5
# Pod process limits
# Default: -1 (unlimited)
podPidsLimit: 4096
Dalsze kroki
Aby uzyskać więcej informacji o automatycznym aprowizowaniu węzłów w AKS, zobacz następujące artykuły: