Catatan
Akses ke halaman ini memerlukan otorisasi. Anda dapat mencoba masuk atau mengubah direktori.
Akses ke halaman ini memerlukan otorisasi. Anda dapat mencoba mengubah direktori.
Saat Anda menyebarkan beban kerja ke AKS, Anda perlu membuat keputusan tentang konfigurasi kumpulan simpul mengenai ukuran VM yang diperlukan. Ketika beban kerja Anda semakin kompleks dan memerlukan penggunaan CPU, memori, dan kemampuan yang berbeda, maka kelebihan beban dalam merancang konfigurasi VM untuk memenuhi berbagai permintaan sumber daya menjadi semakin sulit.
Penyediaan otomatis simpul (NAP) (pratinjau) menggunakan persyaratan sumber daya pod yang belum terpenuhi untuk memutuskan konfigurasi mesin virtual yang optimal agar dapat menjalankan beban kerja tersebut dengan cara yang paling efisien dan hemat biaya.
NAP didasarkan pada proyek Karpenter sumber terbuka, dan penyedia AKS juga bersumber terbuka. NAP secara otomatis menyebarkan dan mengonfigurasi dan mengelola Karpenter pada kluster AKS Anda.
Penting
Penyediaan otomatis simpul (NAP) untuk AKS saat ini sedang dalam tahap PRATINJAU. Lihat Ketentuan Penggunaan Tambahan untuk Pratinjau Microsoft Azure untuk persyaratan hukum yang berlaku pada fitur Azure dalam versi beta, pratinjau, atau belum dirilis secara umum.
Sebelum Anda mulai
- Anda memerlukan langganan Azure. Jika Anda tidak memiliki langganan Azure, Anda dapat membuat akun gratis.
- Anda memerlukan Azure CLI yang terinstal.
-
aks-preview
Instal ekstensi Azure CLI. Versi minimum 0.5.170. - Daftarkan pengatur fitur NodeAutoProvisioningPreview.
aks-preview
Menginstal ekstensi CLI
Instal ekstensi CLI menggunakan perintah
aks-preview
.az extension add --name aks-preview
Perbarui ekstensi untuk memastikan Anda memiliki versi terbaru yang terinstal menggunakan
az extension update
perintah .az extension update --name aks-preview
Daftarkan NodeAutoProvisioningPreview
bendera fitur
Daftarkan
NodeAutoProvisioningPreview
bendera fitur menggunakanaz feature register
perintah .az feature register --namespace "Microsoft.ContainerService" --name "NodeAutoProvisioningPreview"
Dibutuhkan beberapa menit agar status menampilkan Terdaftar.
Verifikasi status pendaftaran menggunakan
az feature show
perintah .az feature show --namespace "Microsoft.ContainerService" --name "NodeAutoProvisioningPreview"
Saat status mencerminkan Terdaftar, perbarui registrasi penyedia sumber daya Microsoft.ContainerService menggunakan perintah
az provider register
.az provider register --namespace Microsoft.ContainerService
Batasan
- Anda tidak dapat mengaktifkannya di kluster di mana kumpulan simpul memiliki autoscaler kluster yang diaktifkan.
Fitur yang tidak didukung
- Kumpulan simpul Windows
- Menerapkan konfigurasi kustom ke node kubelet
- Kluster IPv6
-
Perwakilan Layanan
Catatan
Anda dapat menggunakan identitas terkelola yang ditetapkan sistem atau ditetapkan pengguna.
- Set enkripsi disk
- Sertifikat Kepercayaan CA Kustom
- Mode Mulai dan Berhenti
- Proksi HTTP
- Perubahan OutboundType. Semua OutboundTypes didukung, namun Anda tidak dapat mengubahnya setelah pembuatan.
- Kluster privat (dan bawa DNS privat Anda sendiri)
Konfigurasi Jaringan
Konfigurasi jaringan yang direkomendasikan untuk kluster yang diaktifkan dengan Node Autoprovisioning adalah sebagai berikut:
- Azure CNI Overlay dengan Ditenagai oleh Cilium
- Azure CNI Overlay
- Azure CNI dengan Ditenagai oleh Cilium
- Azure CNI
Mesin kebijakan jaringan yang kami rekomendasikan adalah Cilium.
Konfigurasi jaringan berikut saat ini tidak didukung:
- Kebijakan jaringan Calico
- Alokasi IP Dinamis
- Alokasi Statis blok CIDR
Mengaktifkan penyediaan otomatis node
Aktifkan penyediaan otomatis simpul pada kluster baru
Aktifkan penyediaan otomatis simpul pada kluster baru menggunakan perintah
az aks create
dan atur--node-provisioning-mode
keAuto
. Anda juga perlu mengatur--network-plugin
keazure
,--network-plugin-mode
keoverlay
, dan--network-dataplane
kecilium
.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
Aktifkan penyediaan otomatis node pada kluster yang ada
Aktifkan provisi otomatis simpul pada kluster yang ada dengan perintah
az aks update
dan atur--node-provisioning-mode
keAuto
. Anda juga perlu mengatur--network-plugin
keazure
,--network-plugin-mode
keoverlay
, dan--network-dataplane
kecilium
.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
Kumpulan simpul
Penyediaan otomatis node menggunakan daftar SKU VM sebagai titik awal untuk memutuskan SKU mana yang paling cocok untuk beban kerja yang tertunda. Memiliki kontrol atas SKU apa yang Anda inginkan di kumpulan awal memungkinkan Anda menentukan keluarga SKU atau jenis komputer virtual tertentu dan jumlah maksimum sumber daya yang digunakan penyedia. Anda juga dapat merujuk spesifikasi yang berbeda dalam file node pool, seperti menentukan instans spot atau sesuai permintaan, beberapa arsitektur, dan banyak lagi.
Jika Anda memiliki ukuran komputer virtual tertentu yang merupakan instans cadangan, misalnya, Anda mungkin hanya ingin menggunakan komputer virtual tersebut sebagai kumpulan awal.
Anda dapat memiliki beberapa definisi kumpulan simpul dalam kluster, tetapi AKS menyebarkan definisi kumpulan simpul default yang dapat Anda ubah:
apiVersion: karpenter.sh/v1
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
Persyaratan penyedia node yang didukung
Pemilih SKU dengan label terkenal
Selektor | Deskripsi | Contoh |
---|---|---|
karpenter.azure.com/sku-family | Keluarga SKU dari VM | D, F, L dll. |
karpenter.azure.com/sku-name | Nama SKU eksplisit | Standard_A1_v2 |
karpenter.azure.com/sku-version | Versi SKU (tanpa "v", dapat menggunakan 1) | 1 , 2 |
karpenter.sh/capacity-type | Jenis alokasi VM (Spot / Sesuai Permintaan) | langsung atau sesuai permintaan |
karpenter.azure.com/sku-cpu | Jumlah CPU dalam VM | 16 |
karpenter.azure.com/sku-memory | Memori dalam Mesin Virtual di MiB | 131072 |
karpenter.azure.com/sku-gpu-name | Nama GPU | A100 |
karpenter.azure.com/sku-gpu-manufacturer | Produsen GPU | nvidia |
karpenter.azure.com/sku-gpu-count | Jumlah GPU per VM | 2 |
karpenter.azure.com/sku-networking-accelerated (Jaringan dipercepat) | Apakah VM telah mempercepat jaringan | [benar, salah] |
karpenter.azure.com/sku-penyimpanan-premium-mampu | Apakah VM mendukung penyimpanan IO Premium | [benar, salah] |
karpenter.azure.com/sku-storage-ephemeralos-maxsize | Batas ukuran untuk disk OS Ephemeral dalam Gb | 92 |
topology.kubernetes.io/zone | Zona Ketersediaan | [uksouth-1,uksouth-2,uksouth-3] |
kubernetes.io/os | Sistem Operasi (Linux hanya selama pratinjau) | linux |
kubernetes.io/arch | Arsitektur CPU (AMD64 atau ARM64) | [amd64, arm64] |
Untuk mencantumkan kemampuan SKU komputer virtual dan nilai yang diizinkan, gunakan perintah vm list-skus
Azure CLI.
az vm list-skus --resource-type virtualMachines --location <location> --query '[].name' --output table
Batas jumlah simpul dalam kumpulan
Secara bawaan, penyediaan otomatis node mencoba menjadwalkan beban kerja Anda dalam kuota Azure yang Anda miliki. Anda juga dapat menentukan batas atas sumber daya yang digunakan oleh kumpulan simpul, menentukan batas dalam spesifikasi kumpulan simpul.
# 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
Bobot kumpulan node
Ketika Anda memiliki beberapa kumpulan simpul yang ditentukan, Dimungkinkan untuk mengatur preferensi di mana beban kerja harus dijadwalkan. Tentukan bobot relatif pada definisi kumpulan Simpul Anda.
# 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
Pembaruan Gambar Kubernetes dan Node
AKS dengan penyediaan otomatis simpul secara default mengelola peningkatan versi Kubernetes dan pembaruan disk OS VM untuk Anda.
Pemutakhiran Kubernetes
Peningkatan Kubernetes untuk simpul provisi otomatis simpul mengikuti versi Kubernetes sarana kontrol. Jika Anda melakukan peningkatan kluster, simpul provisi otomatis Anda secara otomatis diperbarui untuk mengikuti versi yang sama.
Pembaruan citra node
Secara default, komputer virtual kumpulan simpul NAP secara otomatis diperbarui saat gambar baru tersedia. Jika Anda ingin menyematkan kumpulan simpul pada versi gambar simpul tertentu, Anda dapat mengatur imageVersion pada kelas node:
kubectl edit aksnodeclass default
Dalam definisi kelas simpul, atur imageVersion ke salah satu rilis yang diterbitkan yang tercantum pada Catatan Rilis AKS. Anda juga dapat melihat ketersediaan gambar di wilayah dengan merujuk ke pelacak rilis AKS
ImageVersion adalah bagian tanggal pada Gambar Simpul karena hanya Ubuntu 22.04 yang didukung, misalnya, "AKSUbuntu-2204-202311.07.0" adalah "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
Menghapus spesifikasi imageVersion akan mengembalikan kumpulan simpul untuk diperbarui ke versi gambar simpul terbaru.
Penting
Setelah Anda memperbarui kunci SSH, AKS tidak secara otomatis memperbarui simpul Anda. Kapan saja, Anda dapat memilih untuk melakukan [operasi pembaruan nodepool][node-image-upgrade]. Operasi perbarui kunci SSH berlaku setelah pembaruan gambar simpul selesai. Untuk kluster dengan Otomatisasi Provisi Simpul diaktifkan, pembaruan image simpul dapat dilakukan dengan menerapkan label baru ke resource kustom NodePool Kubernetes.
Gangguan node
Ketika beban kerja pada simpul Anda mengurangi skala, penyediaan otomatis simpul menggunakan aturan gangguan pada spesifikasi kumpulan simpul untuk memutuskan kapan dan bagaimana menghapus simpul tersebut dan kemungkinan menjadwalkan ulang beban kerja Anda agar lebih efisien. Ini terutama dilakukan melalui konsolidasi, yang menghapus atau mengganti simpul untuk meng-bin-pack pod Anda dalam konfigurasi optimal. Pertimbangan berbasis status menggunakan ConsolidationPolicy
seperti WhenUnderUtilized
, WhenEmpty
, atau WhenEmptyOrUnderUtilized
untuk memicu konsolidasi.
consolidateAfter
adalah kondisi berbasis waktu yang dapat diatur untuk memungkinkan waktu buffer antar tindakan.
Anda dapat menghapus simpul secara manual menggunakan kubectl delete node
, tetapi sistem otomatis provisi simpul juga dapat mengontrol kapan sistem harus mengoptimalkan simpul berdasarkan spesifikasi Anda.
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
Memantau peristiwa pemilihan
Provisi otomatis node menghasilkan peristiwa kluster yang dapat digunakan untuk memantau keputusan penyebaran dan penjadwalan yang dibuat. Anda dapat melihat peristiwa melalui aliran peristiwa Kubernetes.
kubectl get events -A --field-selector source=karpenter -w
Menonaktifkan penyediaan otomatis node
Provisi otomatis simpul hanya dapat dinonaktifkan saat:
- Tidak ada simpul yang dikelola NAP yang ada. Gunakan
kubectl get nodes -l karpenter.sh/nodepool
untuk melihat simpul yang dikelola NAP. - Semua karpenter.sh/NodePools yang ada telah
spec.limits.cpu
diatur ke 0.
Langkah-langkah untuk menonaktifkan penyediaan otomatis pada simpul
- Atur semua kolom karpenter.sh/NodePools
spec.limits.cpu
ke 0. Ini mencegah simpul baru dibuat, tetapi tidak mengganggu simpul yang sedang berjalan.
Catatan
Jika Anda tidak peduli untuk memastikan bahwa setiap pod yang berjalan pada node NAP dimigrasikan dengan aman ke node non-NAP, Anda dapat melewati langkah 2 dan 3 dan gunakan saja perintah kubectl delete node
pada setiap node yang dikelola NAP.
Melewati langkah 2 dan 3 tidak disarankan, karena mungkin meninggalkan beberapa pod tertunda dan tidak mematuhi PDB.
Jangan jalankan kubectl delete node
pada simpul apa pun yang tidak dikelola oleh NAP.
Tambahkan
karpenter.azure.com/disable:NoSchedule
taint ke setiap karpenter.sh/NodePool.apiVersion: karpenter.sh/v1 kind: NodePool metadata: name: default spec: template: spec: ... taints: - key: karpenter.azure.com/disable, effect: NoSchedule
Ini akan memulai proses migrasi beban kerja IT pada simpul yang dikelola NAP ke node non-NAP, dengan memperhatikan PDB dan batas gangguan operasi. Pod akan bermigrasi ke node non-NAP jika sesuai. Jika kapasitas ukuran tetap tidak cukup, beberapa simpul yang dikelola NAP akan tetap bertahan.
Tingkatkan skala ManagedCluster AgentPools ukuran tetap yang ada, atau buat AgentPools ukuran tetap baru, untuk mengambil beban dari simpul yang dikelola NAP. Ketika simpul ini ditambahkan ke kluster, simpul yang dikelola NAP dilepaskan, dan pekerjaan dimigrasikan ke simpul berukuran tetap.
Pastikan bahwa semua simpul yang dikelola oleh NAP telah dihapus, menggunakan
kubectl get nodes -l karpenter.sh/nodepool
. Jika masih ada simpul yang dikelola NAP, kemungkinan itu berarti bahwa kluster berada di luar kapasitas skala tetap dan membutuhkan lebih banyak simpul sehingga beban kerja yang tersisa dapat dimigrasikan.Perbarui parameter mode provisi node dari ManagedCluster ke
Manual
.az aks update \ --name $CLUSTER_NAME \ --resource-group $RESOURCE_GROUP_NAME \ --node-provisioning-mode Manual
Azure Kubernetes Service