Memecahkan masalah cluster Autopilot


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:

  1. 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, seperti my-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
    ...
    
  2. 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:

  1. Minta administrator kebijakan organisasi Google Cloud Anda untuk menghapus batasan compute.disableSerialPortLogging dalam project yang berisi cluster Autopilot Anda.
  2. 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:

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:

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:

  1. Jelaskan Pod Anda yang tertunda:

    kubectl describe pod POD_NAME
    

    Ganti POD_NAME dengan nama Pod Anda yang tertunda.

  2. 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.

Langkah selanjutnya

Jika Anda memerlukan bantuan lainnya, hubungi Cloud Customer Care.