Mengelola kumpulan simpul untuk kluster di Azure Kubernetes Service (AKS)
Di Azure Kubernetes Service (AKS), simpul dengan konfigurasi yang sama dikelompokkan bersama ke dalam kumpulan simpul. Kumpulan simpul ini berisi VM dasar yang menjalankan aplikasi Anda. Saat membuat kluster AKS, Anda menentukan jumlah awal simpul dan ukurannya (SKU). Saat permintaan aplikasi berubah, Anda mungkin perlu mengubah pengaturan pada kumpulan simpul Anda. Misalnya, Anda mungkin perlu menskalakan jumlah simpul dalam kumpulan simpul atau meningkatkan versi Kubernetes dari kumpulan simpul.
Artikel ini memperlihatkan kepada Anda cara mengelola satu atau beberapa kumpulan simpul dalam kluster AKS.
- Tinjau Membuat kumpulan simpul untuk kluster di Azure Kubernetes Service (AKS) untuk mempelajari cara membuat kumpulan simpul untuk kluster AKS Anda.
- Anda memerlukan Azure CLI versi 2.2.0 atau yang lebih baru terpasang dan terkonfigurasi. Jalankan
az --version
untuk menemukan versinya. Jika Anda perlu memasang atau meningkatkan, lihat Memasang Azure CLI. - Tinjau opsi Penyimpanan untuk aplikasi di Azure Kubernetes Service untuk merencanakan konfigurasi penyimpanan Anda.
Batasan berikut berlaku saat Anda membuat dan mengelola kluster AKS yang mendukung beberapa kumpulan simpul:
- Lihat Kuota, pembatasan komputer virtual, dan ketersediaan wilayah di Azure Kubernetes Service (AKS).
- Kumpulan sistem harus berisi setidaknya satu simpul, dan kumpulan simpul pengguna mungkin berisi nol atau lebih simpul.
- Anda tidak dapat mengubah ukuran VM dari kumpulan node setelah membuatnya.
- Saat Anda membuat beberapa kumpulan simpul pada waktu pembuatan kluster, semua versi Kubernetes yang digunakan oleh kumpulan simpul harus cocok dengan versi yang ditetapkan untuk sarana kontrol. Anda dapat membuat pembaruan setelah memprovisikan kluster menggunakan operasi kumpulan per simpul.
- Anda tidak dapat menjalankan operasi peningkatan dan penskalaan secara bersamaan pada kluster atau kumpulan simpul. Jika Anda mencoba menjalankannya pada saat yang sama, Anda menerima kesalahan. Setiap jenis operasi harus diselesaikan pada sumber daya target sebelum permintaan berikutnya pada sumber daya yang sama. Untuk informasi selengkapnya, lihat panduan pemecahan masalah.
Catatan
Versi gambar kumpulan simpul OS terikat pada versi Kubernetes kluster tersebut. Anda hanya mendapatkan peningkatan gambar OS, setelah peningkatan kluster.
Dalam contoh ini, kami meningkatkan kumpulan simpul mynodepool . Karena ada dua kumpulan simpul, kita harus menggunakan az aks nodepool upgrade
perintah untuk meningkatkan.
Periksa peningkatan yang tersedia menggunakan
az aks get-upgrades
perintah .az aks get-upgrades --resource-group myResourceGroup --name myAKSCluster
Tingkatkan kumpulan simpul mynodepool menggunakan
az aks nodepool upgrade
perintah .az aks nodepool upgrade \ --resource-group myResourceGroup \ --cluster-name myAKSCluster \ --name mynodepool \ --kubernetes-version KUBERNETES_VERSION \ --no-wait
Cantumkan status kumpulan simpul Anda menggunakan
az aks nodepool list
perintah .az aks nodepool list --resource-group myResourceGroup --cluster-name myAKSCluster
Contoh output berikut menunjukkan mynodepool berada dalam status Peningkatan :
[ { ... "count": 3, ... "name": "mynodepool", "orchestratorVersion": "KUBERNETES_VERSION", ... "provisioningState": "Upgrading", ... "vmSize": "Standard_DS2_v2", ... }, { ... "count": 2, ... "name": "nodepool1", "orchestratorVersion": "1.15.7", ... "provisioningState": "Succeeded", ... "vmSize": "Standard_DS2_v2", ... } ]
Butuh waktu beberapa menit untuk memutakhirkan simpul ke versi yang ditentukan.
Sebagai praktik terbaik, Anda harus meningkatkan semua kumpulan simpul dalam kluster AKS ke versi Kubernetes yang sama. Perilaku default az aks upgrade
adalah meningkatkan semua kumpulan simpul bersama dengan sarana kontrol untuk mencapai keselarasan ini. Kemampuan untuk meningkatkan masing-masing kumpulan simpul memungkinkan Anda melakukan peningkatan berkelanjutan dan menjadwalkan sejumlah Pod antar kumpulan simpul untuk menjaga waktu aktif aplikasi dalam berbagai batasan yang disebutkan di atas.
Catatan
Kubernetes menggunakan skema penerapan versi Penerapan Versi Semantik standar. Nomor versi dinyatakan sebagai x.y.z, di mana x adalah versi mayor, y adalah versi minor, dan z adalah versi patch. Misalnya, dalam versi 1.12.6, 1 adalah versi mayor, 12 adalah versi minor, dan 6 adalah versi patch. Versi Kubernetes dari sarana kontrol dan kumpulan simpul awal diatur selama pembuatan kluster. Kumpulan simpul lain memiliki versi Kubernetes yang ditetapkan ketika ditambahkan ke kluster. Versi Kubernetes mungkin berbeda antara kumpulan simpul dan antara kumpulan simpul dan sarana kontrol.
Kluster AKS memiliki dua objek sumber daya kluster dengan versi Kubernetes yang terkait dengannya:
- Versi Kubernetes sarana kontrol kluster, dan
- Sebuah kumpulan simpul dengan versi Kubernetes.
Sarana kontrol memetakan ke satu atau banyak kumpulan simpul. Perilaku operasi peningkatan bergantung pada perintah Azure CLI mana yang Anda gunakan.
az aks upgrade
meningkatkan sarana kontrol dan semua kumpulan simpul dalam kluster ke versi Kubernetes yang sama.az aks upgrade
--control-plane-only
dengan bendera hanya meningkatkan sarana kontrol kluster dan membuat semua kumpulan simpul tidak berubah.az aks nodepool upgrade
meningkatkan hanya kumpulan simpul target dengan versi Kubernetes yang ditentukan.
Peningkatan Kubernetes untuk sarana kontrol kluster dan kumpulan simpul divalidasi menggunakan serangkaian aturan berikut:
Aturan untuk versi yang valid untuk meningkatkan kumpulan simpul:
- Versi kumpulan simpul harus memiliki versi mayor yang sama dengan sarana kontrol.
- Versi kumpulan simpul minor harus dalam dua versi minor dari versi sarana kontrol.
- Versi kumpulan node tidak boleh lebih besar dari versi
major.minor.patch
kontrol.
Aturan untuk mengirimkan operasi peningkatan:
- Anda tidak dapat menurunkan versi sarana kontrol atau kumpulan node versi Kubernetes.
- Jika versi Kubernetes kumpulan simpul tidak ditentukan, perilaku bergantung pada klien. Dalam templat Resource Manager, deklarasi kembali ke versi yang ada yang ditentukan untuk kumpulan simpul. Jika tidak ada yang diatur, ia menggunakan versi sarana kontrol untuk kembali aktif.
- Anda tidak dapat mengirimkan beberapa operasi secara bersamaan pada satu sarana kontrol atau sumber daya kumpulan simpul. Anda dapat meningkatkan atau menskalakan sarana kontrol atau kumpulan simpul pada waktu tertentu.
Ketika beban kerja aplikasi Anda menuntut perubahan, Anda mungkin perlu menskalakan jumlah simpul dalam kumpulan simpul. Jumlah simpul dapat dinaikkan atau diturunkan.
Skalakan jumlah simpul dalam kumpulan simpul menggunakan
az aks node pool scale
perintah .az aks nodepool scale \ --resource-group myResourceGroup \ --cluster-name myAKSCluster \ --name mynodepool \ --node-count 5 \ --no-wait
Cantumkan status kumpulan simpul Anda menggunakan
az aks node pool list
perintah .az aks nodepool list --resource-group myResourceGroup --cluster-name myAKSCluster
Contoh output berikut menunjukkan mynodepool berada dalam status Penskalaan dengan jumlah baru lima node:
[ { ... "count": 5, ... "name": "mynodepool", "orchestratorVersion": "1.15.7", ... "provisioningState": "Scaling", ... "vmSize": "Standard_DS2_v2", ... }, { ... "count": 2, ... "name": "nodepool1", "orchestratorVersion": "1.15.7", ... "provisioningState": "Succeeded", ... "vmSize": "Standard_DS2_v2", ... } ]
Dibutuhkan beberapa menit untuk menyelesaikan operasi skala.
AKS menawarkan fitur terpisah untuk menskalakan kumpulan simpul secara otomatis dengan fitur yang disebut autoscaler kluster. Anda dapat mengaktifkan fitur ini dengan jumlah skala minimum dan maksimum yang unik per kumpulan simpul.
Untuk informasi selengkapnya, lihat menggunakan autoscaler kluster.
Untuk informasi selengkapnya, lihat Menghapus VM tertentu di kumpulan simpul yang ada.
Saat beban kerja Anda berubah, Anda dapat mengaitkan grup reservasi kapasitas yang ada ke kumpulan simpul untuk menjamin kapasitas yang dialokasikan untuk kumpulan simpul Anda.
Gunakan CLI versi 2.56 atau lebih tinggi dan API versi 2023-10-01 atau yang lebih tinggi.
Grup reservasi kapasitas harus sudah ada dan harus berisi minimum satu reservasi kapasitas, jika tidak, kumpulan simpul ditambahkan ke kluster dengan peringatan dan tidak ada grup reservasi kapasitas yang terkait. Untuk informasi selengkapnya, lihat grup reservasi kapasitas.
Anda perlu membuat identitas terkelola yang ditetapkan pengguna untuk grup sumber daya yang berisi grup reservasi kapasitas (CRG). Identitas terkelola yang ditetapkan sistem tidak akan berfungsi untuk fitur ini. Dalam contoh berikut, ganti variabel lingkungan dengan nilai Anda sendiri.
IDENTITY_NAME=myID RG_NAME=myResourceGroup CLUSTER_NAME=myAKSCluster VM_SKU=Standard_D4s_v3 NODE_COUNT=2 LOCATION=westus2 az identity create --name $IDENTITY_NAME --resource-group $RG_NAME IDENTITY_ID=$(az identity show --name $IDENTITY_NAME --resource-group $RG_NAME --query identity.id -o tsv)
Anda perlu menetapkan peran ke
Contributor
identitas yang ditetapkan pengguna yang dibuat di atas. Untuk detail selengkapnya, lihat Langkah-langkah untuk menetapkan peran Azure.Buat kluster baru dan tetapkan identitas yang baru dibuat.
az aks create \ --resource-group $RG_NAME \ --name $CLUSTER_NAME \ --location $LOCATION \ --node-vm-size $VM_SKU --node-count $NODE_COUNT \ --assign-identity $IDENTITY_ID \ --generate-ssh-keys
Anda juga dapat menetapkan identitas yang dikelola pengguna pada kluster terkelola yang ada dengan perintah pembaruan.
az aks update \ --resource-group $RG_NAME \ --name $CLUSTER_NAME \ --location $LOCATION \ --node-vm-size $VM_SKU \ --node-count $NODE_COUNT \ --enable-managed-identity \ --assign-identity $IDENTITY_ID
Kaitkan grup reservasi kapasitas yang ada dengan kumpulan simpul menggunakan az aks nodepool add
perintah dan tentukan grup reservasi kapasitas dengan --crg-id
bendera . Contoh berikut mengasumsikan Anda memiliki CRG bernama "myCRG".
RG_NAME=myResourceGroup
CLUSTER_NAME=myAKSCluster
NODEPOOL_NAME=myNodepool
CRG_NAME=myCRG
CRG_ID=$(az capacity reservation group show --capacity-reservation-group $CRG_NAME --resource-group $RG_NAME --query id -o tsv)
az aks nodepool add --resource-group $RG_NAME --cluster-name $CLUSTER_NAME --name $NODEPOOL_NAME --crg-id $CRG_ID
Untuk mengaitkan grup reservasi kapasitas yang ada dengan kumpulan simpul sistem, kaitkan kluster dengan identitas yang ditetapkan pengguna dengan peran Kontributor pada CRG Anda dan CRG itu sendiri selama pembuatan kluster. az aks create
Gunakan perintah dengan --assign-identity
bendera dan --crg-id
.
IDENTITY_NAME=myID
RG_NAME=myResourceGroup
CLUSTER_NAME=myAKSCluster
NODEPOOL_NAME=myNodepool
CRG_NAME=myCRG
CRG_ID=$(az capacity reservation group show --capacity-reservation-group $CRG_NAME --resource-group $RG_NAME --query id -o tsv)
IDENTITY_ID=$(az identity show --name $IDENTITY_NAME --resource-group $RG_NAME --query identity.id -o tsv)
az aks create \
--resource-group $RG_NAME \
--cluster-name $CLUSTER_NAME \
--crg-id $CRG_ID \
--assign-identity $IDENTITY_ID \
--generate-ssh-keys
Catatan
Menghapus kumpulan simpul secara implisit memisahkan kumpulan simpul dari grup reservasi kapasitas terkait sebelum kumpulan simpul dihapus. Menghapus kluster secara implisit memisahkan semua kumpulan simpul dalam kluster tersebut dari grup reservasi kapasitas terkait.
Catatan
Anda tidak dapat memperbarui kumpulan simpul yang ada dengan grup reservasi kapasitas. Pendekatan yang direkomendasikan adalah mengaitkan grup reservasi kapasitas selama pembuatan kumpulan simpul.
Anda mungkin perlu membuat kumpulan simpul dengan ukuran dan kemampuan VM yang berbeda. Misalnya, Anda dapat membuat kumpulan simpul yang berisi simpul dengan sejumlah besar CPU atau memori atau kumpulan simpul yang menyediakan dukungan GPU. Di bagian berikutnya, Anda menggunakan taint dan toleransi untuk memberi tahu penjadwal Kubernetes cara membatasi akses ke pod yang dapat berjalan pada simpul ini.
Dalam contoh berikut, kami membuat kumpulan simpul berbasis GPU yang menggunakan ukuran VM Standard_NC6s_v3 . VM ini ditenagai oleh kartu NVIDIA Tesla K80. Untuk informasi, lihat Ukuran yang tersedia untuk komputer virtual Linux di Azure.
Buat kumpulan simpul menggunakan
az aks node pool add
perintah . Tentukan nama gpunodepool dan gunakan--node-vm-size
parameter untuk menentukan ukuran Standard_NC6 .az aks nodepool add \ --resource-group myResourceGroup \ --cluster-name myAKSCluster \ --name gpunodepool \ --node-count 1 \ --node-vm-size Standard_NC6s_v3 \ --no-wait
Periksa status kumpulan simpul menggunakan
az aks nodepool list
perintah .az aks nodepool list --resource-group myResourceGroup --cluster-name myAKSCluster
Contoh output berikut menunjukkan kumpulan simpul gpunodepool adalah Membuat simpul dengan VmSize yang ditentukan:
[ { ... "count": 1, ... "name": "gpunodepool", "orchestratorVersion": "1.15.7", ... "provisioningState": "Creating", ... "vmSize": "Standard_NC6s_v3", ... }, { ... "count": 2, ... "name": "nodepool1", "orchestratorVersion": "1.15.7", ... "provisioningState": "Succeeded", ... "vmSize": "Standard_DS2_v2", ... } ]
Perlu beberapa menit untuk membuat gpunodepool.
Saat membuat kumpulan simpul, Anda dapat menambahkan taint, label, atau tag ke dalamnya. Ketika Anda menambahkan taint, label, atau tag, semua simpul dalam kumpulan simpul tersebut juga mendapatkan taint, label, atau tag itu.
Penting
Menambahkan taint, label, atau tag ke simpul harus dilakukan untuk seluruh kumpulan simpul yang menggunakan az aks nodepool
. Kami tidak menyarankan penggunaan kubectl
untuk menerapkan taint, label, atau tag ke simpul individual dalam kumpulan simpul.
AKS mendukung dua jenis taint simpul: taint node dan taint inisialisasi node (pratinjau). Untuk informasi selengkapnya, lihat Menggunakan taint simpul di kluster Azure Kubernetes Service (AKS).
Untuk informasi lebih lanjut tentang cara menggunakan fitur terjadwal Kubernetes lanjutan, lihat Praktik terbaik untuk fitur penjadwal lanjutan di AKS
Pada langkah sebelumnya, Anda menerapkan taint sku=gpu:NoSchedule saat membuat kumpulan simpul Anda. Contoh manifes YAML berikut menggunakan toleransi untuk memungkinkan penjadwal Kubernetes menjalankan pod NGINX pada simpul di kumpulan simpul tersebut.
Buat file bernama
nginx-toleration.yaml
dan salin dalam contoh YAML berikut.apiVersion: v1 kind: Pod metadata: name: mypod spec: containers: - image: mcr.microsoft.com/oss/nginx/nginx:1.15.9-alpine name: mypod resources: requests: cpu: 100m memory: 128Mi limits: cpu: 1 memory: 2G tolerations: - key: "sku" operator: "Equal" value: "gpu" effect: "NoSchedule"
Jadwalkan pod menggunakan
kubectl apply
perintah .kubectl apply -f nginx-toleration.yaml
Perlu beberapa detik untuk menjadwalkan Pod dan menarik gambar NGINX.
Periksa status menggunakan
kubectl describe pod
perintah .kubectl describe pod mypod
Contoh output sederhana berikut menunjukkan toleration sku=gpu:NoSchedule diterapkan. Di bagian peristiwa, penjadwal menetapkan pod ke node aks-taintnp-28993262-vmss0000000 :
[...] Tolerations: node.kubernetes.io/not-ready:NoExecute for 300s node.kubernetes.io/unreachable:NoExecute for 300s sku=gpu:NoSchedule Events: Type Reason Age From Message ---- ------ ---- ---- ------- Normal Scheduled 4m48s default-scheduler Successfully assigned default/mypod to aks-taintnp-28993262-vmss000000 Normal Pulling 4m47s kubelet pulling image "mcr.microsoft.com/oss/nginx/nginx:1.15.9-alpine" Normal Pulled 4m43s kubelet Successfully pulled image "mcr.microsoft.com/oss/nginx/nginx:1.15.9-alpine" Normal Created 4m40s kubelet Created container Normal Started 4m40s kubelet Started container
Hanya Pod yang memiliki toleration ini yang dapat dijadwalkan pada simpul-simpul di taintnp. Pod lain dijadwalkan dalam kumpulan simpul nodepool1 . Jika Anda membuat lebih banyak kumpulan simpul, Anda dapat menggunakan taint dan toleransi untuk membatasi pod apa yang dapat dijadwalkan pada sumber daya simpul tersebut.
Untuk informasi selengkapnya, lihat Menggunakan label di kluster Azure Kubernetes Service (AKS).
Untuk informasi selengkapnya, lihat Menggunakan tag Azure di Azure Kubernetes Service (AKS).
Saat Anda menggunakan templat Azure Resource Manager untuk membuat dan mengelola sumber daya, Anda dapat mengubah pengaturan di templat Anda dan menyebarkannya kembali untuk memperbarui sumber daya. Dengan kumpulan simpul AKS, Anda tidak dapat memperbarui profil kumpulan simpul awal setelah kluster AKS dibuat. Perilaku ini berarti Anda tidak dapat memperbarui templat Resource Manager yang ada, membuat perubahan pada kumpulan simpul, lalu menyebarkan ulang templat. Sebagai gantinya, Anda harus membuat templat Resource Manager terpisah yang memperbarui kumpulan simpul untuk kluster AKS yang ada.
Buat templat, seperti
aks-agentpools.json
, dan tempelkan dalam contoh manifes berikut. Pastikan untuk mengedit nilai sesuai kebutuhan. Contoh templat ini mengonfigurasi pengaturan berikut:- Memperbarui kumpulan simpul Linux bernama myagentpool untuk menjalankan tiga simpul.
- Mengatur simpul dalam kumpulan simpul untuk menjalankan Kubernetes versi 1.15.7.
- Mendefinisikan ukuran simpul sebagai Standard_DS2_v2.
{ "$schema": "https://schema.management.azure.com/schemas/2015-01-01/deploymentTemplate.json#", "contentVersion": "1.0.0.0", "parameters": { "clusterName": { "type": "string", "metadata": { "description": "The name of your existing AKS cluster." } }, "location": { "type": "string", "metadata": { "description": "The location of your existing AKS cluster." } }, "agentPoolName": { "type": "string", "defaultValue": "myagentpool", "metadata": { "description": "The name of the agent pool to create or update." } }, "vnetSubnetId": { "type": "string", "defaultValue": "", "metadata": { "description": "The Vnet subnet resource ID for your existing AKS cluster." } } }, "variables": { "apiVersion": { "aks": "2020-01-01" }, "agentPoolProfiles": { "maxPods": 30, "osDiskSizeGB": 0, "agentCount": 3, "agentVmSize": "Standard_DS2_v2", "osType": "Linux", "vnetSubnetId": "[parameters('vnetSubnetId')]" } }, "resources": [ { "apiVersion": "2020-01-01", "type": "Microsoft.ContainerService/managedClusters/agentPools", "name": "[concat(parameters('clusterName'),'/', parameters('agentPoolName'))]", "location": "[parameters('location')]", "properties": { "maxPods": "[variables('agentPoolProfiles').maxPods]", "osDiskSizeGB": "[variables('agentPoolProfiles').osDiskSizeGB]", "count": "[variables('agentPoolProfiles').agentCount]", "vmSize": "[variables('agentPoolProfiles').agentVmSize]", "osType": "[variables('agentPoolProfiles').osType]", "type": "VirtualMachineScaleSets", "vnetSubnetID": "[variables('agentPoolProfiles').vnetSubnetId]", "orchestratorVersion": "1.15.7" } } ] }
Sebarkan templat menggunakan
az deployment group create
perintah .az deployment group create \ --resource-group myResourceGroup \ --template-file aks-agentpools.json
Tip
Anda dapat menambahkan tag ke kumpulan simpul Anda dengan menambahkan properti tag di templat, seperti yang diperlihatkan dalam contoh berikut:
... "resources": [ { ... "properties": { ... "tags": { "name1": "val1" }, ... } } ...
Mungkin perlu beberapa menit untuk memperbarui kluster AKS Anda tergantung pada pengaturan dan operasi kumpulan simpul yang Anda tentukan di templat Resource Manager Anda.
- Untuk informasi lebih lanjut tentang cara mengontrol Pod di seluruh kumpulan simpul, lihat Praktik terbaik untuk fitur-fitur penjadwal lanjutan di AKS.
- Gunakan grup penempatan jarak untuk mengurangi latensi bagi berbagai aplikasi AKS Anda.
- Gunakan alamat IP publik tingkat instans untuk memungkinkan simpul Anda melayani lalu lintas secara langsung.
Umpan balik Azure Kubernetes Service
Azure Kubernetes Service adalah proyek sumber terbuka. Pilih tautan untuk memberikan umpan balik: