Perbaikan node otomatis dan health check

Di GKE di VMware, health check berkala dan perbaikan node otomatis diaktifkan secara default.

Fitur perbaikan otomatis node terus-menerus mendeteksi dan memperbaiki node yang tidak responsif di cluster.

Health check berkala berjalan setiap lima belas menit. Pemeriksaan ini sama dengan pemeriksaan yang dilakukan oleh gkectl diagnose cluster. Hasilnya akan ditampilkan sebagai log dan peristiwa pada objek Cluster di cluster admin.

Pastikan cluster admin dan pengguna Anda masing-masing memiliki alamat IP tambahan yang tersedia untuk perbaikan node otomatis.

Kondisi node tidak responsif

Kondisi berikut merupakan indikasi bahwa node tidak responsif:

  • Kondisi node NotReady adalah true selama sekitar 10 menit.

  • Status mesin adalah Unavailable selama sekitar 10 menit setelah pembuatan berhasil.

  • Status mesin bukan Available selama sekitar 30 menit setelah pembuatan VM.

  • Tidak ada objek node (nodeRef adalah nil) yang sesuai dengan mesin dalam status Available selama sekitar 10 menit.

  • Kondisi node DiskPressure adalah true selama sekitar 30 menit.

Strategi perbaikan node

GKE di VMware memulai perbaikan pada node jika node memenuhi setidaknya salah satu kondisi dalam daftar sebelumnya.

Perbaikan ini menguras node yang tidak responsif dan membuat VM baru. Jika pengosongan node tidak berhasil selama satu jam, tim perbaikan akan memaksa pengosongan dan dengan aman melepaskan disk terkelola Kubernetes yang terpasang.

Jika ada beberapa node yang tidak responsif di MachineDeployment yang sama, perbaikan hanya akan dilakukan pada satu node tersebut dalam satu waktu.

Jumlah perbaikan per jam untuk kumpulan node dibatasi hingga maksimum:

  • Tiga
  • Sepuluh persen dari jumlah node dalam kumpulan node

Mengaktifkan perbaikan node dan health check untuk cluster baru

Di file konfigurasi cluster admin atau pengguna, tetapkan autoRepair.enabled ke true:

autoRepair:
  enabled: true

Lanjutkan dengan langkah-langkah untuk membuat cluster admin atau pengguna.

Mengaktifkan perbaikan node dan health check untuk cluster pengguna yang ada

Dalam file konfigurasi cluster pengguna, tetapkan autoRepair.enabled ke true:

Update cluster:

gkectl update cluster --kubeconfig ADMIN_CLUSTER_KUBECONFIG --config USER_CLUSTER_CONFIG

Ganti kode berikut:

  • ADMIN_CLUSTER_KUBECONFIG: jalur file kubeconfig cluster admin Anda

  • USER_CLUSTER_CONFIG: jalur file konfigurasi cluster pengguna Anda

Mengaktifkan perbaikan node dan health check untuk cluster admin yang ada

Dalam file konfigurasi cluster admin, tetapkan autoRepair.enabled ke true:

Update cluster:

gkectl update admin --kubeconfig ADMIN_CLUSTER_KUBECONFIG --config ADMIN_CLUSTER_CONFIG

Ganti ADMIN_CLUSTER_CONFIG dengan jalur file konfigurasi cluster admin Anda.

Melihat log dari health checker

Cantumkan semua Pod health checker di cluster admin:

kubectl --kubeconfig ADMIN_CLUSTER_KUBECONFIG get pods --all-namespaces | grep cluster-health-controller

Outputnya mirip dengan ini:

kube-system       cluster-health-controller-6c7df455cf-zlfh7   2/2   Running
my-user-cluster   cluster-health-controller-5d5545bb75-rtz7c   2/2   Running

Untuk melihat log dari health checker tertentu, dapatkan log untuk penampung cluster-health-controller di salah satu Pod. Misalnya, untuk mendapatkan log untuk my-user-cluster yang ditampilkan dalam output sebelumnya:

kubectl --kubeconfig ADMIN_CLUSTER_KUBECONFIG --namespace my-user-cluster logs \
    cluster-health-controller-5d5545bb75-rtz7c cluster-health-controller

Melihat peristiwa dari health checker

Cantumkan semua objek Cluster di cluster admin Anda:

kubectl --kubeconfig ADMIN_CLUSTER_KUBECONFIG get clusters --all-namespaces

Outputnya mirip dengan ini:

default            gke-admin-ldxh7   2d15h
my-user-cluster    my-user-cluster   2d12h

Untuk melihat peristiwa untuk cluster tertentu, jalankan kubectl describe cluster dengan flag --show-events. Misalnya, untuk melihat peristiwa untuk my-user-cluster yang ditampilkan dalam output sebelumnya:

kubectl --kubeconfig ADMIN_CLUSTER_KUBECONFIG --namespace my-user-cluster \
    describe --show-events cluster my-user-cluster

Contoh output:

