Provisi otomatis simpul (pratinjau)

Saat Anda menyebarkan beban kerja ke AKS, Anda perlu membuat keputusan tentang konfigurasi kumpulan simpul mengenai ukuran VM yang diperlukan. Saat beban kerja Anda menjadi lebih kompleks, dan memerlukan CPU, memori, dan kemampuan yang berbeda untuk dijalankan, overhead harus merancang konfigurasi VM Anda untuk banyak permintaan sumber daya menjadi sulit.

Provisi otomatis simpul (NAP) (pratinjau) memutuskan berdasarkan persyaratan sumber daya pod yang tertunda, konfigurasi VM optimal untuk menjalankan beban kerja tersebut dengan cara yang paling efisien dan hemat biaya.

NAP didasarkan pada proyek Open Source Karpenter , dan penyedia AKS juga Open Source. NAP secara otomatis menyebarkan dan mengonfigurasi dan mengelola Karpenter pada kluster AKS Anda.

Penting

Provisi otomatis simpul (NAP) untuk AKS saat ini dalam 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

aks-preview Menginstal ekstensi CLI

  1. aks-preview Instal ekstensi CLI menggunakan az extension add perintah .

    az extension add --name aks-preview
    
  2. 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

  1. Daftarkan NodeAutoProvisioningPreview bendera fitur menggunakan az feature register perintah .

    az feature register --namespace "Microsoft.ContainerService" --name "NodeAutoProvisioningPreview"
    

    Dibutuhkan beberapa menit agar status menampilkan Terdaftar.

  2. Verifikasi status pendaftaran menggunakan az feature show perintah .

    az feature show --namespace "Microsoft.ContainerService" --name "NodeAutoProvisioningPreview"
    
  3. Saat status mencerminkan Terdaftar, refresh pendaftaran penyedia sumber daya Microsoft.ContainerService menggunakan az provider register perintah .

    az provider register --namespace Microsoft.ContainerService
    

Batasan

  • Satu-satunya konfigurasi jaringan yang diizinkan adalah Cilium + Overlay + Azure
  • Anda tidak dapat mengaktifkan di kluster tempat kumpulan simpul mengaktifkan autoscaler kluster

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
  • CustomCATrustCertificates
  • Mode Mulai Berhenti
  • Proksi HTTP
  • Mutasi OutboundType . Semua OutboundTypes didukung, namun Anda tidak dapat mengubahnya setelah pembuatan.

Mengaktifkan provisi otomatis simpul

Untuk mengaktifkan provisi otomatis simpul, buat kluster baru menggunakan perintah az aks create dan atur --node-provisioning-mode ke "Auto". Anda juga harus menggunakan jaringan overlay dan kebijakan jaringan cilium.

az aks create --name karpuktest --resource-group karpuk --node-provisioning-mode Auto --network-plugin azure --network-plugin-mode overlay --network-dataplane cilium

Kumpulan simpul

Provisi otomatis simpul menggunakan daftar SKU VM sebagai titik awal untuk memutuskan mana yang paling cocok untuk beban kerja yang dalam keadaan tertunda. Memiliki kontrol atas SKU apa yang Anda inginkan di kumpulan awal memungkinkan Anda menentukan keluarga SKU tertentu, atau jenis VM dan jumlah maksimum sumber daya yang digunakan penyedia.

Jika Anda memiliki SKU VM tertentu yang merupakan instans cadangan, misalnya, Anda mungkin hanya ingin menggunakan VM 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/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

Persyaratan provisi node yang didukung

Pemilih SKU dengan label terkenal

Pemilih Deskripsi Contoh
karpenter.azure.com/sku-family Keluarga SKU 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) spot atau sesuai permintaan
karpenter.azure.com/sku-cpu Jumlah CPU dalam VM 16
karpenter.azure.com/sku-memory Memori dalam VM 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 Apakah VM telah mempercepat jaringan [benar, salah]
karpenter.azure.com/sku-storage-premium-capable 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 VM dan nilai yang vm list-skus diizinkan, gunakan perintah dari Azure CLI.

az vm list-skus --resource-type virtualMachines --location <location> --query '[].name' --output table

Batas kumpulan simpul

Secara default, NAP mencoba menjadwalkan beban kerja Anda dalam kuota Azure yang telah Anda sediakan. 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 simpul

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 NAP mengelola peningkatan versi Kubernetes dan pembaruan disk OS VM untuk Anda secara default.

Peningkatan Kubernetes

Peningkatan Kubernetes untuk kumpulan simpul NAP mengikuti versi Kubernetes Sarana Kontrol. Jika Anda melakukan peningkatan kluster, simpul NAP Anda diperbarui secara otomatis untuk mengikuti penerapan versi yang sama.

Pembaruan gambar 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.

Gangguan node

Ketika beban kerja pada simpul Anda diturunkan skalanya, NAP menggunakan aturan gangguan pada spesifikasi kumpulan Simpul untuk memutuskan kapan dan bagaimana menghapus simpul tersebut dan berpotensi menjadwalkan ulang beban kerja Anda agar lebih efisien.

Anda dapat menghapus simpul secara manual menggunakan kubectl delete node, tetapi NAP juga dapat mengontrol kapan simpul harus mengoptimalkan simpul 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