Perbaikan node otomatis dan pemeriksaan kondisi

Di Google Distributed Cloud, health check berkala dan perbaikan node otomatis diaktifkan secara default.

Fitur perbaikan otomatis node terus mendeteksi dan memperbaiki node yang tidak responsif dalam cluster.

Pemeriksaan kesehatan berkala berjalan setiap lima belas menit. Pemeriksaannya sama dengan pemeriksaan yang dilakukan oleh gkectl diagnose cluster. Hasilnya 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 yang tidak responsif

Kondisi berikut adalah 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

Google Distributed Cloud memulai perbaikan pada node jika node memenuhi setidaknya salah satu kondisi dalam daftar sebelumnya.

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

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

Jumlah perbaikan per jam untuk kumpulan node dibatasi hingga maksimum:

  • Tiga
  • Sepuluh persen dari jumlah node di node pool

Mengaktifkan perbaikan node dan pemeriksaan status untuk cluster baru

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

autoRepair:
  enabled: true

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

Mengaktifkan perbaikan node dan pemeriksaan kondisi untuk cluster pengguna yang ada

Di 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 pemeriksaan kondisi untuk cluster admin yang ada

Di 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 pemeriksa kesehatan

Cantumkan semua Pod pemeriksa kesehatan 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 pemeriksa kondisi 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 pemeriksa kesehatan

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 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 pemeriksaan status untuk cluster pengguna

Di 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

Di 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 pada perbaikan otomatis node dengan mendeskripsikan 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 Machine:

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

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

Demikian pula, Anda dapat mencantumkan dan mendeskripsikan 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 perbaikan manual normal tidak berfungsi untuk node tersebut.

Gunakan 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 lainnya.

Serupa dengan cluster pengguna kubeception, objek Mesin bidang kontrol dari cluster pengguna Controlplane V2 berada di cluster admin. Selain itu, perbaikan otomatis node tercakup dalam perbaikan otomatis node cluster admin.

Jika ada masalah node yang tidak tercakup dalam 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 Machine 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 Mesin:

    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 dapat menonaktifkan bidang kontrol secara tidak terduga.

Node lainnya

Jika ada masalah node yang tidak tercakup dalam 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 Machine yang sesuai dengan node:

kubectl --kubeconfig CLUSTER_KUBECONFIG get machines

Ganti CLUSTER_KUBECONFIG dengan jalur file kubeconfig cluster 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 Machine.

Hapus objek Mesin:

kubectl delete --kubeconfig CLUSTER_KUBECONFIG machine MACHINE_NAME