Halaman ini menunjukkan cara menyelesaikan masalah pada cluster Autopilot Google Kubernetes Engine (GKE).
Jika Anda memerlukan bantuan tambahan, 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 workload 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 events --for='pod/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 pembatasan jika memungkinkan. Untuk mengetahui petunjuknya, lihat Menempatkan Pod GKE di zona tertentu.
- Buat cluster di region lain dan coba lagi deployment.
- Coba gunakan class komputasi yang berbeda. Class komputasi 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 Anda di lokasi lain atau minta jenis GPU yang berbeda.
Untuk menghindari masalah penskalaan yang disebabkan oleh ketersediaan resource di masa mendatang, pertimbangkan pendekatan berikut:
- Gunakan PriorityClasses Kubernetes untuk menyediakan kapasitas komputasi tambahan secara konsisten di cluster Anda. Untuk mengetahui detailnya, lihat Menyediakan kapasitas komputasi tambahan untuk penskalaan Pod yang cepat.
- Gunakan reservasi kapasitas Compute Engine dengan class komputasi Performa 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
Workload macet dengan error penyimpanan efemeral
GKE tidak akan membuat Pod jika permintaan penyimpanan sementara Pod Anda melebihi maksimum Autopilot sebesar 10 GiB di GKE versi 1.28.6-gke.1317000 dan yang lebih baru.
Untuk mendiagnosis masalah ini, jelaskan pengontrol beban kerja, seperti Deployment atau Tugas:
kubectl describe CONTROLLER_TYPE/CONTROLLER_NAME
Ganti kode berikut:
CONTROLLER_TYPE
: jenis pengontrol beban kerja, sepertireplicaset
ataudaemonset
. Untuk daftar jenis pengontrol, lihat Pengelolaan workload.CONTROLLER_NAME
: nama workload yang macet.
Jika Pod tidak dibuat karena permintaan penyimpanan sementara melebihi maksimum, output-nya akan seperti berikut:
# lines omitted for clarity
Events:
{"[denied by autogke-pod-limit-constraints]":["Max ephemeral-storage requested by init containers for workload '' is higher than the Autopilot maximum of '10Gi'.","Total ephemeral-storage requested by containers for workload '' is higher than the Autopilot maximum of '10Gi'."]}
Untuk mengatasi masalah ini, perbarui permintaan penyimpanan efemeral Anda sehingga total penyimpanan efemeral yang diminta oleh penampung workload dan oleh penampung yang dimasukkan webhook kurang dari atau sama dengan maksimum yang diizinkan. Untuk informasi selengkapnya tentang maksimum, lihat Permintaan resource di Autopilot. untuk konfigurasi 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 workload ke cluster Autopilot yang tidak memiliki workload lain. Cluster Autopilot dimulai dengan nol node yang dapat digunakan dan diskalakan menjadi nol node jika cluster kosong untuk menghindari resource komputasi yang tidak digunakan di cluster. Men-deploy workload di cluster yang tidak memiliki node akan memicu peristiwa penskalaan.
Jika Anda mengalami hal ini, Autopilot berfungsi sebagaimana mestinya, dan Anda tidak perlu melakukan tindakan apa pun. Workload Anda akan di-deploy seperti yang diharapkan setelah node baru di-booting.
Periksa apakah Pod Anda menunggu node baru:
Deskripsikan Pod yang tertunda:
kubectl describe pod POD_NAME
Ganti
POD_NAME
dengan nama Pod yang tertunda.Periksa bagian
Events
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 cluster Anda diskalakan dari nol node hingga sebanyak node yang diperlukan untuk menjalankan beban kerja yang di-deploy.
Error terkait izin saat mencoba menjalankan tcpdump dari Pod di GKE Autopilot
Akses ke node yang mendasarinya dilarang di cluster GKE Autopilot. Oleh karena itu, Anda harus menjalankan utilitas tcpdump
dari dalam Pod, lalu menyalinnya menggunakan perintah kubectl cp.
Jika Anda biasanya menjalankan utilitas tcpdump dari dalam Pod di cluster Autopilot GKE, Anda mungkin melihat error berikut:
tcpdump: eth0: You don't have permission to perform this capture on that device
(socket: Operation not permitted)
Hal ini terjadi karena GKE Autopilot, secara default, menerapkan konteks keamanan ke semua Pod yang menghapus kemampuan NET_RAW
untuk mengurangi potensi kerentanan. Contoh:
apiVersion: v1
kind: Pod
metadata:
labels:
app: tcpdump
name: tcpdump
spec:
containers:
- image: nginx
name: nginx
resources:
limits:
cpu: 500m
ephemeral-storage: 1Gi
memory: 2Gi
requests:
cpu: 500m
ephemeral-storage: 1Gi
memory: 2Gi
securityContext:
capabilities:
drop:
- NET_RAW
Sebagai solusi, jika beban kerja Anda memerlukan kemampuan NET_RAW
, Anda dapat mengaktifkannya kembali:
Tambahkan kemampuan
NET_RAW
ke bagiansecurityContext
dalam spesifikasi YAML Pod Anda:securityContext: capabilities: add: - NET_RAW
Jalankan
tcpdump
dari dalam Pod:tcpdump port 53 -w packetcap.pcap tcpdump: listening on eth0, link-type EN10MB (Ethernet), snapshot length 262144 bytes
Gunakan perintah
kubectl cp
untuk menyalinnya ke komputer lokal Anda untuk analisis lebih lanjut:kubectl cp POD_NAME:/PATH_TO_FILE/FILE_NAME/PATH_TO_FILE/FILE_NAME
Gunakan
kubectl exec
untuk menjalankan perintahtcpdump
guna melakukan pengambilan paket jaringan dan mengalihkan output:kubectl exec -it POD_NAME -- bash -c "tcpdump port 53 -w -" > packet-new.pcap