Events:
  Type     Reason             Age   From                                 Message
  ----     ------             ----  ----                                 -------
  Warning  ValidationFailure  17s   cluster-health-periodics-controller  validator for Pod returned with status: FAILURE, reason: 1 pod error(s).

Menonaktifkan perbaikan node dan health check untuk cluster pengguna

Dalam file konfigurasi cluster pengguna, tetapkan autoRepair.enabled ke false:

Update cluster:

gkectl update cluster --kubeconfig ADMIN_CLUSTER_KUBECONFIG --config USER_CLUSTER_CONFIG

Menonaktifkan perbaikan node dan health check untuk cluster admin

Dalam file konfigurasi cluster admin, tetapkan autoRepair.enabled ke false:

Update cluster:

gkectl update admin --kubeconfig ADMIN_CLUSTER_KUBECONFIG --config ADMIN_CLUSTER_CONFIG

Men-debug perbaikan otomatis node

Anda dapat menyelidiki masalah terkait perbaikan otomatis node dengan menjelaskan objek Mesin dan Node di cluster admin. Berikut contohnya:

Buat daftar objek mesin:

kubectl --kubeconfig ADMIN_CLUSTER_KUBECONFIG  get machines

Contoh output:

default     gke-admin-master-wcbrj
default     gke-admin-node-7458969ff8-5cg8d
default     gke-admin-node-7458969ff8-svqj7
default     xxxxxx-user-cluster-41-25j8d-567f9c848f-fwjqt

Jelaskan salah satu objek Mesin:

kubectl --kubeconfig ADMIN_CLUSTER_KUBECONFIG describe machine gke-admin-master-wcbrj

Pada output, cari peristiwa dari cluster-health-controller.

Demikian pula, Anda dapat mencantumkan dan menjelaskan objek node. Contoh:

kubectl --kubeconfig ADMIN_CLUSTER_KUBECONFIG get nodes
...
kubectl --kubeconfig ADMIN_CLUSTER_KUBECONFIG describe node gke-admin-master-wcbrj

Perbaikan node manual

Node bidang kontrol admin

Node bidang kontrol admin memiliki perintah perbaikan khusus, karena reparasi manual normal tidak berfungsi untuknya.

Menggunakan gkectl repair admin-master untuk memperbaiki node bidang kontrol admin.

Node bidang kontrol cluster pengguna Controlplane V2

Node bidang kontrol cluster pengguna Controlplane V2 dikelola secara berbeda dari node lain.

Serupa dengan cluster pengguna kubeception, objek Mesin bidang kontrol dari cluster pengguna Controlplane V2 berada di cluster admin. Dan perbaikan otomatis {i>node<i} dicakup oleh perbaikan otomatis {i>node<i} cluster admin.

Jika ada masalah node yang tidak tercakup oleh logika perbaikan otomatis node cluster admin, atau Anda belum mengaktifkan perbaikan otomatis node cluster admin, Anda dapat melakukan perbaikan manual. Tindakan ini akan menghapus dan membuat ulang node.

  1. Dapatkan nama objek Mesin yang sesuai dengan node:

    kubectl --kubeconfig ADMIN_CLUSTER_KUBECONFIG -n USER_CLUSTER_NAME get machines
    

    Ganti kode berikut:

    • ADMIN_CLUSTER_KUBECONFIG: jalur file kubeconfig admin Anda.
    • USER_CLUSTER_NAME: nama cluster pengguna target.
  2. Tambahkan anotasi repair ke objek Machine:

    kubectl annotate --kubeconfig ADMIN_CLUSTER_KUBECONFIG -n USER_CLUSTER_NAME machine MACHINE_NAME onprem.cluster.gke.io/repair-machine=true
    

    Ganti MACHINE_NAME dengan nama objek Mesin.

  3. Hapus objek Machine:

    kubectl delete --kubeconfig ADMIN_CLUSTER_KUBECONFIG -n USER_CLUSTER_NAME machine MACHINE_NAME
    

Buat ulang node satu per satu untuk bidang kontrol HA, atau node tersebut mungkin akan menurunkan bidang kontrol secara tiba-tiba.

Node lainnya

Jika ada masalah node yang tidak tercakup oleh logika perbaikan otomatis, atau Anda belum mengaktifkan perbaikan otomatis node, Anda dapat melakukan perbaikan manual. Tindakan ini akan menghapus dan membuat ulang node.

Dapatkan nama objek Mesin yang sesuai dengan node:

kubectl --kubeconfig CLUSTER_KUBECONFIG get machines

Ganti CLUSTER_KUBECONFIG dengan jalur file kubeconfig admin atau pengguna Anda.

Tambahkan anotasi repair ke objek Machine:

kubectl annotate --kubeconfig CLUSTER_KUBECONFIG machine MACHINE_NAME onprem.cluster.gke.io/repair-machine=true

Ganti MACHINE_NAME dengan nama objek Mesin.

Hapus objek Machine:

kubectl delete --kubeconfig CLUSTER_KUBECONFIG machine MACHINE_NAME