Halaman ini menunjukkan cara menyelesaikan masalah pada cluster Autopilot Google Kubernetes Engine (GKE).
Jika Anda memerlukan bantuan lainnya, hubungi Cloud Customer Care.Masalah cluster
Tidak dapat membuat cluster: 0 node terdaftar
Masalah berikut terjadi saat Anda mencoba membuat cluster Autopilot dengan akun layanan IAM nonaktif atau tidak memiliki izin yang diperlukan. Pembuatan cluster gagal dengan pesan error berikut:
All cluster resources were brought up, but: only 0 nodes out of 2 have registered.
Untuk mengatasi masalah tersebut, lakukan langkah berikut:
Periksa apakah akun layanan Compute Engine default atau akun layanan IAM kustom yang ingin Anda gunakan sedang nonaktif:
gcloud iam service-accounts describe SERVICE_ACCOUNT
Ganti
SERVICE_ACCOUNT
dengan alamat email akun layanan, sepertimy-iam-account@my-first-project.iam.gserviceaccount.com
.Jika akun layanan nonaktif, output-nya akan mirip dengan berikut ini:
disabled: true displayName: my-service-account email: my-service-account@my-project.iam.gserviceaccount.com ...
Jika akun layanan nonaktif, aktifkan:
gcloud iam service-accounts enable SERVICE_ACCOUNT
Jika akun layanan sudah aktif dan error tetap berlanjut, berikan izin minimum yang diperlukan untuk GKE kepada akun layanan:
gcloud projects add-iam-policy-binding PROJECT_ID \
--member "serviceAccount:SERVICE_ACCOUNT" \
--role roles/container.nodeServiceAccount
Namespace macet dalam status Terminating saat cluster memiliki 0 node
Masalah berikut terjadi saat Anda menghapus namespace di sebuah cluster setelah cluster memperkecil skala hingga nol node. Komponen metrics-server
tidak dapat menerima permintaan penghapusan namespace karena komponen tidak memiliki replika.
Untuk mendiagnosis masalah ini, jalankan perintah berikut:
kubectl describe ns/NAMESPACE_NAME
Ganti NAMESPACE_NAME
dengan nama namespace.
Output-nya adalah sebagai berikut:
Discovery failed for some groups, 1 failing: unable to retrieve the complete
list of server APIs: metrics.k8s.io/v1beta1: the server is currently unable to
handle the request
Untuk mengatasi masalah ini, tingkatkan skala workload apa pun untuk memicu GKE guna membuat node baru. Saat node sudah siap, permintaan penghapusan namespace akan otomatis selesai. Setelah GKE menghapus namespace, turunkan skala workload.
Masalah penskalaan
Peningkatan skala node gagal: Pod berisiko tidak dijadwalkan
Masalah berikut terjadi jika logging port serial dinonaktifkan di project Google Cloud Anda. Cluster Autopilot GKE memerlukan logging port serial untuk men-debug masalah node secara efektif. Jika logging port serial dinonaktifkan, Autopilot tidak dapat menyediakan node untuk menjalankan workload Anda.
Pesan error di log peristiwa Kubernetes Anda mirip dengan pesan berikut:
LAST SEEN TYPE REASON OBJECT MESSAGE
12s Warning FailedScaleUp pod/pod-test-5b97f7c978-h9lvl Node scale up in zones associated with this pod failed: Internal error. Pod is at risk of not being scheduled
Logging port serial mungkin dinonaktifkan di tingkat organisasi melalui kebijakan organisasi yang menerapkan batasan compute.disableSerialPortLogging
. Logging port serial juga dapat dinonaktifkan di tingkat project atau instance virtual machine (VM).
Untuk mengatasi masalah ini, lakukan langkah berikut:
- Minta administrator kebijakan organisasi Google Cloud Anda untuk menghapus batasan
compute.disableSerialPortLogging
dalam project yang berisi cluster Autopilot Anda. - Jika Anda tidak memiliki kebijakan organisasi yang menerapkan batasan ini, coba aktifkan logging port serial di metadata project Anda.
Tindakan ini memerlukan izin IAM
compute.projects.setCommonInstanceMetadata
.
Peningkatan skala node gagal: GCE kehabisan resource
Masalah berikut terjadi saat beban kerja Anda meminta lebih banyak resource daripada yang tersedia untuk digunakan di region atau zona Compute Engine tersebut. Pod Anda mungkin tetap
dalam status Pending
.
Periksa peristiwa Pod Anda:
kubectl get events --for='POD_NAME' --types=Warning
Ganti
RESOURCE_NAME
dengan nama resource Kubernetes yang tertunda. Contohnya,pod/example-pod
.Outputnya mirip dengan hal berikut ini:
LAST SEEN TYPE REASON OBJECT Message 19m Warning FailedScheduling pod/example-pod gke.io/optimize-utilization-scheduler 0/2 nodes are available: 2 node(s) didn't match Pod's node affinity/selector. preemption: 0/2 nodes are available: 2 Preemption is not helpful for scheduling. 14m Warning FailedScheduling pod/example-pod gke.io/optimize-utilization-scheduler 0/2 nodes are available: 2 node(s) didn't match Pod's node affinity/selector. preemption: 0/2 nodes are available: 2 Preemption is not helpful for scheduling. 12m (x2 over 18m) Warning FailedScaleUp cluster-autoscaler Node scale up in zones us-central1-f associated with this pod failed: GCE out of resources. Pod is at risk of not being scheduled. 34s (x3 over 17m) Warning FailedScaleUp cluster-autoscaler Node scale up in zones us-central1-b associated with this pod failed: GCE out of resources. Pod is at risk of not being scheduled.
Untuk mengatasi masalah ini, coba langkah-langkah berikut:
- Deploy Pod di region atau zona yang berbeda. Jika Pod Anda memiliki pembatasan zona seperti pemilih topologi, hapus batasan tersebut jika memungkinkan. Untuk mengetahui petunjuknya, lihat Menempatkan Pod GKE di zona tertentu.
- Buat cluster di region lain dan coba deployment lagi.
- Coba gunakan class komputasi lain. Class Compute yang didukung oleh jenis mesin Compute Engine yang lebih kecil cenderung memiliki resource yang tersedia. Misalnya, jenis mesin default untuk Autopilot memiliki ketersediaan tertinggi. Untuk mengetahui daftar class komputasi dan jenis mesin yang sesuai, lihat Kapan harus menggunakan class komputasi tertentu.
- Jika Anda menjalankan beban kerja GPU, GPU yang diminta mungkin tidak tersedia di lokasi node Anda. Coba deploy workload di lokasi lain atau minta jenis GPU lain.
Untuk menghindari masalah peningkatan skala yang disebabkan oleh ketersediaan resource pada masa mendatang, pertimbangkan pendekatan berikut:
- Gunakan Kubernetes PriorityClasses untuk secara konsisten menyediakan kapasitas komputasi tambahan di cluster Anda. Untuk mengetahui detailnya, lihat Menyediakan kapasitas komputasi tambahan untuk penskalaan Pod dengan cepat.
- Gunakan reservasi kapasitas Compute Engine dengan class komputasi Performance atau Accelerator. Untuk mengetahui detailnya, lihat Menggunakan resource zona yang dicadangkan.
Node gagal ditingkatkan skalanya: Resource zona pod terlampaui
Masalah berikut terjadi saat Autopilot tidak menyediakan node baru untuk Pod di zona tertentu karena node baru akan melanggar batas resource.
Pesan error di log Anda mirip dengan berikut ini:
"napFailureReasons": [
{
"messageId": "no.scale.up.nap.pod.zonal.resources.exceeded",
...
Error ini merujuk ke peristiwa noScaleUp
, di mana penyediaan node secara otomatis tidak menghasilkan grup node apa pun untuk Pod di zona itu.
Jika Anda mengalami error ini, konfirmasi hal berikut:
- Pod Anda memiliki memori dan CPU yang memadai.
- Rentang CIDR alamat IP pod cukup besar untuk mendukung ukuran cluster maksimum yang Anda harapkan.
Masalah workload
Pod terjebak dalam status Pending
Pod mungkin macet dalam status Pending
jika Anda memilih node tertentu untuk digunakan Pod, tetapi jumlah permintaan resource di Pod dan DaemonSets yang harus berjalan di node melebihi kapasitas maksimum yang dapat dialokasikan untuk node tersebut. Hal ini dapat menyebabkan Pod Anda mendapatkan status Pending
dan tetap tidak terjadwal.
Untuk menghindari masalah ini, evaluasi workload yang di-deploy guna memastikan ukurannya tidak melampaui batas permintaan resource maksimum yang didukung untuk Autopilot.
Anda juga dapat mencoba menjadwalkan DaemonSets sebelum menjadwalkan Pod workload reguler.
Performa workload di node tertentu selalu tidak dapat diandalkan
Pada GKE versi 1.24 dan yang lebih baru, jika workload di node tertentu terus-menerus mengalami gangguan, error, atau perilaku negatif serupa, Anda dapat memberi tahu GKE tentang node yang bermasalah dengan menutup aksesnya menggunakan perintah berikut:
kubectl drain NODE_NAME --ignore-daemonsets
Ganti NODE_NAME
dengan nama node yang bermasalah.
Anda dapat menemukan nama node dengan menjalankan kubectl get nodes
.
GKE melakukan hal berikut:
- Mengeluarkan workload yang ada dari node dan menghentikan penjadwalan workload di node tersebut.
- Otomatis membuat ulang workload yang dikeluarkan yang dikelola oleh pengontrol, seperti Deployment atau StatefulSet, di node lain.
- Menghentikan workload apa pun yang masih ada di node dan memperbaiki atau membuat ulang node tersebut dari waktu ke waktu.
- Jika Anda menggunakan Autopilot, GKE akan langsung mematikan dan mengganti node tersebut serta mengabaikan semua PodDisruptionBudget yang telah dikonfigurasi.
Pod memerlukan waktu lebih lama dari yang diperkirakan untuk dijadwalkan di cluster kosong
Peristiwa ini terjadi saat Anda men-deploy beban kerja ke cluster Autopilot yang tidak memiliki beban kerja lain. Cluster autopilot dimulai dengan nol node yang dapat digunakan dan diskalakan hingga nol node jika cluster kosong untuk menghindari resource komputasi yang tidak terpakai dalam cluster. Men-deploy beban kerja di cluster yang memiliki nol node akan memicu peristiwa peningkatan skala.
Jika Anda mengalami hal ini, Autopilot akan berfungsi sebagaimana mestinya, dan Anda tidak perlu melakukan tindakan apa pun. Workload Anda akan di-deploy seperti yang diharapkan setelah node baru dimulai.
Periksa apakah Pod Anda menunggu node baru:
Jelaskan Pod Anda yang tertunda:
kubectl describe pod POD_NAME
Ganti
POD_NAME
dengan nama Pod Anda yang tertunda.Periksa bagian
Events
dari output. Jika Pod menunggu node baru, output-nya akan mirip dengan berikut ini:Events: Type Reason Age From Message ---- ------ ---- ---- ------- Warning FailedScheduling 11s gke.io/optimize-utilization-scheduler no nodes available to schedule pods Normal TriggeredScaleUp 4s cluster-autoscaler pod triggered scale-up: [{https://www.googleapis.com/compute/v1/projects/example-project/zones/example-zone/instanceGroups/gk3-example-cluster-pool-2-9293c6db-grp 0->1 (max: 1000)} {https://www.googleapis.com/compute/v1/projects/example-project/zones/example-zone/instanceGroups/gk3-example-cluster-pool-2-d99371e7-grp 0->1 (max: 1000)}]
Peristiwa
TriggeredScaleUp
menunjukkan bahwa skala cluster Anda ditingkatkan dari nol node menjadi jumlah node yang diperlukan untuk menjalankan beban kerja yang di-deploy.