Jika upgrade bidang kontrol atau node pool Google Kubernetes Engine (GKE) Anda gagal, macet, atau menyebabkan perilaku workload yang tidak terduga, Anda mungkin perlu memecahkan masalah proses tersebut. Memastikan panel kontrol dan kumpulan node Anda selalu diupdate sangat penting untuk keamanan dan performa, dan menyelesaikan masalah apa pun akan membantu memastikan lingkungan Anda tetap stabil.
Untuk mengatasi masalah upgrade umum, langkah pertama yang baik adalah memantau proses upgrade cluster. Kemudian, Anda dapat menemukan saran tentang cara menyelesaikan masalah Anda:
- Upgrade node pool memerlukan waktu lebih lama dari biasanya.
- Upgrade node pool yang belum selesai.
- Perilaku upgrade otomatis yang tidak terduga.
- Upgrade gagal dengan pesan error tertentu.
- Masalah setelah upgrade selesai.
- Masalah kompatibilitas versi.
Informasi ini penting bagi admin dan operator Platform yang ingin
mendiagnosis penyebab utama upgrade yang macet atau gagal, mengelola kebijakan
pemeliharaan, dan menyelesaikan ketidakcocokan versi. Developer aplikasi dapat
menemukan panduan tentang cara mengatasi masalah workload pasca-upgrade dan memahami cara
konfigurasi workload, seperti PodDisruptionBudgets
, dapat memengaruhi durasi upgrade. Untuk mengetahui informasi selengkapnya tentang peran umum dan contoh tugas yang kami referensikan dalam konten Trusted Cloud by S3NS , lihat Peran dan tugas pengguna GKE umum.
Memantau proses upgrade cluster
Untuk menyelesaikan masalah upgrade secara lebih efektif, mulailah dengan memahami apa yang terjadi selama proses upgrade. GKE menyediakan beberapa alat yang memberi Anda visibilitas ke dalam proses ini.
Di konsol Trusted Cloud , dasbor upgrade menawarkan tampilan seluruh project dari
semua upgrade cluster yang sedang berlangsung, linimasa peristiwa terbaru, dan peringatan tentang
kemungkinan pemblokir seperti pengecualian pemeliharaan aktif atau penghentian penggunaan
versi mendatang. Untuk pemeriksaan command line atau otomatis, Anda dapat menggunakan perintah gcloud
container operations list
untuk mendapatkan status operasi upgrade tertentu. Untuk mengetahui informasi selengkapnya, lihat Mendapatkan visibilitas ke dalam upgrade cluster.
Untuk penyelidikan yang lebih mendetail, Cloud Logging adalah sumber informasi utama Anda. GKE mencatat informasi mendetail tentang proses upgrade panel kontrol dan node pool dalam Cloud Logging. Hal ini mencakup log audit tingkat tinggi yang melacak operasi upgrade utama, serta log yang lebih terperinci seperti Peristiwa Kubernetes dan log dari komponen node, yang dapat menunjukkan informasi lebih lanjut tentang error tertentu.
Bagian berikut menjelaskan cara membuat kueri log ini menggunakan Logs Explorer atau gcloud CLI. Untuk mengetahui informasi selengkapnya, lihat Memeriksa log upgrade.
Mengidentifikasi operasi upgrade dengan log audit
Jika tidak mengetahui operasi upgrade mana yang gagal, Anda dapat menggunakan log audit GKE. Log audit melacak tindakan administratif dan memberikan catatan resmi tentang kapan upgrade dimulai dan status akhirnya. Gunakan kueri berikut di Logs Explorer untuk menemukan operasi yang relevan.
Jenis peristiwa | Kueri log |
---|---|
Upgrade otomatis bidang kontrol |
resource.type="gke_cluster" protoPayload.methodName="google.container.internal.ClusterManagerInternal.UpdateClusterInternal" log_id("cloudaudit.googleapis.com/activity") protoPayload.metadata.operationType="UPGRADE_MASTER" resource.labels.cluster_name="CLUSTER_NAME" Ganti Kueri ini menampilkan versi bidang kontrol target dan versi bidang kontrol sebelumnya. |
Upgrade manual bidang kontrol |
resource.type="gke_cluster" log_id("cloudaudit.googleapis.com/activity") protoPayload.response.operationType="UPGRADE_MASTER" resource.labels.cluster_name="CLUSTER_NAME"
|
Upgrade otomatis node pool (hanya versi target) |
resource.type="gke_nodepool" protoPayload.methodName="google.container.internal.ClusterManagerInternal.UpdateClusterInternal" log_id("cloudaudit.googleapis.com/activity") protoPayload.metadata.operationType="UPGRADE_NODES" resource.labels.cluster_name="CLUSTER_NAME" resource.labels.nodepool_name="NODEPOOL_NAME" Ganti |
Upgrade manual node pool |
resource.type="gke_nodepool" protoPayload.methodName="google.container.v1.ClusterManager.UpdateNodePool" log_id("cloudaudit.googleapis.com/activity") protoPayload.response.operationType="UPGRADE_NODES" resource.labels.cluster_name="CLUSTER_NAME" resource.labels.nodepool_name="NODEPOOL_NAME" Untuk menemukan versi kumpulan node sebelumnya, periksa log Kubernetes API: resource.type="k8s_cluster" resource.labels.cluster_name="CLUSTER_NAME" protoPayload.methodName="nodes.patch" |
Menemukan pesan error mendetail di log GKE
Setelah log audit menunjukkan operasi mana yang gagal dan kapan, Anda dapat menelusuri pesan error yang lebih mendetail dari komponen GKE pada waktu yang sama. Log ini dapat berisi alasan spesifik kegagalan upgrade,
seperti objek PodDisruptionBudget
yang salah dikonfigurasi.
Misalnya, setelah menemukan operasi UPGRADE_NODES
yang gagal dalam log audit, Anda dapat menggunakan stempel waktunya untuk mempersempit penelusuran. Di Logs Explorer, masukkan kueri berikut, lalu gunakan pemilih rentang waktu untuk berfokus pada waktu saat kegagalan terjadi:
resource.type="k8s_node"
resource.labels.cluster_name="CLUSTER_NAME"
resource.labels.node_name="NODE_NAME"
severity=ERROR
Ganti kode berikut:
CLUSTER_NAME
: nama cluster Anda.NODE_NAME
: nama node dalam cluster yang ingin Anda periksa apakah ada error.
Menggunakan gcloud CLI untuk melihat peristiwa upgrade
Selain Logs Explorer, Anda dapat menggunakan perintah gcloud CLI untuk meninjau peristiwa upgrade.
Untuk mencari upgrade bidang kontrol, jalankan perintah berikut:
gcloud container operations list --filter="TYPE=UPGRADE_MASTER"
Outputnya mirip dengan hal berikut ini:
NAME: operation-1748588803271-cfd407a2-bfe7-4b9d-8686-9f1ff33a2a96
TYPE: UPGRADE_MASTER
LOCATION: LOCATION
TARGET: CLUSTER_NAME
STATUS_MESSAGE:
STATUS: DONE
START_TIME: 2025-05-30T07:06:43.271089972Z
END_TIME: 2025-05-30T07:18:02.639579287Z
Output ini mencakup nilai-nilai berikut:
LOCATION
: region atau zona Compute Engine (misalnya,us-central1
atauus-central1-a
) untuk cluster.CLUSTER_NAME
: nama cluster Anda.
Untuk mencari upgrade node pool, jalankan perintah berikut:
gcloud container operations list --filter="TYPE=UPGRADE_NODES"
Outputnya mirip dengan hal berikut ini:
NAME: operation-1748588803271-cfd407a2-bfe7-4b9d-8686-9f1ff33a2a96
TYPE: UPGRADE_NODES
LOCATION: LOCATION
TARGET: CLUSTER_NAME
STATUS_MESSAGE:
STATUS: DONE
START_TIME: 2025-05-30T07:06:43.271089972Z
END_TIME: 2025-05-30T07:18:02.639579287Z
Contoh: Menggunakan log untuk memecahkan masalah upgrade bidang kontrol
Contoh berikut menunjukkan cara menggunakan log untuk memecahkan masalah upgrade bidang kontrol yang tidak berhasil:
Di konsol Trusted Cloud , buka halaman Logs Explorer.
Di panel kueri, filter log upgrade panel kontrol dengan memasukkan kueri berikut:
resource.type="gke_cluster" protoPayload.metadata.operationType=~"(UPDATE_CLUSTER|UPGRADE_MASTER)" resource.labels.cluster_name="CLUSTER_NAME"
Ganti
CLUSTER_NAME
dengan nama cluster yang ingin Anda selidiki.Klik Run query.
Tinjau output log untuk mengetahui informasi berikut:
Konfirmasi bahwa upgrade telah dimulai: cari peristiwa
UPGRADE_MASTER
terkini di sekitar waktu Anda memulai upgrade. Kehadiran peristiwa ini mengonfirmasi bahwa Anda atau GKE memicu proses upgrade.Verifikasi versi: periksa kolom berikut untuk mengonfirmasi versi sebelumnya dan target:
protoPayload.metadata.previousMasterVersion
: menampilkan versi bidang kontrol sebelum upgrade.protoPayload.metadata.currentMasterVersion
: menampilkan versi yang digunakan GKE untuk mencoba mengupgrade bidang kontrol.Misalnya, jika Anda ingin mengupgrade ke versi 1.30.1-gke.1234, tetapi secara tidak sengaja menentukan 1.30.2-gke.4321 (versi yang lebih baru dan berpotensi tidak kompatibel untuk workload Anda), meninjau kedua kolom ini akan menunjukkan perbedaan tersebut. Atau, jika kolom
currentMasterVersion
masih menampilkan versi sebelumnya setelah jangka waktu yang lama, temuan ini menunjukkan bahwa upgrade gagal menerapkan versi baru.
Cari error: periksa peristiwa
UPGRADE_MASTER
yang berulang atau pesan error lainnya. Jika log operasi berhenti tanpa menunjukkan penyelesaian atau kegagalan, temuan ini menunjukkan adanya masalah.
Setelah mengidentifikasi error atau perilaku tertentu dari log, Anda dapat menggunakan informasi tersebut untuk menemukan solusi yang sesuai dalam panduan ini.
Memecahkan masalah upgrade node pool yang memerlukan waktu lebih lama dari biasanya
Jika upgrade node pool memerlukan waktu lebih lama dari yang diperkirakan, coba solusi berikut:
- Periksa nilai
terminationGracePeriodSeconds
dalam manifes Pod Anda. Nilai ini menentukan waktu maksimum yang ditunggu Kubernetes agar Pod dimatikan dengan benar. Nilai yang tinggi (misalnya, beberapa menit) dapat memperpanjang durasi upgrade secara signifikan karena Kubernetes menunggu seluruh periode untuk setiap Pod. Jika penundaan ini menyebabkan masalah, pertimbangkan untuk mengurangi nilai. Periksa objek
PodDisruptionBudget
Anda. Saat node sedang dikosongkan, GKE menunggu paling lama satu jam per node untuk mengeluarkan workloadnya dengan benar. Jika objekPodDisruptionBudget
Anda terlalu ketat, hal ini dapat mencegah pengusiran yang lancar berhasil. Dalam skenario ini, GKE menggunakan seluruh masa tenggang satu jam untuk mencoba menguras node sebelum akhirnya waktu habis dan upgrade dipaksa untuk dilanjutkan. Penundaan ini, jika terjadi berulang kali di beberapa node, adalah penyebab umum lambatnya upgrade cluster secara keseluruhan. Untuk mengonfirmasi apakah objekPodDisruptionBudget
yang membatasi adalah penyebab upgrade lambat, gunakan Logs Explorer:Di konsol Trusted Cloud , buka halaman Logs Explorer.
Di panel kueri, masukkan kueri berikut:
resource.type=("gke_cluster" OR "k8s_cluster") resource.labels.cluster_name="CLUSTER_NAME" protoPayload.response.message="Cannot evict pod as it would violate the pod's disruption budget." log_id("cloudaudit.googleapis.com/activity")
Klik Run query.
Tinjau output log. Jika objek
PodDisruptionBudget
adalah penyebab masalah Anda, outputnya akan mirip dengan berikut ini:resourceName: "core/v1/namespaces/istio-system/pods/POD_NAME/eviction" response: { @type: "core.k8s.io/v1.Status" apiVersion: "v1" code: 429 details: { causes: [ 0: { message: "The disruption budget istio-egressgateway needs 1 healthy pods and has 1 currently" reason: "DisruptionBudget" } ] } kind: "Status" message: "Cannot evict pod as it would violate the pod's disruption budget." metadata: { } reason: "TooManyRequests" status: "Failure" }
Setelah Anda mengonfirmasi bahwa objek
PodDisruptionBudget
adalah penyebabnya, buat daftar semua objekPodDisruptionBudget
dan pastikan setelannya sesuai: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 3 0 1 12d
Dalam contoh ini,
PodDisruptionBudget
bernamaone_pdb
memerlukan minimal tiga Pod yang tersedia. Karena mengeluarkan Pod selama upgrade hanya akan menyisakan dua Pod, tindakan ini melanggar anggaran dan menyebabkan upgrade terhenti.Jika objek
PodDisruptionBudget
berfungsi seperti yang Anda inginkan, Anda tidak perlu melakukan tindakan apa pun. Jika tidak, pertimbangkan untuk mengurangi setelanPodDisruptionBudget
selama periode upgrade.
Periksa afinitas node Anda. Aturan ketat dapat memperlambat upgrade dengan mencegah Pod dijadwalkan ulang ke node yang tersedia jika node tersebut tidak cocok dengan label yang diperlukan. Masalah ini sangat bermasalah selama upgrade lonjakan karena afinitas node dapat membatasi jumlah node yang dapat diupgrade secara bersamaan jika node dengan label yang benar tidak memiliki kapasitas cluster yang cukup untuk menghosting Pod baru.
Periksa apakah Anda menggunakan strategi upgrade singkat. GKE menggunakan strategi upgrade berdurasi singkat untuk node flex-start dan untuk node yang hanya menggunakan penyediaan dalam antrean pada cluster yang menjalankan GKE versi 1.32.2-gke.1652000 atau yang lebih baru. Jika Anda menggunakan strategi upgrade ini, operasi upgrade dapat memerlukan waktu hingga tujuh hari.
Periksa apakah Anda menggunakan Pod durasi yang diperpanjang (tersedia untuk cluster Autopilot). Selama upgrade, GKE harus menguras semua Pod dari node sebelum proses dapat selesai. Namun, selama upgrade yang dimulai oleh GKE, GKE tidak menghapus Pod dengan durasi yang diperpanjang hingga tujuh hari. Perlindungan ini mencegah node dikuras. GKE menghentikan Pod secara paksa hanya setelah periode ini berakhir, dan penundaan multi-hari yang signifikan untuk satu node ini dapat menunda upgrade lebih banyak node di cluster Autopilot.
Persistent Volume yang terpasang dapat menyebabkan proses upgrade memerlukan waktu lebih lama dari biasanya, karena waktu yang diperlukan untuk mengelola siklus proses volume ini.
Periksa status upgrade otomatis cluster. Jika alasannya adalah
SYSTEM_CONFIG
, upgrade otomatis akan dijeda sementara karena alasan teknis atau bisnis. Jika Anda melihat alasan ini, sebaiknya jangan melakukan upgrade manual kecuali jika diperlukan.
Memecahkan masalah upgrade node pool yang tidak selesai
Terkadang, GKE tidak dapat menyelesaikan upgrade node pool, sehingga node pool hanya diupgrade sebagian. Ada beberapa alasan yang menyebabkan upgrade tidak selesai:
- Upgrade dibatalkan secara manual.
- Upgrade gagal karena masalah seperti node baru gagal didaftarkan, kehabisan alamat IP, atau kuota resource tidak mencukupi.
- GKE menjeda upgrade. Penangguhan ini dapat terjadi, misalnya, untuk mencegah upgrade ke versi dengan masalah yang diketahui atau selama periode pemeliharaan tertentu yang dimulai oleh Google.
- Jika Anda menggunakan upgrade otomatis, masa pemeliharaan berakhir sebelum upgrade dapat diselesaikan. Atau, periode pengecualian pemeliharaan dimulai sebelum upgrade dapat diselesaikan. Untuk mengetahui informasi selengkapnya, lihat Masa pemeliharaan mencegah penyelesaian update node.
Jika node pool diupgrade sebagian, node akan berjalan di versi yang berbeda. Untuk menyelesaikan masalah ini dan memverifikasi bahwa semua node dalam node pool berjalan di versi yang sama, Anda dapat melanjutkan upgrade atau melakukan roll back upgrade.
Namun, strategi upgrade lonjakan dan strategi upgrade blue-green berinteraksi dengan masa pemeliharaan secara berbeda:
- Upgrade lonjakan: operasi upgrade dijeda jika berjalan di luar masa pemeliharaan. Upgrade akan dilanjutkan secara otomatis selama masa pemeliharaan terjadwal berikutnya.
- Upgrade blue-green: operasi upgrade berlanjut hingga selesai, meskipun melampaui periode pemeliharaan. Upgrade biru-hijau menawarkan kontrol terperinci atas kecepatan upgrade dengan fitur seperti waktu tunggu batch dan node pool, dan node pool tambahan membantu memastikan beban kerja tetap beroperasi.
Memecahkan masalah perilaku upgrade otomatis yang tidak terduga
Terkadang, upgrade otomatis cluster tidak terjadi seperti yang Anda harapkan. Bagian berikut membantu Anda menyelesaikan masalah berikut:
- Cluster gagal diupgrade saat upgrade otomatis diaktifkan
- Cluster diupgrade secara otomatis saat upgrade otomatis tidak diaktifkan
Cluster gagal diupgrade saat upgrade otomatis node diaktifkan
Jika Anda belum menonaktifkan upgrade otomatis node, tetapi upgrade tidak terjadi, coba solusi berikut:
Jika Anda menggunakan saluran rilis, pastikan upgrade otomatis node tidak diblokir. Untuk cluster yang terdaftar di saluran rilis,
maintenancePolicy
Anda adalah cara utama untuk mengontrol upgrade otomatis. Hal ini dapat mencegah upgrade dimulai atau mengganggu upgrade yang sedang berlangsung. Pengecualian pemeliharaan aktif dapat memblokir upgrade sepenuhnya dan pengaturan waktu masa pemeliharaan dapat menyebabkan gangguan. TinjaumaintenancePolicy
Anda untuk menentukan apakah salah satu setelan ini menjadi penyebabnya:gcloud container clusters describe CLUSTER_NAME \ --project PROJECT_ID \ --location LOCATION
Ganti kode berikut:
CLUSTER_NAME
: nama cluster node pool yang akan dideskripsikan.PROJECT_ID
: project ID cluster.LOCATION
: region atau zona Compute Engine (misalnya,us-central1
atauus-central1-a
) untuk cluster.
Outputnya mirip dengan hal berikut ini:
… maintenancePolicy: maintenanceExclusions: - exclusionName: critical-event-q4-2025 startTime: '2025-12-20T00:00:00Z' endTime: '2026-01-05T00:00:00Z' scope: noUpgrades: true # This exclusion blocks all upgrades window: dailyMaintenanceWindow: startTime: 03:00 # Daily window at 03:00 UTC …
Pada output, tinjau bagian
maintenancePolicy
untuk dua kondisi berikut:- Untuk melihat apakah upgrade diblokir: cari
maintenanceExclusion
aktif dengan cakupanNO_MINOR_OR_NODE_UPGRADES
. Setelan ini umumnya mencegah GKE memulai upgrade baru. - Untuk melihat apakah upgrade terganggu: periksa jadwal untuk
dailyMaintenanceWindow
ataumaintenanceExclusions
Anda. Jika upgrade berjalan di luar periode yang dijadwalkan, GKE akan menjeda upgrade, sehingga menghasilkan upgrade sebagian. Untuk mengetahui informasi selengkapnya tentang upgrade parsial, lihat bagian Memecahkan masalah upgrade yang tidak selesai.
Untuk mengatasi masalah ini, Anda dapat menunggu hingga pengecualian berakhir, menghapusnya, atau menyesuaikan periode pemeliharaan untuk memberikan lebih banyak waktu agar upgrade selesai.
Jika Anda tidak menggunakan saluran rilis, pastikan upgrade otomatis masih diaktifkan untuk node pool:
gcloud container node-pools describe NODE_POOL_NAME \ --cluster CLUSTER_NAME \ --location LOCATION
Ganti
NODE_POOL_NAME
dengan nama node pool yang akan dideskripsikan.Jika upgrade otomatis node pool diaktifkan untuk node pool ini, output di kolom
autoUpgrade
adalah sebagai berikut:management: autoUpgrade: true
Jika
autoUpgrade
disetel kefalse
, atau kolom tidak ada, aktifkan upgrade otomatis.Upgrade mungkin belum diluncurkan ke region atau zona tempat cluster Anda berada, meskipun upgrade tersebut disebutkan dalam catatan rilis. Upgrade GKE diluncurkan secara progresif selama beberapa hari (biasanya empat hari atau lebih). Setelah upgrade mencapai wilayah atau zona Anda, upgrade hanya dimulai selama masa pemeliharaan yang disetujui. Misalnya, peluncuran dapat mencapai zona cluster Anda pada Hari Pertama peluncuran, tetapi masa pemeliharaan berikutnya untuk cluster baru akan dilakukan pada Hari Ketujuh. Dalam skenario ini, GKE tidak akan mengupgrade cluster hingga Hari Ketujuh. Untuk mengetahui informasi selengkapnya, lihat jadwal rilis GKE.
Cluster diupgrade secara otomatis saat upgrade otomatis tidak diaktifkan
Untuk membantu menjaga keandalan, ketersediaan, keamanan, dan performa lingkungan GKE Anda, GKE dapat mengupgrade cluster Anda secara otomatis, meskipun Anda tidak menggunakan upgrade otomatis.
GKE dapat melewati masa pemeliharaan, pengecualian, atau upgrade otomatis node pool yang dinonaktifkan untuk melakukan upgrade yang diperlukan karena beberapa alasan penting, seperti berikut:
- Cluster yang bidang kontrolnya menjalankan versi GKE yang telah mencapai tanggal akhir dukungan. Untuk mengonfirmasi bahwa cluster Anda mendekati tanggal akhir dukungannya, lihat Perkiraan jadwal untuk saluran rilis.
- Node dalam cluster yang menjalankan versi GKE yang telah mencapai tanggal akhir dukungan.
- Cluster yang dalam status berjalan, tetapi tidak menunjukkan aktivitas selama jangka waktu yang lebih lama. Misalnya, GKE mungkin menganggap cluster tanpa panggilan API, tanpa traffic jaringan, dan tanpa penggunaan subnet yang aktif sebagai cluster yang diabaikan.
- Cluster yang menunjukkan ketidakstabilan persisten yang berulang kali melalui siklus status operasional. Misalnya, status yang berulang dari berjalan hingga terdegradasi, diperbaiki, atau ditangguhkan, lalu kembali berjalan tanpa penyelesaian.
Jika Anda mengamati upgrade otomatis yang tidak terduga dan memiliki kekhawatiran tentang efek yang mungkin ditimbulkan upgrade ini pada cluster Anda, hubungi Layanan Pelanggan Cloud untuk mendapatkan bantuan.
Memecahkan masalah upgrade yang gagal
Jika upgrade Anda gagal, GKE akan menampilkan pesan error. Bagian berikut menjelaskan penyebab dan penyelesaian untuk error berikut:
Error: kube-apiserver
tidak responsif
Terkadang, Anda mungkin melihat pesan error berikut saat memulai upgrade bidang kontrol manual versi GKE cluster:
FAILED: All cluster resources were brought up, but: component
"KubeApiserverReady" from endpoint "readyz of kube apiserver is not successful"
is unhealthy.
Pesan ini muncul di gcloud CLI dan di entri log jenis resource gke_cluster
dan
gke_nodepool
.
Masalah ini terjadi saat beberapa webhook penerimaan yang di-deploy oleh pengguna memblokir komponen sistem sehingga tidak dapat membuat peran RBAC permisif yang diperlukan agar berfungsi dengan benar.
Selama upgrade bidang kontrol, GKE akan membuat ulang komponen server Kubernetes API (kube-apiserver
). Jika webhook memblokir peran RBAC untuk komponen server API, server API tidak akan dimulai dan upgrade cluster tidak akan selesai. Meskipun webhook berfungsi dengan benar, webhook dapat menyebabkan upgrade cluster gagal karena bidang kontrol yang baru dibuat mungkin tidak dapat menjangkau webhook.
Kubernetes akan otomatis merekonsiliasi peran RBAC sistem default dengan kebijakan default dalam versi minor terbaru. Kebijakan default untuk peran sistem terkadang berubah pada versi Kubernetes baru.
Untuk melakukan rekonsiliasi ini, GKE membuat atau mengupdate ClusterRoles dan ClusterRoleBindings di cluster. Jika Anda memiliki webhook yang menghalangi dan menolak permintaan pembuatan atau update karena cakupan izin yang digunakan kebijakan RBAC default, server API tidak dapat berfungsi pada versi minor yang baru.
Untuk mengidentifikasi webhook yang gagal, periksa log audit GKE Anda untuk panggilan RBAC dengan informasi berikut:
protoPayload.resourceName="RBAC_RULE"
protoPayload.authenticationInfo.principalEmail="system:apiserver"
Dalam output ini, RBAC_RULE
adalah nama lengkap peran
RBAC, seperti
rbac.authorization.k8s.io/v1/clusterroles/system:controller:horizontal-pod-autoscaler
.
Nama webhook yang gagal ditampilkan di log dengan format berikut:
admission webhook WEBHOOK_NAME denied the request
Untuk mengatasi masalah ini, coba solusi berikut:
- Tinjau ClusterRole Anda untuk memastikan bahwa ClusterRole tersebut tidak terlalu ketat.
Kebijakan Anda tidak boleh memblokir permintaan GKE untuk membuat atau
memperbarui ClusterRole dengan awalan
system:
default. - Sesuaikan webhook Anda agar tidak menghalangi permintaan untuk membuat dan memperbarui peran RBAC sistem.
- Nonaktifkan webhook.
Error: DeployPatch gagal
Terkadang, operasi upgrade cluster gagal dengan error berikut:
DeployPatch failed
Error ini dapat terjadi jika bidang kontrol Kubernetes tetap tidak berfungsi selama lebih dari 20 menit.
Error ini sering kali bersifat sementara karena bidang kontrol mencoba kembali operasi hingga berhasil. Jika upgrade terus gagal dengan error ini, hubungi Cloud Customer Care.
Memecahkan masalah setelah upgrade selesai
Jika Anda mengalami perilaku yang tidak terduga setelah upgrade selesai, bagian berikut menawarkan panduan pemecahan masalah untuk masalah umum berikut:
- Perilaku tidak terduga karena perubahan yang menyebabkan gangguan
- Workload dikeluarkan setelah upgrade cluster Standard
- Pod terjebak dalam status Pending
- Penggunaan CPU node lebih tinggi dari yang diperkirakan
Perilaku yang tidak terduga karena perubahan yang merusak
Jika upgrade berhasil diselesaikan, tetapi Anda melihat perilaku yang tidak terduga setelah upgrade, periksa catatan rilis GKE untuk mengetahui informasi tentang bug dan perubahan yang menyebabkan gangguan terkait versi yang diupgrade cluster.
Workload dikeluarkan setelah upgrade cluster Standard
Workload Anda mungkin berisiko dikeluarkan setelah upgrade cluster jika semua kondisi berikut terpenuhi:
- Workload sistem memerlukan lebih banyak ruang saat bidang kontrol cluster menjalankan versi GKE baru.
- Node yang ada tidak memiliki resource yang cukup untuk menjalankan workload sistem baru dan workload yang ada.
- Autoscaler cluster dinonaktifkan untuk cluster.
Untuk mengatasi masalah ini, coba solusi berikut:
- Mengaktifkan penskalaan otomatis untuk node pool yang ada.
- Aktifkan penyediaan otomatis node.
- Buat node pool baru.
- Meningkatkan skala node pool yang ada.
Pod yang terjebak dalam status Pending
setelah mengonfigurasi Node Allocatable
Jika Anda telah mengonfigurasi
Node Allocatable,
upgrade versi node terkadang dapat menyebabkan Pod yang memiliki status Running
terjebak dalam status Pending
. Perubahan ini biasanya terjadi karena
node yang diupgrade menggunakan resource sistem yang sedikit berbeda, atau karena Pod yang
dijadwalkan ulang kini harus sesuai dengan batas Node yang Dapat Dialokasikan pada node baru atau
yang diubah, yang berpotensi dalam kondisi yang lebih ketat.
Jika Pod Anda memiliki status Pending
setelah upgrade, coba solusi berikut:
- Pastikan permintaan CPU dan memori untuk Pod Anda tidak melebihi penggunaan puncaknya. Dengan GKE yang mencadangkan CPU dan memori untuk overhead, Pod tidak dapat meminta resource ini. Pod yang meminta CPU atau memori yang melebihi penggunaannya akan mencegah Pod lain meminta resource ini, dan mungkin membuat cluster kurang dimanfaatkan. Untuk mengetahui informasi selengkapnya, lihat Cara Pod dengan permintaan resource dijadwalkan dalam dokumentasi Kubernetes.
- Pertimbangkan untuk meningkatkan ukuran cluster Anda.
- Untuk memverifikasi apakah upgrade adalah penyebab masalah ini, batalkan upgrade dengan melakukan downgrade pada node pool.
- Konfigurasikan cluster Anda untuk mengirim metrik scheduler Kubernetes ke Cloud Monitoring dan melihat metrik scheduler. Dengan memantau metrik ini, Anda dapat menentukan apakah ada cukup resource agar Pod dapat berjalan.
Memecahkan masalah versi dan kompatibilitas
Mempertahankan versi yang didukung dan kompatibel untuk semua komponen cluster Anda sangat penting untuk stabilitas dan performa. Bagian berikut memberikan panduan tentang cara mengidentifikasi dan menyelesaikan masalah versi dan kompatibilitas yang dapat memengaruhi proses upgrade.
Memeriksa inkompatibilitas versi bidang kontrol dan node
Perbedaan versi antara bidang kontrol dan node dapat menyebabkan ketidakstabilan cluster. Kebijakan ketidaksesuaian versi GKE menyatakan bahwa bidang kontrol hanya kompatibel dengan node hingga dua versi minor sebelumnya. Misalnya, bidang kontrol 1.19 berfungsi dengan node 1.19, 1.18, dan 1.17.
Jika node Anda berada di luar periode yang didukung ini, Anda berisiko mengalami masalah kompatibilitas kritis. Masalah ini sering kali terkait dengan API; misalnya, beban kerja pada node lama mungkin menggunakan versi API yang telah dihentikan atau dihapus di bidang kontrol yang lebih baru. Ketidakcocokan ini juga dapat menyebabkan kegagalan yang lebih parah, seperti jalur jaringan yang rusak yang mencegah node mendaftar ke cluster jika workload yang tidak kompatibel mengganggu komunikasi.
Secara berkala, tim GKE melakukan upgrade pada bidang kontrol cluster untuk Anda. Bidang kontrol diupgrade ke versi Kubernetes stabil yang lebih baru. Untuk memastikan node Anda tetap kompatibel dengan bidang kontrol yang diupgrade, node tersebut juga harus selalu diupdate. Secara default, GKE menangani upgrade ini karena node cluster telah mengaktifkan upgrade otomatis, dan sebaiknya Anda tidak menonaktifkannya. Jika upgrade otomatis dinonaktifkan untuk node cluster, dan Anda tidak mengupgradenya secara manual, panel kontrol Anda pada akhirnya akan tidak kompatibel dengan node Anda.
Untuk mengonfirmasi apakah versi bidang kontrol dan node Anda tidak kompatibel, periksa versi Kubernetes yang dijalankan oleh bidang kontrol dan node pool cluster Anda:
gcloud container clusters describe CLUSTER_NAME \
--project PROJECT_ID \
--location LOCATION
Ganti kode berikut:
CLUSTER_NAME
: nama cluster node pool yang akan dideskripsikan.PROJECT_ID
: project ID cluster.LOCATION
: region atau zona Compute Engine (misalnya,us-central1
atauus-central1-a
) untuk cluster.
Outputnya mirip dengan hal berikut ini:
…
currentMasterVersion: 1.32.3-gke.1785003
…
currentNodeVersion: 1.26.15-gke.1090000
…
Dalam contoh ini, versi bidang kontrol dan versi node pool tidak kompatibel.
Untuk mengatasi masalah ini, upgrade versi node pool secara manual ke versi yang kompatibel dengan bidang kontrol.
Jika Anda mengkhawatirkan bahwa proses upgrade dapat menyebabkan gangguan pada workload yang berjalan di node yang terpengaruh, selesaikan langkah-langkah berikut untuk memigrasikan workload Anda ke node pool baru:
- Buat node pool baru dengan versi yang kompatibel.
- Pisahkan node dari node pool yang ada.
- Opsional: perbarui workload yang berjalan di node pool yang ada untuk menambahkan
nodeSelector untuk label
cloud.google.com/gke-nodepool:NEW_NODE_POOL_NAME
. GantiNEW_NODE_POOL_NAME
dengan nama node pool baru. Tindakan ini memastikan GKE menempatkan workload tersebut di node dalam node pool baru. - Hapus node pool yang ada.
- Periksa apakah workload berhasil berjalan di node pool baru. Jika sudah, Anda dapat menghapus node pool lama. Jika Anda melihat gangguan workload, jadwalkan ulang workload pada node yang ada dengan membatalkan penutupan node di node pool yang ada dan mengosongkan node baru.
Penggunaan CPU node lebih tinggi dari yang diperkirakan
Anda mungkin mengalami masalah ketika beberapa node menggunakan CPU lebih banyak dari yang diperkirakan untuk Pod yang berjalan.
Masalah ini dapat terjadi jika Anda menggunakan upgrade manual dan cluster atau node Anda belum diupgrade untuk menjalankan versi yang didukung. Tinjau catatan rilis untuk memastikan versi yang Anda gunakan tersedia dan didukung.
Langkah berikutnya
Jika Anda tidak dapat menemukan solusi untuk masalah Anda dalam dokumentasi, lihat Mendapatkan dukungan untuk mendapatkan bantuan lebih lanjut, termasuk saran tentang topik berikut:
- Membuka kasus dukungan dengan menghubungi Layanan Pelanggan Cloud.
- Mendapatkan dukungan dari komunitas dengan
mengajukan pertanyaan di StackOverflow
dan menggunakan tag
google-kubernetes-engine
untuk menelusuri masalah serupa. Anda juga dapat bergabung ke#kubernetes-engine
channel Slack untuk mendapatkan dukungan komunitas lainnya. - Membuka bug atau permintaan fitur menggunakan issue tracker publik.