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 wyjaśniono, jak skonfigurować zasoby w celu zdefiniowania AKSNodeClass ustawień specyficznych dla platformy Azure na potrzeby automatycznej aprowizacji węzłów (NAP) w usłudze Azure Kubernetes Service (AKS) przy użyciu narzędzia 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
Od 30 listopada 2025 r. usługa Azure Kubernetes Service (AKS) nie obsługuje już ani nie zapewnia aktualizacji zabezpieczeń dla systemu Azure Linux 2.0. Obraz węzła systemu Linux 2.0 platformy Azure został 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 Linux platformy Azure, uaktualniając pule węzłów do obsługiwanej wersji rozwiązania Kubernetes lub migrując do systemu osSku AzureLinux3. Aby uzyskać więcej informacji, zobacz [Wycofywanie] pul węzłów Azure Linux 2.0 w usłudze AKS.
Omówienie zasobów AKSNodeClass
AKSNodeClass zasoby umożliwiają konfigurowanie ustawień specyficznych dla platformy Azure dla NAP. Każdy NodePool zasób musi odwoływać się do AKSNodeClass przy użyciu spec.template.spec.nodeClassRef. Możesz mieć wiele NodePools wskazujących na ten sam AKSNodeClass, co umożliwia współdzielenie typowych konfiguracji Azure w różnych grupach 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 firmy Microsoft dla obciążeń usługi AKS. Aby uzyskać więcej informacji, zobacz dokumentację systemu Linux platformy Azure
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 podsieci sieci wirtualnej
Pole vnetSubnetID określa, która podsieć sieci wirtualnej platformy Azure powinna być używana do aprowizowania 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 być w pełnym formacie 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 platformy Azure mogą mieć różne typy magazynu 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 zasobników
Pole maxPods określa maksymalną liczbę zasobników, które można zaplanować w 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ł |
|---|---|
| Sieć Azure CNI ze standardowym networkingiem (v1 lub NodeSubnet) | 30 |
| Azure CNI z siecią nakładkową | 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 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 platformy Azure po prostu przekazuje je do narzędzia kubelet w 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 narzędzie 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 narzędzie kubelet wykonuje odzyskiwanie pamięci 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 platformy Azure
Możesz określić tagi zasobów platformy Azure, które mają zastosowanie do wszystkich wystąpień maszyn wirtualnych utworzonych przy użyciu określonego AKSNodeClass zasobu. Tagi są przydatne w przypadku śledzenia kosztów, organizacji zasobów i wymagań dotyczących zgodności.
Ograniczenia tagów
- Tagi zasobów platformy Azure 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.
- Platforma 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
# 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: