Halaman ini menunjukkan cara mendiagnosis dan menyelesaikan masalah yang mencegah autoscaler cluster menskalakan node Google Kubernetes Engine (GKE) Anda.
Halaman ini ditujukan untuk Developer aplikasi yang ingin menyelesaikan situasi yang tidak terduga atau negatif dengan aplikasi atau layanan mereka serta admin dan operator Platform yang ingin mencegah gangguan pada pengiriman produk dan layanan.
Memahami kapan autoscaler cluster menurunkan skala node Anda
Sebelum melanjutkan ke langkah-langkah pemecahan masalah, sebaiknya pahami kapan autoscaler cluster akan mencoba menskalakan node Anda. Autoscaler cluster mungkin tidak menurunkan skala karena tidak perlu.
Autoscaler cluster menentukan apakah node kurang dimanfaatkan dan memenuhi syarat untuk penskalaan ke bawah dengan menghitung faktor penggunaan. Faktor penggunaan dihitung dengan membagi vCPU dan memori yang diminta oleh Pod di node dengan vCPU dan memori yang dapat dialokasikan di node.
Setiap 10 detik, autoscaler cluster akan memeriksa faktor penggunaan node Anda untuk melihat apakah faktor tersebut berada di bawah nilai minimum yang diperlukan. Jika Anda menggunakan profil penskalaan otomatis balanced
, nilai minimum faktor penggunaan adalah 0,5. Jika Anda menggunakan
profil optimize-utilization
, faktor penggunaannya bervariasi. Jika faktor penggunaan kurang dari nilai minimum yang diperlukan untuk vCPU dan memori, autoscaler cluster akan menganggap node kurang dimanfaatkan.
Jika node kurang dimanfaatkan, autoscaler cluster akan menandai node untuk dihapus dan memantau node selama 10 menit ke depan untuk memastikan faktor penggunaan tetap berada di bawah nilai minimum yang diperlukan. Jika node masih kurang dimanfaatkan setelah 10 menit, autoscaler cluster akan menghapus node.
Contoh: Penghitungan faktor penggunaan
Anda memiliki cluster dengan autoscaler cluster yang diaktifkan dan menggunakan
profil penskalaan otomatis balanced
. Node di cluster ini disediakan dengan jenis mesin e2-standard-4
, yang menawarkan 4 vCPU dan memori 16 GB. Pod
di node ini meminta 0,5 vCPU dan memori 10 GB, sehingga autoscaler cluster
menghitung faktor penggunaan berikut:
- Faktor penggunaan vCPU: 0,5 vCPU / 4 vCPU = 0,125
- Faktor penggunaan memori: 10 GB / 16 GB = 0,625
Dalam skenario ini, autoscaler cluster tidak akan menganggap node ini tidak digunakan secara optimal karena faktor penggunaan memori (0,625) melebihi nilai minimum 0,5. Meskipun penggunaan vCPU rendah, penggunaan memori yang lebih tinggi akan mencegah penskalaan ke bawah untuk memastikan resource yang memadai tetap tersedia untuk workload Pod.
Periksa apakah masalah disebabkan oleh batasan
Jika Anda mengamati cluster dengan penggunaan rendah selama lebih dari 10 menit dan cluster tidak diskalakan ke bawah, pastikan masalah Anda tidak disebabkan oleh salah satu batasan untuk autoscaler cluster.
Lihat error
Jika masalah tidak disebabkan oleh batasan, Anda sering kali dapat mendiagnosis penyebabnya dengan melihat pesan error:
Jika Anda sudah melihat pesan error, lihat tabel pesan error untuk mendapatkan saran tentang cara mengatasi error.
Jika Anda belum melihat pesan, gunakan salah satu opsi berikut:
- Masalah yang terjadi kurang dari 72 jam: Lihat notifikasi error di konsol Google Cloud.
- Masalah yang sudah lebih dari 72 jam: Lihat error dalam peristiwa di Cloud Logging.
Melihat error dalam notifikasi
Jika masalah yang Anda amati terjadi kurang dari 72 jam yang lalu, lihat notifikasi tentang error di konsol Google Cloud. Notifikasi ini memberikan insight berharga tentang alasan autoscaler cluster tidak menskalakan ke bawah dan menawarkan saran tentang cara menyelesaikan error dan melihat log yang relevan untuk penyelidikan lebih lanjut.
Untuk melihat notifikasi di Konsol Google Cloud, selesaikan langkah-langkah berikut:
Di konsol Google Cloud, buka halaman Kubernetes clusters.
Tinjau kolom Notifikasi. Notifikasi berikut dikaitkan dengan masalah penurunan skala:
Can't scale down nodes
Scale down blocked by pod
Klik notifikasi yang relevan untuk melihat panel yang berisi detail tentang penyebab masalah dan tindakan yang disarankan untuk mengatasinya.
Opsional: Untuk melihat log peristiwa ini, klik Log. Tindakan ini akan mengarahkan Anda ke Logs Explorer dengan kueri yang telah diisi otomatis untuk membantu Anda menyelidiki peristiwa penskalaan lebih lanjut. Untuk mempelajari lebih lanjut cara kerja peristiwa penurunan skala, lihat Melihat peristiwa autoscaler cluster.
Jika Anda masih mengalami masalah setelah meninjau saran dalam notifikasi, lihat tabel pesan error untuk mendapatkan bantuan lebih lanjut.
Melihat error dalam peristiwa
Jika masalah yang Anda amati terjadi lebih dari 72 jam yang lalu, lihat peristiwa di Cloud Logging. Jika terjadi error, error tersebut sering kali dicatat dalam peristiwa.
Untuk melihat log autoscaler cluster di konsol Google Cloud, selesaikan langkah-langkah berikut:
Di konsol Google Cloud, buka halaman Kubernetes clusters.
Pilih nama cluster yang ingin Anda selidiki untuk melihat halaman Cluster details-nya.
Di halaman Cluster details, klik tab Logs.
Di tab Logs, klik tab Autoscaler Logs untuk melihat log.
Opsional: Untuk menerapkan filter lanjutan guna mempersempit hasil, klik tombol dengan tanda panah di sisi kanan halaman untuk melihat log di Logs Explorer.
Untuk mempelajari lebih lanjut cara kerja peristiwa penurunan skala, lihat Melihat peristiwa autoscaler cluster. Untuk mengetahui salah satu contoh cara menggunakan Cloud Logging, lihat contoh pemecahan masalah berikut.
Contoh: Memecahkan masalah yang sudah lebih dari 72 jam
Contoh berikut menunjukkan cara menyelidiki dan menyelesaikan masalah dengan cluster yang tidak diskalakan.
Skenario:
Satu minggu yang lalu, Anda melihat dasbor GKE Enterprise dan melihat bahwa cluster Anda hanya menggunakan 10% CPU dan memorinya. Meskipun pemakaiannya rendah, autoscaler cluster tidak menghapus node seperti yang Anda harapkan. Saat melihat dasbor sekarang, masalah tersebut tampaknya telah diselesaikan, tetapi Anda memutuskan untuk mencari tahu apa yang terjadi agar dapat menghindarinya terjadi lagi.
Penyelidikan:
- Karena masalah terjadi lebih dari 72 jam yang lalu, Anda menyelidiki masalah tersebut menggunakan Cloud Logging, bukan melihat pesan notifikasi.
- Di Cloud Logging, Anda akan menemukan detail logging untuk peristiwa autoscaler cluster, seperti yang dijelaskan dalam Melihat error dalam peristiwa.
- Anda menelusuri peristiwa
scaleDown
yang berisi node milik cluster yang Anda selidiki di kolomnodesToBeRemoved
. Anda dapat memfilter entri log, termasuk memfilter berdasarkan nilai kolom JSON tertentu. Pelajari lebih lanjut di Kueri log lanjutan. - Anda tidak menemukan peristiwa
scaleDown
. Namun, jika menemukan peristiwascaleDown
, Anda dapat menelusuri peristiwaeventResult
yang berisieventId
terkait. Kemudian, Anda dapat menelusuri error di kolomerrorMsg
. Anda memutuskan untuk melanjutkan investigasi dengan menelusuri peristiwa
noScaleDown
yang memiliki node yang Anda selidiki di kolom node.Anda menemukan peristiwa
noScaleDown
yang berisi alasan node Anda tidak melakukan penurunan skala. ID pesannya adalah"no.scale.down.node.pod.not.backed.by.controller"
dan terdapat satu parameter:"test-single-pod"
.
Penyelesaian:
Anda melihat tabel pesan error, dan menemukan bahwa pesan ini
menunjukkan bahwa Pod memblokir penurunan skala karena tidak didukung oleh
pengontrol. Anda mendapati bahwa salah satu solusinya adalah menambahkan
anotasi "cluster-autoscaler.kubernetes.io/safe-to-evict": "true"
ke
Pod. Anda menyelidiki test-single-pod
dan melihat bahwa seorang rekan kerja menambahkan
anotasi dan setelah menerapkan anotasi, autoscaler cluster menurunkan skala
cluster dengan benar. Anda memutuskan untuk menambahkan anotasi ke semua Pod lain yang
aman untuk melakukannya agar masalah tidak terjadi lagi.
Mengatasi error penurunan skala
Setelah mengidentifikasi error, gunakan tabel berikut untuk membantu Anda memahami penyebab error dan cara mengatasinya.
Error ScaleDown
Anda dapat menemukan pesan peristiwa error untuk peristiwa scaleDown
dalam peristiwa eventResult
yang sesuai, di kolom resultInfo.results[].errorMsg
.
Pesan peristiwa | Detail | Parameter | Mitigasi |
---|---|---|---|
"scale.down.error.failed.to.mark.to.be.deleted" |
Node tidak dapat ditandai untuk dihapus. | Nama node gagal. | Pesan ini harus bersifat sementara. Jika masalah berlanjut, hubungi Cloud Customer Care untuk penyelidikan lebih lanjut. |
"scale.down.error.failed.to.evict.pods" |
Autoscaler cluster tidak dapat menskalakan ke bawah karena beberapa Pod tidak dapat dikeluarkan dari node. | Nama node gagal. | Tinjau PodDisruptionBudget untuk Pod dan pastikan aturan mengizinkan penghapusan replika aplikasi jika dapat diterima. Untuk mempelajari lebih lanjut, lihat Menentukan Anggaran Gangguan untuk Aplikasi Anda dalam dokumentasi Kubernetes. |
"scale.down.error.failed.to.delete.node.min.size.reached" |
Autoscaler cluster tidak dapat menskalakan ke bawah karena node tidak dapat dihapus karena cluster sudah mencapai ukuran minimum. | Nama node gagal. | Tinjau nilai minimum yang ditetapkan untuk penskalaan otomatis node pool, lalu sesuaikan setelan jika perlu. Untuk mempelajari lebih lanjut, lihat Error: Node dalam cluster telah mencapai ukuran minimum. |
Alasan peristiwa noScaleDown
Peristiwa noScaleDown
akan dihasilkan secara berkala saat ada node yang diblokir agar tidak dihapus oleh autoscaler cluster. Peristiwa noScaleDown
adalah upaya terbaik, dan tidak mencakup semua kasus yang memungkinkan.
Alasan tingkat atas NoScaleDown
Pesan alasan tingkat atas untuk peristiwa noScaleDown
muncul di kolom noDecisionStatus.noScaleDown.reason
. Pesan ini berisi alasan tingkat atas mengapa autoscaler cluster tidak dapat menurunkan skala cluster.
Pesan peristiwa | Detail | Mitigasi |
---|---|---|
"no.scale.down.in.backoff" |
Autoscaler cluster tidak dapat menurunkan skala karena penurunan skala berada dalam periode backoff (diblokir sementara). | Pesan ini seharusnya bersifat sementara, dan dapat terjadi jika baru-baru ini ada peristiwa peningkatan skala. Jika pesan terus muncul, hubungi Cloud Customer Care untuk penyelidikan lebih lanjut. |
"no.scale.down.in.progress" |
Autoscaler cluster tidak dapat menskalakan ke bawah karena penskalaan ke bawah sebelumnya masih berlangsung. |
Pesan ini seharusnya bersifat sementara, karena Pod pada akhirnya akan dihapus. Jika pesan ini sering muncul, tinjau masa tenggang penghentian untuk penurunan skala pemblokiran Pod. Untuk mempercepat resolusi, Anda juga dapat menghapus Pod jika tidak diperlukan lagi. |
Alasan tingkat node NoScaleDown
Pesan alasan tingkat node untuk peristiwa noScaleDown
muncul di
noDecisionStatus.noScaleDown.nodes[].reason field
. Pesan ini berisi alasan mengapa autoscaler cluster tidak dapat menghapus node tertentu.
Pesan peristiwa | Detail | Parameter | Mitigasi |
---|---|---|---|
"no.scale.down.node.scale.down.disabled.annotation" |
Autoscaler cluster tidak dapat menghapus node dari node pool karena node dianotasikan dengan cluster-autoscaler.kubernetes.io/scale-down-disabled: true .
|
T/A | Autoscaler cluster melewati node dengan anotasi ini tanpa mempertimbangkan penggunaannya dan pesan ini dicatat ke dalam log, terlepas dari faktor penggunaan node. Jika Anda ingin autoscaler cluster menurunkan skala node ini, hapus anotasi. |
"no.scale.down.node.node.group.min.size.reached" |
Autoscaler cluster tidak dapat menskalakan ke bawah jika ukuran grup node telah melampaui batas ukuran minimum. Hal ini terjadi karena menghapus node akan melanggar batas resource minimum seluruh cluster yang ditentukan dalam setelan penyediaan otomatis node Anda. |
T/A | Tinjau nilai minimum yang ditetapkan untuk penskalaan otomatis node pool. Jika Anda ingin autoscaler cluster menskalakan node ini, sesuaikan nilai minimum. |
"no.scale.down.node.minimal.resource.limits.exceeded" |
Autoscaler cluster tidak dapat menskalakan node karena akan melanggar batas resource minimum seluruh cluster. Ini adalah batas resource yang ditetapkan untuk penyediaan otomatis node. |
T/A | Tinjau batas memori dan vCPU Anda, dan jika Anda ingin autoscaler cluster menskalakan node ini, kurangi batas. |
"no.scale.down.node.no.place.to.move.pods" |
Autoscaler cluster tidak dapat menskalakan ke bawah karena tidak ada tempat untuk memindahkan Pod. | T/A | Jika Anda memperkirakan bahwa Pod harus dijadwalkan ulang, tinjau persyaratan penjadwalan Pod pada node yang kurang dimanfaatkan untuk menentukan apakah Pod dapat dipindahkan ke node lain dalam cluster. Untuk mempelajari lebih lanjut, lihat Error: Tidak ada tempat untuk memindahkan Pod. |
"no.scale.down.node.pod.not.backed.by.controller" |
Pod memblokir penurunan skala karena tidak didukung oleh pengontrol. Secara khusus, autoscaler cluster tidak dapat menskalakan node yang kurang dimanfaatkan karena Pod tidak memiliki pengontrol yang dikenal. Pengontrol yang diizinkan mencakup ReplicationController, DaemonSet, Job, StatefulSet, atau ReplicaSet. |
Nama Pod pemblokiran. | Tetapkan anotasi
"cluster-autoscaler.kubernetes.io/safe-to-evict": "true"
untuk Pod atau tentukan pengontrol yang dapat diterima. |
"no.scale.down.node.pod.not.safe.to.evict.annotation" |
Pod di node memiliki anotasi safe-to-evict=false . |
Nama Pod pemblokiran. | Jika Pod dapat dikeluarkan dengan aman, edit manifes Pod dan
perbarui anotasi ke
"cluster-autoscaler.kubernetes.io/safe-to-evict": "true" . |
"no.scale.down.node.pod.kube.system.unmovable" |
Pod memblokir penurunan skala karena merupakan Pod non-DaemonSet, tidak dicerminkan, tanpa PodDisruptionBudget di namespace kube-system . |
Nama Pod pemblokiran. | Secara default, Pod di namespace Untuk mengatasi masalah ini, tambahkan PodDisruptionBudget
untuk Pod |
"no.scale.down.node.pod.not.enough.pdb" |
Pod memblokir penurunan skala karena tidak memiliki PodDisruptionBudget yang memadai. | Nama Pod pemblokiran. | Tinjau PodDisruptionBudget untuk Pod dan pertimbangkan untuk membuatnya tidak terlalu ketat. Untuk mempelajari lebih lanjut, lihat Error: PodDisruptionBudget tidak cukup. |
"no.scale.down.node.pod.controller.not.found" |
Pod memblokir penurunan skala karena pengontrolnya (misalnya, Deployment atau ReplicaSet) tidak dapat ditemukan. | T/A | Untuk menentukan tindakan yang diambil yang membuat Pod berjalan setelah pengontrolnya dihapus, tinjau log. Untuk mengatasi masalah ini, hapus Pod secara manual. |
"no.scale.down.node.pod.unexpected.error" |
Pod memblokir penurunan skala karena error yang tidak terduga. | T/A | Penyebab utama error ini tidak diketahui. Hubungi Layanan Pelanggan Cloud untuk penyelidikan lebih lanjut. |
Melakukan penyelidikan lebih lanjut
Bagian berikut memberikan panduan tentang cara menggunakan Logs Explorer dan
gcpdiag
untuk mendapatkan insight tambahan tentang error Anda.
Menyelidiki error di Logs Explorer
Jika ingin menyelidiki pesan error lebih lanjut, Anda dapat melihat log khusus untuk error tersebut:
Di Konsol Google Cloud, buka halaman Logs Explorer.
Di panel kueri, masukkan kueri berikut:
resource.type="k8s_cluster" log_id("container.googleapis.com/cluster-autoscaler-visibility") jsonPayload.resultInfo.results.errorMsg.messageId="ERROR_MESSAGE"
Ganti
ERROR_MESSAGE
dengan pesan yang ingin Anda selidiki. Contoh,scale.down.error.failed.to.delete.node.min.size.reached
.Klik Run query.
Men-debug beberapa error dengan gcpdiag
gcpdiag
adalah alat open source yang dibuat dengan dukungan dari engineer teknis Google Cloud. Ini bukan produk Google Cloud yang didukung secara resmi.
Jika Anda mengalami salah satu pesan error berikut, Anda dapat menggunakan gcpdiag
untuk membantu memecahkan masalah:
scale.down.error.failed.to.evict.pods
no.scale.down.node.node.group.min.size.reached
Untuk mengetahui daftar dan deskripsi semua flag alat gcpdiag
, lihat
petunjuk penggunaan gcpdiag
.
Menyelesaikan error penskalaan ke bawah yang kompleks
Bagian berikut menawarkan panduan untuk mengatasi error saat mitigasi melibatkan beberapa langkah dan error yang tidak memiliki pesan peristiwa autoscaler cluster yang terkait.
Error: Node dalam cluster telah mencapai ukuran minimum
Jika Anda melihat error berikut, autoscaler cluster tidak dapat menghapus node karena jumlah node dalam cluster sudah mencapai ukuran minimum:
Notifikasi
Penurunan skala node yang kurang dimanfaatkan akan diblokir karena batas resource minimum autoscaler cluster telah tercapai.
Acara
"scale.down.error.failed.to.delete.node.min.size.reached"
Untuk mengatasi masalah ini, tinjau dan perbarui batas minimum untuk penskalaan otomatis:
Di konsol Google Cloud, buka halaman Kubernetes clusters:
Klik nama cluster yang diidentifikasi dalam notifikasi atau Cloud Logging.
Di halaman Cluster details, buka tab Nodes.
Tinjau nilai di kolom Number of nodes dan bandingkan dengan jumlah minimum node yang tercantum di kolom Autoscaling. Misalnya, jika Anda melihat 4 - 6 node tercantum di kolom Penskalaan Otomatis, dan jumlah node dalam node pool adalah 4, jumlah node pool sudah sama dengan ukuran minimum, sehingga autoscaler cluster tidak dapat menskalakan node lebih lanjut.
Jika konfigurasi sudah benar dan nilai untuk jumlah node sama dengan minimum yang ditentukan untuk Penskalaan Otomatis, autoscaler cluster akan berfungsi sebagaimana mestinya. Jika jumlah minimum node terlalu tinggi untuk kebutuhan Anda, kurangi ukuran minimum sehingga node dapat diskalakan ke bawah.
Error: Tidak ada tempat untuk memindahkan Pod
Error berikut terjadi saat autoscaler cluster mencoba menurunkan skala node, tetapi tidak dapat melakukannya karena Pod di node tersebut tidak dapat dipindahkan ke node lain:
Notifikasi
Penurunan skala node yang kurang dimanfaatkan akan diblokir karena memiliki Pod yang tidak dapat dipindahkan ke node lain di cluster.
Acara
"no.scale.down.node.no.place.to.move.pods"
Jika Anda tidak ingin Pod ini dijadwalkan ulang, pesan ini akan muncul dan
tidak ada perubahan yang diperlukan. Jika Anda ingin Pod dijadwalkan ulang, selidiki
definisi berikut di pod.spec block
dalam manifes Pod:
- NodeAffinity: Tinjau persyaratan penjadwalan Pod pada node yang kurang dimanfaatkan. Anda dapat meninjau persyaratan ini dengan memeriksa manifes Pod dan mencari aturan NodeAffinity atau NodeSelector. Jika Pod memiliki nodeSelector yang ditentukan dan tidak ada node lain (dari node pool lain) dalam cluster yang cocok dengan pemilih ini, autoscaler cluster tidak dapat memindahkan Pod ke node lain, yang pada akhirnya mencegahnya menghapus node yang kurang dimanfaatkan.
maxPodConstraint
: JikamaxPodConstraint
dikonfigurasi ke nomor lain selain nomor default 110, konfirmasi apakah ini adalah perubahan yang diinginkan. Menurunkan nilai ini akan meningkatkan kemungkinan masalah. Autoscaler cluster tidak dapat menjadwalkan ulang Pod ke node lain, jika semua node lain dalam cluster telah mencapai nilai yang ditentukan dalammaxPodConstraint
, sehingga tidak ada ruang untuk Pod baru yang akan dijadwalkan. Dengan meningkatkan nilaimaxPodConstraint
, lebih banyak Pod dapat dijadwalkan di node dan autoscaler cluster akan memiliki ruang untuk menjadwalkan ulang Pod dan menskalakan ke bawah node yang kurang digunakan. Saat menentukanmaxPodConstraint
, perlu diingat bahwa ada sekitar 10 Pod sistem di setiap node.hostPort
: MenentukanhostPort
untuk Pod berarti hanya satu Pod yang dapat berjalan di node tersebut. Hal ini dapat mempersulit autoscaler cluster untuk mengurangi jumlah node karena Pod mungkin tidak dapat dipindahkan ke node lain jika port node tersebut sudah digunakan. Ini adalah perilaku yang diharapkan.
Error: Pod kube-system tidak dapat dipindahkan
Error berikut terjadi saat Pod sistem mencegah penurunan skala:
Notifikasi
Pod memblokir penurunan skala karena merupakan Pod non-DaemonSet, tidak dicerminkan, tanpa PodDisruptionBudget di namespace
kube-system
.
Acara
"no.scale.down.node.pod.kube.system.unmovable"
Pod di namespace kube-system
dianggap sebagai Pod sistem. Secara default,
autoscaler cluster tidak menghapus Pod di namespace kube-system
.
Untuk mengatasi error ini, pilih salah satu resolusi berikut:
Menambahkan
PodDisruptionBudget
untuk Podkube-system
. Untuk informasi selengkapnya tentang menambahkanPodDisruptionBudget
secara manual untuk Podkube-system
, lihat FAQ tentang autoscaler cluster Kubernetes.Membuat PodDisruptionBudget dapat memengaruhi ketersediaan beban kerja sistem yang dapat menyebabkan periode nonaktif di cluster. Autoscaler cluster menjadwalkan ulang workload sistem ini di node pekerja yang berbeda selama proses penurunan skala.
Gunakan kombinasi taint dan toleransi node pool untuk memisahkan Pod
kube-system
dari Pod aplikasi Anda. Untuk informasi selengkapnya, lihat penyediaan otomatis node di GKE.
Memastikan node memiliki kube-system
Pod
Jika Anda tidak yakin bahwa node Anda menjalankan Pod kube-system
, dan ingin
memverifikasinya, selesaikan langkah-langkah berikut:
Buka halaman Logs Explorer di konsol Google Cloud.
Klik Query builder.
Gunakan kueri berikut untuk menemukan semua data log kebijakan jaringan:
- resource.labels.location="CLUSTER_LOCATION" resource.labels.cluster_name="CLUSTER_NAME" logName="projects/PROJECT_ID/logs/container.googleapis.com%2Fcluster-autoscaler-visibility" jsonPayload.noDecisionStatus.noScaleDown.nodes.node.mig.nodepool="NODE_POOL_NAME"
Ganti kode berikut:
CLUSTER_LOCATION
: Region tempat cluster Anda berada.CLUSTER_NAME
: Nama cluster Anda.PROJECT_ID
: ID project tempat cluster Anda berada.NODE_POOL_NAME
: Nama node pool Anda.
Jika ada Pod
kube-system
yang berjalan di node pool Anda, outputnya akan mencakup hal berikut:"no.scale.down.node.pod.kube.system.unmovable"
Error: PodDisruptionBudget tidak cukup
Error berikut terjadi saat PodDisruptionBudget Anda mencegah penurunan skala:
Notifikasi
Penurunan skala node yang kurang dimanfaatkan akan diblokir karena node tersebut menjalankan Pod yang tidak memiliki Anggaran Gangguan Pod yang memadai untuk memungkinkan pengosongan Pod.
Acara
NoScaleDownNodePodNotEnoughPdb: "no.scale.down.node.pod.not.enough.pdb"
Untuk melihat apakah PodDisruptionBudget terlalu membatasi, tinjau setelannya:
kubectl get pdb --all-namespaces
Outputnya mirip dengan hal berikut ini:
NAMESPACE NAME MIN AVAILABLE MAX UNAVAILABLE ALLOWED DISRUPTIONS AGE
example-app-one one_pdb N/A 1 1 12d
example-app-two two_pdb N/A 0 0 12d
Dalam contoh ini, setiap Pod yang cocok dengan pemilih label two_pdb
tidak akan dikeluarkan oleh autoscaler cluster. Setelan maxUnavailable: 0
dalam PodDisruptionBudget ini menentukan bahwa semua replika harus tetap tersedia sepanjang waktu. Selain itu, disruptionsAllowed: 0
melarang gangguan apa pun pada Pod
ini. Akibatnya, node yang menjalankan Pod ini tidak dapat diskalakan, karena tindakan tersebut
akan menyebabkan gangguan dan melanggar PodDisruptionBudget.
Jika PodDisruptionBudget berfungsi seperti yang Anda inginkan, Anda tidak perlu melakukan tindakan lebih lanjut. Jika Anda ingin menyesuaikan PodDisruptionBudget agar Pod di node yang kurang digunakan dapat dipindahkan, edit manifes PodDisruptionBudget.
Misalnya, jika telah menetapkan maxUnavailable
ke 0
, Anda dapat mengubahnya
ke 1
sehingga cluster autoscaler dapat menskalakan ke bawah.
Masalah: Node tetap dalam status diisolasi dan tidak dihapus
Error yang mirip dengan berikut terjadi saat autoscaler cluster tidak dapat mengurangi ukuran kumpulan node karena akun layanan Google tidak memiliki peran Editor:
Required 'compute.instanceGroups.update' permission for 'INSTANCE_GROUP_NAME'.
Gejala umum masalah ini adalah saat autoscaler cluster mencoba mengurangi ukuran kumpulan node, tetapi status node tidak berubah.
Untuk mengatasi masalah ini, periksa apakah akun layanan default (PROJECT_NUMBER@cloudservices.gserviceaccount.com
) memiliki peran Editor (roles/editor
) pada project. Jika akun layanan tidak memiliki peran ini, tambahkan. GKE menggunakan akun layanan ini untuk mengelola resource project Anda. Untuk mempelajari cara melakukannya, lihat bagian Memberikan atau mencabut satu peran dalam dokumentasi IAM.
Langkah selanjutnya
Tinjau pertanyaan berikut di FAQ autoscaler cluster Kubernetes:
Tonton video YouTube tentang cara memecahkan masalah dan menyelesaikan masalah penskalaan.
Jika Anda memerlukan bantuan tambahan, hubungi Cloud Customer Care.