Topik ini menjelaskan masalah umum dan solusinya saat menggunakan fitur node instant scaling.
Indeks
Kategori | Subkategori | Tautan |
Perilaku penskalaan node instant scaling | ||
Perilaku penskalaan kustom | ||
Batasan yang diketahui
Batasan fitur
Node instant scaling tidak mendukung mode swift.
Satu node pool dapat berisi hingga 180 node per batch scale-out.
Scale-in tidak dapat dinonaktifkan untuk kluster tertentu.
CatatanUntuk menonaktifkan scale-in pada node tertentu, lihat Bagaimana cara mencegah node instant scaling menghapus node tertentu?
Solusi node instant scaling tidak mendukung pemeriksaan stok instans preemptible. Jika Billing Method node pool diatur ke instans preemptible dan opsi Use Pay-as-you-go Instances When Spot Instances Are Insufficient diaktifkan untuk node pool tersebut, instans pay-as-you-go akan di-scale-out meskipun stok instans preemptible masih mencukupi.
Ketidakmampuan memprediksi secara sempurna sumber daya node yang tersedia
Sumber daya yang tersedia pada node yang baru disediakan mungkin tidak persis sesuai dengan spesifikasi tipe instansnya karena OS dasar dan daemon sistem pada instans ECS mengonsumsi sebagian sumber daya. Untuk detailnya, lihat Mengapa ukuran memori instans yang dibeli berbeda dari ukuran memori yang didefinisikan dalam tipe instansnya?
Karena overhead ini, perkiraan sumber daya yang digunakan oleh add-on node instant scaling mungkin sedikit lebih tinggi daripada sumber daya yang sebenarnya dapat dialokasikan pada node baru. Meskipun perbedaan ini biasanya kecil, pertimbangkan hal-hal berikut saat mengonfigurasi permintaan sumber daya pod Anda:
Minta kurang dari kapasitas penuh instans. Total permintaan sumber daya, termasuk CPU, memori, dan disk, harus kurang dari spesifikasi tipe instans. Sebagai panduan umum, kami merekomendasikan agar total permintaan sumber daya pod tidak melebihi 70% kapasitas node.
Pertimbangkan pod non-Kubernetes atau pod statis. Saat menentukan apakah suatu node memiliki sumber daya yang cukup, add-on node instant scaling hanya mempertimbangkan permintaan sumber daya dari pod Kubernetes (termasuk pod pending dan pod DaemonSet). Jika Anda menjalankan pod statis yang tidak dikelola sebagai DaemonSet, Anda harus secara manual memperhitungkan dan memesan sumber daya untuknya.
Uji pod besar terlebih dahulu. Jika sebuah pod meminta jumlah sumber daya yang besar, misalnya lebih dari 70% sumber daya node, Anda harus menguji dan memastikan terlebih dahulu bahwa pod tersebut dapat dijadwalkan ke node dengan tipe instans yang sama.
Jenis sumber daya yang dapat disimulasikan terbatas
Add-on node instant scaling hanya mendukung sejumlah terbatas jenis resource untuk simulasi dan penentuan apakah operasi penskalaan perlu dilakukan. Untuk informasi lebih lanjut, lihat Jenis resource apa saja yang dapat disimulasikan oleh node instant scaling?
Batasan penyimpanan
Autoscaler tidak mengetahui batasan penyimpanan spesifik yang mungkin dimiliki oleh sebuah pod. Ini termasuk persyaratan seperti:
Harus berjalan di Availability Zone tertentu untuk mengakses volume persisten (PV).
Memerlukan node yang mendukung tipe disk tertentu (seperti ESSD).
Solusi: Konfigurasikan node pool khusus
Jika aplikasi Anda memiliki ketergantungan penyimpanan seperti ini, konfigurasikan node pool khusus untuknya sebelum mengaktifkan Auto Scaling pada pool tersebut.
Dengan menyetel terlebih dahulu Availability Zone, tipe instans, dan tipe disk dalam konfigurasi node pool, Anda memastikan bahwa setiap node yang baru disediakan akan memenuhi persyaratan pemasangan penyimpanan pod. Hal ini mencegah kegagalan penjadwalan dan error startup pod akibat ketidaksesuaian sumber daya.
Perilaku scale-out
Jenis resource apa saja yang dapat disimulasikan oleh node instant scaling?
Jenis resource berikut didukung untuk simulasi dan penentuan perilaku penskalaan.
cpu
memory
ephemeral-storage
aliyun.com/gpu-mem # Hanya GPU bersama yang didukung.
nvidia.com/gpuApakah node instant scaling mendukung penyediaan tipe instans yang sesuai dari node pool berdasarkan permintaan resource pod?
Ya, ini adalah fitur yang didukung. Autoscaler secara cerdas memilih tipe instans yang paling efisien dalam penggunaan sumber daya dan biaya untuk memenuhi kebutuhan pod tersebut.
Sebagai contoh, pertimbangkan node pool yang dikonfigurasi dengan dua tipe instans: tipe yang lebih kecil 4 vCPU / 8 GiB dan tipe yang lebih besar 12 vCPU / 48 GiB.
Jika sebuah pod meminta 2
vCPU, node instant scaling akan memprioritaskan penyediaan node baru4 vCPU / 8 GiBuntuk menjadwalkan pod tersebut.Jika Anda kemudian memperbarui konfigurasi node pool, mengganti tipe
4 vCPU / 8 GiBdengan tipe8 vCPU / 16 GiB, node instant scaling akan secara otomatis menyesuaikan dan mulai menyediakan node8 vCPU / 16 GiBuntuk permintaan serupa di masa depan.
Jika node pool memiliki beberapa tipe instans, bagaimana node instant scaling memilih tipe instans yang akan disediakan?
Saat beberapa tipe instans dikonfigurasi dalam satu node pool, node instant scaling mengikuti logika pemilihan default berikut:
Filter berdasarkan ketersediaan: Secara berkala mengidentifikasi dan memfilter tipe instans yang saat ini mengalami kekurangan stok di wilayah tersebut.
Urutkan berdasarkan ukuran: Kemudian mengurutkan tipe instans yang tersedia berdasarkan jumlah core vCPU secara menaik.
Pilih kecocokan pertama: Mulai dari tipe instans terkecil, memeriksa satu per satu apakah dapat memenuhi permintaan sumber daya pod yang tidak dapat dijadwalkan. Tipe instans pertama dalam daftar terurut yang memenuhi persyaratan pod dipilih untuk disediakan. Node instant scaling tidak mengevaluasi tipe instans yang lebih besar setelah ditemukan kecocokan yang sesuai.
Saat menggunakan node instant scaling, bagaimana cara melacak ketersediaan tipe instans di node pool saya saat ini?
Node instant scaling menyediakan metrik kesehatan yang secara berkala memperbarui stok tipe instans di node pool dengan Auto Scaling yang diaktifkan. Ketika status stok tipe instans berubah, node instant scaling menghasilkan event Kubernetes bernama InstanceInventoryStatusChanged. Anda dapat memantau event ini untuk mengawasi kesehatan stok node pool Anda. Hal ini membantu Anda mengevaluasi apakah tipe instans yang Anda pilih tersedia secara andal dan memungkinkan Anda melakukan penyesuaian konfigurasi lebih awal. Untuk informasi lebih lanjut, lihat Lihat status kesehatan node instant scaling.
Bagaimana cara mengoptimalkan konfigurasi node pool untuk mencegah kegagalan scale-out akibat stok tidak mencukupi?
Pertimbangkan saran konfigurasi berikut untuk memperluas rentang tipe instans yang tersedia:
Konfigurasikan beberapa tipe instans opsional untuk node pool, atau gunakan konfigurasi yang lebih umum.
Konfigurasikan beberapa zona untuk node pool.
Mengapa node instant scaling gagal menambahkan node?
Periksa apakah kondisi berikut ada:
Tipe instans yang dikonfigurasi untuk node pool memiliki stok tidak mencukupi.
Tipe instans yang dikonfigurasi untuk node pool tidak dapat memenuhi permintaan sumber daya pod. Ukuran sumber daya tipe instans ECS adalah spesifikasi yang tercantum. Pertimbangkan pemesanan sumber daya berikut selama runtime.
Saat pembuatan instans, beberapa sumber daya dikonsumsi oleh virtualisasi dan OS. Untuk informasi lebih lanjut, lihat Mengapa instans yang dibeli memiliki ukuran memori yang berbeda dari ukuran memori yang didefinisikan dalam tipe instans?
Container Service for Kubernetes (ACK) memerlukan sejumlah sumber daya node untuk menjalankan add-on Kubernetes dan proses sistem, seperti kubelet, kube-proxy, Terway, dan container runtime. Lihat Kebijakan pemesanan sumber daya node untuk detailnya.
Secara default, add-on sistem diinstal pada node. Sumber daya yang diminta oleh pod harus kurang dari spesifikasi instans.
Anda belum menyelesaikan otorisasi seperti yang dijelaskan dalam Aktifkan elastisitas instan untuk node.
Node pool dengan Auto Scaling yang diaktifkan gagal melakukan scale-out instans.
Untuk memastikan akurasi penskalaan berikutnya dan stabilitas sistem, node instant scaling tidak melakukan operasi penskalaan hingga masalah pada node abnormal diselesaikan.
Bagaimana cara mengonfigurasi custom resource untuk node pool dengan node instant scaling yang diaktifkan?
Konfigurasikan tag ECS dengan awalan tetap berikut untuk node pool dengan node instant scaling yang diaktifkan. Hal ini memungkinkan add-on penskalaan mengidentifikasi custom resource yang tersedia di node pool atau nilai pasti dari resource tertentu.
Add-on node instant scaling (ACK GOATScaler) harus versi 0.2.18 atau lebih baru. Untuk upgrade, lihat Kelola add-on.
goatscaler.io/node-template/resource/{resource-name}:{resource-size}Contoh:
goatscaler.io/node-template/resource/hugepages-1Gi:2GiPerilaku scale-in
Mengapa node instant scaling gagal menghapus node?
Periksa keberadaan hal-hal berikut:
Opsi untuk hanya melakukan scale-in pada node kosong diaktifkan, tetapi node yang diperiksa tidak kosong.
Ambang batas permintaan sumber daya pod pada node lebih tinggi daripada ambang batas scale-in yang dikonfigurasi.
Pod dari namespace
kube-systemsedang berjalan di node tersebut.Pod pada node memiliki kebijakan penjadwalan wajib yang mencegah node lain menjalankannya.
Pod pada node memiliki PodDisruptionBudget, dan jumlah minimum pod yang tersedia telah tercapai.
Jika node baru ditambahkan, node instant scaling tidak akan melakukan operasi scale-in pada node tersebut dalam waktu 10 menit.
Ada node offline. Node offline adalah instans yang sedang berjalan tetapi tidak memiliki objek node yang sesuai. Add-on node instant scaling mendukung fitur pembersihan otomatis mulai versi 0.5.3 dan seterusnya. Untuk versi sebelumnya, Anda harus menghapus instans sisa tersebut secara manual.
Versi 0.5.3 sedang dalam rilis canary. Untuk menggunakannya, kirim tiket dan minta akses.
Lihat Add-on untuk melakukan upgrade.
Pada halaman Node Pools, klik Sync Node Pool, lalu klik Details. Pada tab Nodes, periksa apakah ada node dalam status offline.
Jenis pod apa saja yang dapat mencegah node instant scaling menghapus node?
Jika sebuah pod tidak dibuat oleh controller Kubernetes native, seperti Deployment, ReplicaSet, Job, atau StatefulSet, atau jika pod pada suatu node tidak dapat dihentikan atau dimigrasikan secara aman, node instant scaling mungkin dicegah untuk menghapus node tersebut.
Kontrol perilaku penskalaan berbasis pod
Bagaimana cara mengontrol perilaku scale-in node instant scaling berdasarkan pod?
Gunakan anotasi pod goatscaler.io/safe-to-evict untuk menentukan apakah pod tertentu harus mencegah node tempatnya berjalan di-scale-in oleh add-on node instant scaling.
Untuk MENCEGAH node di-scale-in, tambahkan anotasi
"goatscaler.io/safe-to-evict": "false"ke pod tersebut.Untuk MENGIZINKAN node di-scale-in, tambahkan anotasi
"goatscaler.io/safe-to-evict": "true"ke pod tersebut.
Kontrol perilaku penskalaan berbasis node
Bagaimana cara menentukan node mana yang akan dihapus selama scale-in node instant scaling?
Tambahkan taint goatscaler.io/force-to-delete:true:NoSchedule ke node yang ingin Anda hapus. Setelah menambahkan taint ini, node instant scaling langsung menghapus node tersebut tanpa memeriksa status pod atau melakukan drain pod. Gunakan fitur ini dengan hati-hati karena dapat menyebabkan gangguan layanan atau kehilangan data.
Bagaimana cara mencegah node instant scaling menghapus node tertentu?
Gunakan anotasi node "goatscaler.io/scale-down-disabled": "true" pada node target untuk mencegahnya di-scale-in oleh add-on node instant scaling. Berikut adalah contoh perintah untuk menambahkan anotasi tersebut:
kubectl annotate node <nodename> goatscaler.io/scale-down-disabled=trueDapatkah node instant scaling dikonfigurasi hanya untuk melakukan scale-in pada node kosong?
Ya, Anda dapat mengonfigurasi perilaku ini baik di tingkat node maupun tingkat kluster. Jika pengaturan dikonfigurasi di kedua tingkat, pengaturan tingkat node akan diutamakan.
Konfigurasi tingkat node
Tambahkan label ke node tertentu untuk mengontrol perilaku scale-in-nya.
Untuk mengaktifkan (hanya scale-in jika kosong):
goatscaler.io/scale-down-only-empty:trueUntuk menonaktifkan (izinkan scale-in meskipun ada pod):
goatscaler.io/scale-down-only-empty:false
Konfigurasi tingkat kluster
Di Konsol ACK, buka halaman Add-ons.
Temukan add-on node instant scaling (ACK GOATScaler) dan ikuti petunjuk di layar untuk mengatur
ScaleDownOnlyEmptyNodesmenjaditrueataufalse.
Penskalaan instan node terkait add-on
Apakah add-on node instant scaling diperbarui secara otomatis?
Tidak. Kecuali untuk maintenance sistem secara keseluruhan atau upgrade platform utama, ACK tidak secara otomatis memperbarui add-on node instant scaling (ACK GOATScaler). Anda harus melakukan upgrade secara manual di halaman Add-ons di Konsol ACK.
Mengapa penskalaan node tidak berfungsi pada kluster ACK yang dikelola saya meskipun otorisasi peran yang diperlukan telah selesai?
Kemungkinan penyebab
Masalah ini dapat terjadi jika token yang diperlukan (addon.aliyuncsmanagedautoscalerrole.token) tidak ada dalam Secret di namespace kube-system. Secara default, ACK menggunakan Worker Role kluster untuk mengaktifkan kemampuan autoscaling, dan token ini sangat penting untuk mengotentikasi operasi tersebut.
Solusi
Solusinya adalah menerapkan ulang kebijakan yang diperlukan ke Worker Role kluster menggunakan wizard otorisasi di konsol ACK.
Pada halaman Clusters, temukan kluster yang ingin dikelola dan klik namanya. Di panel navigasi kiri, pilih .
Pada halaman Node Pools, klik Enable di sebelah kanan Node Scaling.
Ikuti petunjuk di layar untuk mengotorisasi
KubernetesWorkerRoledan melampirkan kebijakan sistemAliyunCSManagedAutoScalerRolePolicy.
Restart secara manual Deployment
cluster-autoscaler(node auto scaling) atau Deploymentack-goatscaler(node instant scaling) di namespacekube-systemagar izin berlaku segera.