Bagikan melalui


Penyediaan Otomatis Node (Pratinjau)

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

aks-preview Menginstal ekstensi CLI

  1. Instal ekstensi CLI menggunakan perintah aks-preview.

    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, 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:

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 ke Auto. Anda juga perlu mengatur --network-plugin ke azure, --network-plugin-mode ke overlay, dan --network-dataplane ke cilium.

    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 ke Auto. Anda juga perlu mengatur --network-plugin ke azure, --network-plugin-mode ke overlay, dan --network-dataplane ke cilium.

    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

  1. 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.

  1. 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.

  2. 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.

  3. 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.

  4. Perbarui parameter mode provisi node dari ManagedCluster ke Manual.

    az aks update \
        --name $CLUSTER_NAME \
        --resource-group $RESOURCE_GROUP_NAME \
        --node-provisioning-mode Manual