Automatyczne aprowizowanie węzłów (wersja zapoznawcza)
Podczas wdrażania obciążeń w usłudze AKS należy podjąć decyzję o konfiguracji puli węzłów dotyczącej wymaganego rozmiaru maszyny wirtualnej. W miarę jak obciążenia stają się bardziej złożone i wymagają różnych możliwości procesora CPU, pamięci i możliwości uruchamiania, obciążenie związane z koniecznością zaprojektowania konfiguracji maszyny wirtualnej dla wielu żądań zasobów staje się trudne.
Automatyczne aprowizowanie węzłów (NAP) (wersja zapoznawcza) decyduje na podstawie oczekujących wymagań dotyczących zasobów zasobników optymalnej konfiguracji maszyny wirtualnej do uruchamiania tych obciążeń w najbardziej wydajny i ekonomiczny sposób.
Ochrona dostępu do sieci jest oparta na projekcie Open Source Karpenter, a dostawca AKS jest również open source. Ochrona dostępu do sieci automatycznie wdraża i konfiguruje Narzędzie Karpenter w klastrach usługi AKS oraz zarządza nimi.
Ważne
Automatyczne aprowizowanie węzłów (NAP) dla usługi AKS jest obecnie dostępne w wersji zapoznawczej. Zobacz Dodatkowe warunki użytkowania wersji zapoznawczych platformy Microsoft Azure, aby zapoznać się z postanowieniami prawnymi dotyczącymi funkcji platformy Azure, które są w wersji beta lub wersji zapoznawczej albo w inny sposób nie zostały jeszcze wydane jako ogólnie dostępne.
Zanim rozpoczniesz
- Wymagana jest subskrypcja platformy Azure. Jeśli nie masz subskrypcji Azure, możesz utworzyć bezpłatne konto Azure.
- Potrzebny jest zainstalowany interfejs wiersza polecenia platformy Azure.
- Zainstaluj rozszerzenie interfejsu wiersza polecenia platformy
aks-preview
Azure. Minimalna wersja 0.5.170. - Zarejestruj flagę NodeAutoProvisioningPreviewfeature.
Instalowanie rozszerzenia interfejsu aks-preview
wiersza polecenia
Zainstaluj rozszerzenie interfejsu
aks-preview
az extension add
wiersza polecenia przy użyciu polecenia .az extension add --name aks-preview
Zaktualizuj rozszerzenie, aby upewnić się, że masz zainstalowaną najnowszą wersję przy użyciu
az extension update
polecenia .az extension update --name aks-preview
Rejestrowanie flagi NodeAutoProvisioningPreview
funkcji
Zarejestruj flagę
NodeAutoProvisioningPreview
funkcji przy użyciuaz feature register
polecenia .az feature register --namespace "Microsoft.ContainerService" --name "NodeAutoProvisioningPreview"
Wyświetlenie stanu Zarejestrowane trwa kilka minut.
Sprawdź stan rejestracji przy użyciu
az feature show
polecenia .az feature show --namespace "Microsoft.ContainerService" --name "NodeAutoProvisioningPreview"
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
Ograniczenia
- Jedyną dozwoloną konfiguracją sieci jest nakładka azure CNI obsługiwana przez cilium.
- Nie można włączyć w klastrze, w którym pule węzłów mają włączoną funkcję automatycznego skalowania klastra
Nieobsługiwane funkcje
- Pule węzłów systemu Windows
- Stosowanie konfiguracji niestandardowej do węzła kubelet
- Klastry IPv6
- Jednostki usługi
Uwaga
Można użyć tożsamości zarządzanej przypisanej przez system lub przypisanej przez użytkownika.
- Zestawy szyfrowania dysków
- CustomCATrustCertificates
- Uruchamianie trybu zatrzymywania
- Serwer proxy HTTP
- Mutacja outboundType . Wszystkie typy wychodzące są obsługiwane, ale nie można ich zmienić po utworzeniu.
- Klaster prywatny (i prywatny system DNS BYO)
Włączanie automatycznej aprowizacji węzłów
Włączanie automatycznej aprowizacji węzłów w nowym klastrze
Włącz automatyczne aprowizowanie węzłów w nowym klastrze przy użyciu
az aks create
polecenia i ustaw wartość--node-provisioning-mode
Auto
. Należy również ustawić parametr na--network-plugin
, na , i--network-dataplane
nacilium
.overlay
--network-plugin-mode
azure
az aks create \ --name $CLUSTER_NAME \ --resource-group $RESOURCE_GROUP_NAME \ --node-provisioning-mode Auto \ --network-plugin azure \ --network-plugin-mode overlay \ --network-dataplane cilium \ --generate-ssh-keys
Włączanie automatycznej aprowizacji węzłów w istniejącym klastrze
Włącz automatyczne aprowizowanie węzłów w istniejącym klastrze przy użyciu
az aks update
polecenia i ustaw wartość--node-provisioning-mode
Auto
. Należy również ustawić parametr na--network-plugin
, na , i--network-dataplane
nacilium
.overlay
--network-plugin-mode
azure
az aks update --name $CLUSTER_NAME --resource-group $RESOURCE_GROUP_NAME --node-provisioning-mode Auto --network-plugin azure --network-plugin-mode overlay --network-dataplane cilium
Pule węzłów
Automatyczna aprowizacja węzła używa listy jednostek SKU maszyn wirtualnych jako punktu wyjścia, aby zdecydować, które najlepiej nadaje się do obciążeń, które znajdują się w stanie oczekiwania. Posiadanie kontroli nad potrzebną jednostkę SKU w początkowej puli umożliwia określenie określonych rodzin jednostek SKU lub typów maszyn wirtualnych oraz maksymalnej ilości zasobów używanych przez aprowizatora.
Jeśli na przykład masz określone jednostki SKU maszyn wirtualnych, które są wystąpieniami zarezerwowanymi, możesz użyć tylko tych maszyn wirtualnych jako puli początkowej.
W klastrze można mieć wiele definicji puli węzłów, ale usługa AKS wdraża domyślną definicję puli węzłów, którą można zmodyfikować:
apiVersion: karpenter.sh/v1beta1
kind: NodePool
metadata:
name: default
spec:
disruption:
consolidationPolicy: WhenUnderutilized
expireAfter: Never
template:
spec:
nodeClassRef:
name: default
# Requirements that constrain the parameters of provisioned nodes.
# These requirements are combined with pod.spec.affinity.nodeAffinity rules.
# Operators { In, NotIn, Exists, DoesNotExist, Gt, and Lt } are supported.
# https://kubernetes.io/docs/concepts/scheduling-eviction/assign-pod-node/#operators
requirements:
- key: kubernetes.io/arch
operator: In
values:
- amd64
- key: kubernetes.io/os
operator: In
values:
- linux
- key: karpenter.sh/capacity-type
operator: In
values:
- on-demand
- key: karpenter.azure.com/sku-family
operator: In
values:
- D
Obsługiwane wymagania dotyczące aprowizacji węzłów
Selektory jednostek SKU z dobrze znanymi etykietami
Selektor | opis | Przykład |
---|---|---|
karpenter.azure.com/sku-family | Rodzina jednostek SKU maszyny wirtualnej | D, F, L itp. |
karpenter.azure.com/sku-name | Jawna nazwa jednostki SKU | Standardowa_A1_v2 |
karpenter.azure.com/sku-version | Wersja jednostki SKU (bez wartości "v" może być używana 1) | 1 , 2 |
karpenter.sh/capacity-type | Typ alokacji maszyny wirtualnej (spot/na żądanie) | spot lub na żądanie |
karpenter.azure.com/sku-cpu | Liczba procesorów CPU na maszynie wirtualnej | 16 |
karpenter.azure.com/sku-memory | Pamięć na maszynie wirtualnej w usłudze MiB | 131072 |
karpenter.azure.com/sku-gpu-name | Nazwa procesora GPU | A100 |
karpenter.azure.com/sku-gpu-manufacturer | Producent procesora GPU | nvidia |
karpenter.azure.com/sku-gpu-count | Liczba procesorów GPU na maszynę wirtualną | 2 |
karpenter.azure.com/sku-networking-accelerated | Czy maszyna wirtualna ma przyspieszoną sieć | [true, false] |
karpenter.azure.com/sku-storage-premium-capable | Czy maszyna wirtualna obsługuje magazyn we/wy w warstwie Premium | [true, false] |
karpenter.azure.com/sku-storage-ephemeralos-maxsize | Limit rozmiaru dysku efemerycznego systemu operacyjnego w Gb | 92 |
topology.kubernetes.io/zone | Strefy dostępności | [uksouth-1,uksouth-2,uksouth-3] |
kubernetes.io/os | System operacyjny (system Linux tylko w wersji zapoznawczej) | linux |
kubernetes.io/arch | Architektura procesora CPU (AMD64 lub ARM64) | [amd64, arm64] |
Aby wyświetlić listę możliwości jednostki SKU maszyny wirtualnej i dozwolone wartości, użyj vm list-skus
polecenia z poziomu interfejsu wiersza polecenia platformy Azure.
az vm list-skus --resource-type virtualMachines --location <location> --query '[].name' --output table
Limity puli węzłów
Domyślnie ochrona dostępu do sieci próbuje zaplanować obciążenia w ramach dostępnego limitu przydziału platformy Azure. Można również określić górny limit zasobów używanych przez pulę węzłów, określając limity w ramach specyfikacji puli węzłów.
# Resource limits constrain the total size of the cluster.
# Limits prevent Karpenter from creating new instances once the limit is exceeded.
limits:
cpu: "1000"
memory: 1000Gi
Wagi puli węzłów
Jeśli zdefiniowano wiele pul węzłów, można ustawić preferencję, w której ma być zaplanowane obciążenie. Zdefiniuj względną wagę w definicjach puli węzłów.
# Priority given to the node pool when the scheduler considers which to select. Higher weights indicate higher priority when comparing node pools.
# Specifying no weight is equivalent to specifying a weight of 0.
weight: 10
Aktualizacje obrazu platformy Kubernetes i węzła
Usługa AKS z funkcją ochrony dostępu do sieci zarządza uaktualnieniami wersji platformy Kubernetes i aktualizacjami dysków systemu operacyjnego maszyny wirtualnej domyślnie.
Uaktualnienia platformy Kubernetes
Uaktualnienia platformy Kubernetes dla pul węzłów ochrony dostępu do sieci są zgodne z wersją platformy Kubernetes płaszczyzny sterowania. Jeśli przeprowadzisz uaktualnienie klastra, węzły ochrony dostępu do sieci zostaną automatycznie zaktualizowane w celu wykonania tej samej wersji.
Aktualizacje obrazu węzła
Domyślnie maszyny wirtualne puli węzłów ochrony dostępu do sieci są automatycznie aktualizowane po udostępnieniu nowego obrazu. Jeśli chcesz przypiąć pulę węzłów w określonej wersji obrazu węzła, możesz ustawić parametr imageVersion w klasie node:
kubectl edit aksnodeclass default
W definicji klasy node ustaw wartość imageVersion na jedną z opublikowanych wersji wymienionych w informacjach o wersji usługi AKS. Dostępność obrazów można również zobaczyć w regionach, odwołując się do monitora wersji usługi AKS
ImageVersion to część daty w obrazie węzła, ponieważ obsługiwana jest tylko wersja Ubuntu 22.04, na przykład "AKSUbuntu-2204-202311.07.0" to "202311.07.0"
apiVersion: karpenter.azure.com/v1alpha2
kind: AKSNodeClass
metadata:
annotations:
kubernetes.io/description: General purpose AKSNodeClass for running Ubuntu2204
nodes
meta.helm.sh/release-name: aks-managed-karpenter-overlay
meta.helm.sh/release-namespace: kube-system
creationTimestamp: "2023-11-16T23:59:06Z"
generation: 1
labels:
app.kubernetes.io/managed-by: Helm
helm.toolkit.fluxcd.io/name: karpenter-overlay-main-adapter-helmrelease
helm.toolkit.fluxcd.io/namespace: 6556abcb92c4ce0001202e78
name: default
resourceVersion: "1792"
uid: 929a5b07-558f-4649-b78b-eb25e9b97076
spec:
imageFamily: Ubuntu2204
imageVersion: 202311.07.0
osDiskSizeGB: 128
Usunięcie specyfikacji imageVersion spowoduje przywrócenie puli węzłów do zaktualizowania do najnowszej wersji obrazu węzła.
Zakłócenia węzła
Gdy obciążenia w węzłach są skalowane w dół, ochrona dostępu do sieci używa reguł zakłóceń w specyfikacji puli węzłów, aby zdecydować, kiedy i jak usunąć te węzły i potencjalnie ponownie zaplanować obciążenia, aby były bardziej wydajne.
Węzeł można usunąć ręcznie przy użyciu kubectl delete node
programu , ale ochrona dostępu do sieci może również kontrolować, kiedy powinien zoptymalizować węzły.
disruption:
# Describes which types of Nodes NAP should consider for consolidation
consolidationPolicy: WhenUnderutilized | WhenEmpty
# 'WhenUnderutilized', NAP will consider all nodes for consolidation and attempt to remove or replace Nodes when it discovers that the Node is underutilized and could be changed to reduce cost
# `WhenEmpty`, NAP will only consider nodes for consolidation that contain no workload pods
# The amount of time NAP should wait after discovering a consolidation decision
# This value can currently only be set when the consolidationPolicy is 'WhenEmpty'
# You can choose to disable consolidation entirely by setting the string value 'Never'
consolidateAfter: 30s
Monitorowanie zdarzeń wyboru
Automatyczna aprowizacja węzła tworzy zdarzenia klastra, które mogą służyć do monitorowania podejmowania decyzji dotyczących wdrażania i planowania. Zdarzenia można wyświetlać za pośrednictwem strumienia zdarzeń platformy Kubernetes.
kubectl get events -A --field-selector source=karpenter -w
Azure Kubernetes Service