Health check cluster

Health check adalah cara untuk menguji dan memantau pengoperasian cluster yang ada. Health check berjalan sendiri, secara berkala. Anda juga dapat menggunakan gkectl diagnose cluster untuk menjalankan health check sesuai permintaan. Dokumen ini menjelaskan setiap pemeriksaan, dalam keadaan apa pemeriksaan tersebut dijalankan secara otomatis, cara dan waktu untuk menjalankannya secara manual, serta cara menafsirkan hasilnya.

Apa yang diperiksa?

Ada dua kategori health check Google Distributed Cloud:

  • Pemeriksaan mesin Node

  • Pemeriksaan seluruh cluster

Bagian berikut menguraikan hal-hal yang diperiksa untuk setiap kategori. Pemeriksaan ini digunakan untuk health check berkala dan on-demand.

Pemeriksaan mesin Node

Bagian ini menjelaskan hal yang dievaluasi oleh health check untuk mesin node. Pemeriksaan ini mengonfirmasi bahwa mesin node dikonfigurasi dengan benar dan bahwa node tersebut memiliki resource dan konektivitas yang memadai untuk pembuatan cluster, upgrade cluster, dan operasi cluster.

Pemeriksaan ini sesuai dengan resource kustom HealthCheck Bare Metal bernama bm-system-NODE_IP_ADDRESS-machine (misalnya, bm-system-192.0.2.54-machine) yang berjalan di cluster admin di namespace cluster. Untuk mengetahui informasi selengkapnya tentang resource pemeriksaan kesehatan, lihat resource kustom HealthCheck.

Pemeriksaan mesin umum terdiri dari hal berikut:

  • Komputer cluster menggunakan sistem operasi (OS) yang didukung.

  • Versi OS didukung.

  • OS menggunakan versi kernel yang didukung.

  • Kernel mengaktifkan opsi compiler BPF Just In Time (JIT) (CONFIG_BPF_JIT=y).

  • Untuk Ubuntu, Uncomplicated Firewall (UFW) dinonaktifkan.

  • Mesin node memenuhi persyaratan CPU minimum.

  • Mesin node memiliki lebih dari 20% resource CPU yang tersedia.

  • Mesin node memenuhi persyaratan memori minimum.

  • Mesin node memenuhi persyaratan penyimpanan disk minimum.

  • Sinkronisasi waktu dikonfigurasi di mesin node.

  • Rute default untuk merutekan paket ke gateway default ada di node.

  • Domain Name System (DNS) berfungsi (pemeriksaan ini dilewati jika cluster dikonfigurasi untuk berjalan di balik proxy).

  • Jika cluster dikonfigurasi untuk menggunakan mirror registry, mirror registry dapat dijangkau.

Pemeriksaan Google Cloud mesin terdiri dari hal berikut:

  • Artifact Registry, gcr.io dapat dijangkau (pemeriksaan ini dilewati jika cluster dikonfigurasi untuk menggunakan mirror registry).

  • Google API dapat dijangkau.

Pemeriksaan kesehatan mesin terdiri dari hal-hal berikut:

  • kubelet aktif dan berjalan di mesin node.

  • containerd aktif dan berjalan di mesin node.

  • Status endpoint kesehatan Antarmuka Jaringan Container (CNI) baik.

  • CIDR Pod tidak tumpang-tindih dengan alamat IP komputer node.

Untuk mengetahui informasi selengkapnya tentang persyaratan node, lihat persyaratan CPU, RAM, dan penyimpanan.

Pemeriksaan seluruh cluster

Bagian ini menjelaskan hal yang dievaluasi oleh health check untuk cluster.

Pemeriksaan default

Pemeriksaan cluster default, yang berjalan secara otomatis sebagai bagian dari health check berkala, juga dapat berjalan sesuai permintaan sebagai bagian dari health check cluster. Pemeriksaan ini memastikan bahwa resource cluster Kubernetes dikonfigurasi dengan benar dan berfungsi dengan baik.

Pemeriksaan ini sesuai dengan resource kustom HealthCheck Bare Metal bernama resource bm-system-default-* yang berjalan di cluster admin dalam namespace cluster. Untuk mengetahui informasi selengkapnya tentang resource pemeriksaan kesehatan, lihat resource kustom HealthCheck.

Cluster default memeriksa audit jenis dan kondisi resource berikut:

  • DaemonSet

    • Konfigurasi valid
    • DaemonSet responsif
  • Deployment

    • Konfigurasi valid
    • Deployment responsif
  • Node (berikut adalah semua kondisi Node)

    • Status node siap
    • tekanan disk kubelet
    • Tekanan memori kubelet
    • Tekanan ID proses (PID) kubelet
    • frekuensi mulai ulang kubelet
    • kubelet responsif
    • Ketersediaan jaringan
    • fungsi containerd
    • frekuensi mulai ulang containerd
    • Fungsi Docker Overlay2
    • Frekuensi mulai ulang Docker
    • Frekuensi peristiwa pembatalan pendaftaran perangkat jaringan
    • Deadlock kernel
    • KubeProxy responsif
    • Sistem file hanya baca
  • Pod

    • Konfigurasi valid
    • Pod responsif
    • Container responsif
  • PodDisruptionBudget (PDB)

    • Konfigurasi valid
    • Fungsi runtime PDB
    • PDB cocok dengan pod
    • Pod tidak dikelola oleh beberapa PDB
  • Permintaan resource

    • Pod di node target memiliki permintaan CPU dan memori yang ditetapkan
    • Permintaan resource per node rata-rata berada dalam batas yang dilacak
  • Layanan

    • Konfigurasi valid
    • Layanan responsif
  • StatefulSet

    • Konfigurasi valid
    • StatefulSet

Pemeriksaan jaringan

Pemeriksaan jaringan node cluster sisi klien berikut berjalan secara otomatis sebagai bagian dari health check berkala. Pemeriksaan jaringan tidak dapat dijalankan sesuai permintaan. Pemeriksaan ini sesuai dengan resource kustom HealthCheck Bare Metal bernama bm-system-network yang berjalan di cluster admin dalam namespace cluster. Untuk mengetahui informasi selengkapnya tentang resource health check, lihat resource kustom HealthCheck.

  • Jika cluster menggunakan load balancing yang dipaketkan, node dalam kumpulan node load balancing harus memiliki konektivitas address resolution protocol (ARP) Lapisan 2. ARP diperlukan untuk penemuan VIP.

  • Node bidang kontrol memiliki port 8443 dan 8444 yang terbuka untuk digunakan oleh Identity Service GKE.

  • Node bidang kontrol memiliki port 2382 dan 2383 yang terbuka untuk digunakan oleh instance etcd-events.

Untuk informasi tentang protokol dan penggunaan port untuk cluster Anda, lihat Aturan proxy dan firewall.

Kubernetes

Pemeriksaan Kubernetes, yang berjalan secara otomatis sebagai bagian dari pemeriksaan kesehatan preflight dan berkala, juga dapat berjalan sesuai permintaan. Pemeriksaan kesehatan ini tidak menampilkan error jika salah satu komponen panel kontrol yang tercantum tidak ada. Pemeriksaan hanya menampilkan error jika komponen ada dan memiliki error pada waktu eksekusi perintah.

Pemeriksaan ini sesuai dengan resource kustom HealthCheck Bare Metal bernama resource bm-system-kubernetes yang berjalan di cluster admin dalam namespace cluster. Untuk mengetahui informasi selengkapnya tentang resource pemeriksaan kesehatan, lihat resource kustom HealthCheck.

  • Server API berfungsi.

  • Operator anetd dikonfigurasi dengan benar.

  • Semua node bidang kontrol dapat dioperasikan.

  • Komponen bidang kontrol berikut berfungsi dengan baik:

    • anthos-cluster-operator

    • controller-manager

    • cluster-api-provider

    • ais

    • capi-kubeadm-bootstrap-system

    • cert-manager

    • kube-dns

Add-on

Pemeriksaan add-on berjalan secara otomatis sebagai bagian dari pemeriksaan pra-penerbangan dan pemeriksaan kesehatan berkala, serta dapat dijalankan sesuai permintaan. Health check ini tidak menampilkan error jika salah satu add-on yang tercantum tidak ada. Pemeriksaan hanya menampilkan error jika add-on ada dan memiliki error pada waktu eksekusi perintah.

Pemeriksaan ini sesuai dengan resource kustom HealthCheck Bare Metal bernama resource bm-system-add-ons* yang berjalan di cluster admin dalam namespace cluster. Untuk mengetahui informasi selengkapnya tentang resource pemeriksaan kesehatan, lihat resource kustom HealthCheck.

  • Komponen Stackdriver Cloud Logging dan Agen Connect dapat dioperasikan:

    • stackdriver-log-aggregator

    • stackdriver-log-forwarder

    • stackdriver-metadata-agent

    • stackdriver-prometheus-k8

    • gke-connect-agent

  • Resource yang dikelola Google Distributed Cloud tidak menampilkan perubahan manual (drift konfigurasi):

    • Nilai kolom belum diperbarui

    • Kolom opsional belum ditambahkan atau dihapus

    • Referensi belum dihapus

Jika health check mendeteksi drift konfigurasi, nilai Status.Pass resource kustom HealthCheck Bare Metal bm-system-add-ons ditetapkan ke false. Kolom Description di bagian Failures berisi detail tentang resource yang telah berubah, termasuk informasi berikut:

  • Version: versi API untuk resource.
  • Kind: skema objek, seperti Deployment, untuk resource.
  • Namespace: namespace tempat resource berada.
  • Name: nama resource.
  • Diff: perbandingan format string perbedaan antara manifes resource dalam data dan manifes untuk resource yang diubah.

Resource kustom HealthCheck

Saat health check berjalan, Google Distributed Cloud akan membuat resource kustom HealthCheck. Resource kustom HealthCheck bersifat persisten dan memberikan catatan terstruktur tentang aktivitas dan hasil health check. Ada dua kategori resource kustom HeathCheck:

  • Resource kustom HealthCheck Bare Metal (API Version: baremetal.cluster.gke.io/v1): resource ini memberikan detail tentang pemeriksaan kesehatan berkala. Resource ini berada di cluster admin dalam namespace cluster. Resource HealthCheck Bare Metal bertanggung jawab untuk membuat tugas dan tugas cron pemeriksaan kesehatan. Referensi ini terus diperbarui dengan hasil terbaru.

  • Resource kustom HealthCheck Anthos (API Version: anthos.gke.io/v1): resource ini digunakan untuk melaporkan metrik pemeriksaan kesehatan. Resource ini berada dalam namespace kube-system setiap cluster. Pembaruan materi ini adalah upaya terbaik. Jika update gagal karena masalah, seperti error jaringan sementara, kegagalan akan diabaikan.

Tabel berikut mencantumkan jenis resource yang dibuat untuk kategori HealthCheck:

Pemeriksaan Kesehatan Bare Metal HealthChecks Anthos Keparahan

Jenis: default

Nama: bm-system-default-daemonset

Nama: bm-system-default-deployment

Nama: bm-system-default-node

Nama: bm-system-default-pod

Nama: bm-system-default-poddisruptionbudget

Nama: bm-system-default-resource

Nama: bm-system-default-service

Nama: bm-system-default-statefulset

Jenis: default

Nama: bm-system-default-daemonset

Nama: bm-system-default-deployment

Nama: bm-system-default-node

Nama: bm-system-default-pod

Nama: bm-system-default-poddisruptionbudget

Nama: bm-system-default-resource

Nama: bm-system-default-service

Nama: bm-system-default-statefulset

Kritis

Jenis: machine

Nama: bm-system-NODE_IP_ADDRESS-machine

Jenis: machine

Nama: bm-system-NODE_IP_ADDRESS-machine

Kritis

Jenis: jaringan

Nama: bm-system-network

Jenis: jaringan

Nama: bm-system-network

Kritis

Jenis: kubernetes

Nama: bm-system-kubernetes

Jenis: kubernetes

Nama: bm-system-kubernetes

Kritis

Jenis: add-ons

Nama: bm-system-add-ons

Jenis: add-ons

Nama: bm-system-add-ons-add-ons

Nama: bm-system-add-ons-configdrift

Opsional

Untuk mengambil status HealthCheck:

  1. Untuk membaca hasil health check berkala, Anda bisa mendapatkan resource kustom terkait:

    kubectl get healthchecks.baremetal.cluster.gke.io \
        --kubeconfig ADMIN_KUBECONFIG \
        --all-namespaces
    

    Ganti ADMIN_KUBECONFIG dengan jalur file kubeconfig cluster admin.

    Contoh berikut menunjukkan health check yang berjalan secara berkala dan apakah pemeriksaan tersebut lulus saat terakhir kali dijalankan:

    NAMESPACE               NAME                               PASS    AGE
    cluster-test-admin001   bm-system-192.0.2.52-machine       true    11d
    cluster-test-admin001   bm-system-add-ons                  true    11d
    cluster-test-admin001   bm-system-kubernetes               true    11d
    cluster-test-admin001   bm-system-network                  true    11d
    cluster-test-user001    bm-system-192.0.2.53-machine       true    56d
    cluster-test-user001    bm-system-192.0.2.54-machine       true    56d
    cluster-test-user001    bm-system-add-ons                  true    56d
    cluster-test-user001    bm-system-kubernetes               true    56d
    cluster-test-user001    bm-system-network                  true    56d
    
  2. Untuk membaca detail pemeriksaan kesehatan tertentu, gunakan kubectl describe:

    kubectl describe healthchecks.baremetal.cluster.gke.io HEALTHCHECK_NAME \
        --kubeconfig ADMIN_KUBECONFIG \
        --namespace CLUSTER_NAMESPACE
    

    Ganti kode berikut:

    • HEALTHCHECK_NAME: nama health check.
    • ADMIN_KUBECONFIG: jalur file kubeconfig cluster admin.
    • CLUSTER_NAMESPACE: namespace cluster.

    Saat Anda meninjau resource, bagian Status: berisi kolom penting berikut:

    • Pass: menunjukkan apakah tugas health check terakhir lulus atau tidak.
    • Checks: berisi informasi tentang tugas pemeriksaan kesehatan terbaru.
    • Failures: berisi informasi tentang tugas terbaru yang gagal.
    • Periodic: berisi informasi seperti kapan terakhir kali tugas health check dijadwalkan dan diinstrumentasikan.

    Contoh HealthCheck berikut adalah untuk pemeriksaan mesin yang berhasil:

    Name:         bm-system-192.0.2.54-machine
    Namespace:    cluster-test-user001
    Labels:       baremetal.cluster.gke.io/periodic-health-check=true
                  machine=192.0.2.54
                  type=machine
    Annotations:  <none>
    API Version:  baremetal.cluster.gke.io/v1
    Kind:         HealthCheck
    Metadata:
      Creation Timestamp:  2023-09-22T18:03:27Z
      ...
    Spec:
      Anthos Bare Metal Version:  1.16.0
      Cluster Name:               nuc-user001
      Interval In Seconds:        3600
      Node Addresses:
        192.168.1.54
      Type:  machine
    Status:
      Check Image Version:  1.16.0-gke.26
      Checks:
        192.168.1.54:
          Job UID:  345b74a6-ce8c-4300-a2ab-30769ea7f855
          Message:
          Pass:     true
      ...
      Cluster Spec:
        Anthos Bare Metal Version:  1.16.0
        Bypass Preflight Check:     false
        Cluster Network:
          Bundled Ingress:  true
          Pods:
            Cidr Blocks:
              10.0.0.0/16
          Services:
            Cidr Blocks:
              10.96.0.0/20
      ...
      Conditions:
        Last Transition Time:  2023-11-22T17:53:18Z
        Observed Generation:   1
        Reason:                LastPeriodicHealthCheckFinished
        Status:                False
        Type:                  Reconciling
      Node Pool Specs:
        node-pool-1:
          Cluster Name:  nuc-user001
        ...
      Pass:                  true
      Periodic:
        Last Schedule Time:                    2023-11-22T17:53:18Z
        Last Successful Instrumentation Time:  2023-11-22T17:53:18Z
      Start Time:                              2023-09-22T18:03:28Z
    Events:
      Type    Reason                  Age                  From                    Message
      ----    ------                  ----                 ----                    -------
      Normal  HealthCheckJobFinished  6m4s (x2 over 6m4s)  healthcheck-controller  health check job bm-system-192.0.2.54-machine-28344593 finished
    

    Contoh HealthCheck berikut adalah untuk pemeriksaan mesin yang gagal:

    Name:         bm-system-192.0.2.57-machine
    Namespace:    cluster-user-cluster1
    ...
    API Version:  baremetal.cluster.gke.io/v1
    Kind:         HealthCheck
    ...
    Status:
      Checks:
        192.0.2.57:
          Job UID:  492af995-3bd5-4441-a950-f4272cb84c83
          Message:  following checks failed, ['check_kubelet_pass']
          Pass:     false
      Failures:
        Category:     AnsibleJobFailed
        Description:  Job: machine-health-check.
        Details:       Target: 1192.0.2.57. View logs with: [kubectl logs -n cluster-user-test bm-system-192.0.2.57-machine-28303170-qgmhn].
        Reason:       following checks failed, ['check_kubelet_pass']
      Pass:                  false
      Periodic:
        Last Schedule Time:                    2023-10-24T23:04:21Z
        Last Successful Instrumentation Time:  2023-10-24T23:31:30Z
      ...
    
  3. Untuk mendapatkan daftar health check untuk metrik, gunakan perintah berikut:

    kubectl get healthchecks.anthos.gke.io \
        --kubeconfig CLUSTER_KUBECONFIG \
        --namespace kube-system
    

    Ganti CLUSTER_KUBECONFIG dengan jalur file kubeconfig cluster target.

    Contoh berikut menunjukkan format respons:

    NAMESPACE     NAME                                            COMPONENT   NAMESPACE   STATUS    LAST_COMPLETED
    kube-system   bm-system-add-ons-add-ons                                               Healthy   48m
    kube-system   bm-system-add-ons-configdrift                                           Healthy   48m
    kube-system   bm-system-default-daemonset                                             Healthy   52m
    kube-system   bm-system-default-deployment                                            Healthy   52m
    kube-system   bm-system-default-node                                                  Healthy   52m
    kube-system   bm-system-default-pod                                                   Healthy   52m
    kube-system   bm-system-default-poddisruptionbudget                                   Healthy   52m
    kube-system   bm-system-default-resource                                              Healthy   52m
    kube-system   bm-system-default-service                                               Healthy   52m
    kube-system   bm-system-default-statefulset                                           Healthy   57m
    kube-system   bm-system-kubernetes                                                    Healthy   57m
    kube-system   bm-system-network                                                       Healthy   32m
    kube-system   component-status-controller-manager                                     Healthy   5s
    kube-system   component-status-etcd-0                                                 Healthy   5s
    kube-system   component-status-etcd-1                                                 Healthy   5s
    kube-system   component-status-scheduler                                              Healthy   5s
    

Cron job pemeriksaan kesehatan

Untuk health check berkala, setiap resource kustom HealthCheck bare metal memiliki CronJob yang sesuai dengan nama yang sama. CronJob ini bertanggung jawab untuk menjadwalkan health check yang sesuai agar berjalan pada interval yang ditetapkan. CronJob juga menyertakan penampung ansible-runner yang menjalankan health check dengan membuat koneksi secure shell (SSH) ke node.

Untuk mengambil informasi tentang cron job:

  1. Dapatkan daftar tugas cron yang telah berjalan untuk cluster tertentu:

    kubectl get cronjobs \
        --kubeconfig ADMIN_KUBECONFIG \
        --namespace CLUSTER_NAMESPACE
    

    Ganti kode berikut:

    • ADMIN_KUBECONFIG: jalur file kubeconfig cluster admin.
    • CLUSTER_NAMESPACE: namespace cluster.

    Contoh berikut menunjukkan respons umum:

    NAMESPACE           NAME                           SCHEDULE       SUSPEND   ACTIVE   LAST SCHEDULE   AGE
    cluster-test-admin   bm-system-10.200.0.3-machine   17 */1 * * *   False     0        11m             25d
    cluster-test-admin   bm-system-add-ons              25 */1 * * *   False     0        3m16s           25d
    cluster-test-admin   bm-system-kubernetes           16 */1 * * *   False     0        12m             25d
    cluster-test-admin   bm-system-network              41 */1 * * *   False     0        47m             25d
    

    Nilai di kolom SCHEDULE menunjukkan jadwal untuk setiap tugas pemeriksaan kesehatan yang dijalankan dalam sintaksis jadwal. Misalnya, tugas bm-system-kubernetes berjalan pada pukul 17.17 (17) setiap jam (*/1) setiap hari (* * *). Interval waktu untuk health check berkala tidak dapat diedit, tetapi berguna untuk pemecahan masalah guna mengetahui kapan tugas tersebut seharusnya dijalankan.

  2. Ambil detail untuk resource kustom CronJob tertentu:

    kubectl describe cronjob CRONJOB_NAME \
        --kubeconfig ADMIN_KUBECONFIG \
        --namespace CLUSTER_NAMESPACE
    

    Ganti kode berikut:

    • ADMIN_KUBECONFIG: jalur file kubeconfig cluster admin.
    • CLUSTER_NAMESPACE: namespace cluster.

    Contoh berikut menunjukkan CronJob yang berhasil:

    Name:                          bm-system-network
    Namespace:                     cluster-test-admin
    Labels:                        AnthosBareMetalVersion=1.16.1
                                   baremetal.cluster.gke.io/check-name=bm-system-network
                                   baremetal.cluster.gke.io/periodic-health-check=true
                                   controller-uid=2247b728-f3f5-49c2-86df-9e5ae9505613
                                   type=network
    Annotations:                   target: node-network
    Schedule:                      41 */1 * * *
    Concurrency Policy:            Forbid
    Suspend:                       False
    Successful Job History Limit:  1
    Failed Job History Limit:      1
    Starting Deadline Seconds:     <unset>
    Selector:                      <unset>
    Parallelism:                   <unset>
    Completions:                   1
    Active Deadline Seconds:       3600s
    Pod Template:
      Labels:           baremetal.cluster.gke.io/check-name=bm-system-network
      Annotations:      target: node-network
      Service Account:  ansible-runner
      Containers:
      ansible-runner:
        Image:      gcr.io/anthos-baremetal-release/ansible-runner:1.16.1-gke.5
        Port:       <none>
        Host Port:  <none>
        Command:
          cluster
        Args:
          -execute-command=network-health-check
          -login-user=root
          -controlPlaneLBPort=443
        Environment:  <none>
        Mounts:
          /data/configs from inventory-config-volume (ro)
          /etc/ssh-key from ssh-key-volume (ro)
      Volumes:
      inventory-config-volume:
        Type:      ConfigMap (a volume populated by a ConfigMap)
        Name:      bm-system-network-inventory-bm-system-ne724a7cc3584de0635099
        Optional:  false
      ssh-key-volume:
        Type:            Secret (a volume populated by a Secret)
        SecretName:      ssh-key
        Optional:        false
    Last Schedule Time:  Tue, 14 Nov 2023 18:41:00 +0000
    Active Jobs:         <none>
    Events:
      Type    Reason            Age   From                Message
      ----    ------            ----  ----                -------
      Normal  SuccessfulCreate  48m   cronjob-controller  Created job bm-system-network-28333121
      Normal  SawCompletedJob   47m   cronjob-controller  Saw completed job: bm-system-network-28333121, status: Complete
      Normal  SuccessfulDelete  47m   cronjob-controller  Deleted job bm-system-network-28333061
    

Log health check

Saat dijalankan, health check akan menghasilkan log. Baik Anda menjalankan health check dengan gkectl diagnose cluster atau health check berjalan secara otomatis sebagai bagian dari health check berkala, log akan dikirim ke Cloud Logging. Saat Anda menjalankan health check sesuai permintaan, file log akan dibuat di /home/ubuntu/.config/gke-on-prem/logs/gkectl-$(date).log.

Melihat log secara lokal

Anda dapat menggunakan kubectl untuk melihat log health check berkala:

  1. Dapatkan pod dan temukan pod pemeriksaan kesehatan tertentu yang Anda minati:

    kubectl get pods \
        --kubeconfig ADMIN_KUBECONFIG \
        --namespace CLUSTER_NAMESPACE
    

    Ganti kode berikut:

    • ADMIN_KUBECONFIG: jalur file kubeconfig cluster admin.
    • CLUSTER_NAMESPACE: namespace cluster.

    Contoh respons berikut menunjukkan beberapa pod pemeriksaan kesehatan:

    NAME                                                              READY   STATUS      RESTARTS   AGE
    bm-system-10.200.0.4-machine-28353626-lzx46                       0/1     Completed   0          12m
    bm-system-10.200.0.5-machine-28353611-8vjw2                       0/1     Completed   0          27m
    bm-system-add-ons-28353614-gxt8f                                  0/1     Completed   0          24m
    bm-system-check-kernel-gce-user001-02fd2ac273bc18f008192e177x2c   0/1     Completed   0          75m
    bm-system-cplb-init-10.200.0.4-822aa080-7a2cdd71a351c780bf8chxk   0/1     Completed   0          74m
    bm-system-cplb-update-10.200.0.4-822aa082147dbd5220b0326905lbtj   0/1     Completed   0          67m
    bm-system-gcp-check-create-cluster-202311025828f3c13d12f65k2xfj   0/1     Completed   0          77m
    bm-system-kubernetes-28353604-4tc54                               0/1     Completed   0          34m
    bm-system-kubernetes-check-bm-system-kub140f257ddccb73e32c2mjzn   0/1     Completed   0          63m
    bm-system-machine-gcp-check-10.200.0.4-6629a970165889accb45mq9z   0/1     Completed   0          77m
    ...
    bm-system-network-28353597-cbwk7                                  0/1     Completed   0          41m
    bm-system-network-health-check-gce-user05e0d78097af3003dc8xzlbd   0/1     Completed   0          76m
    bm-system-network-preflight-check-create275a0fdda700cb2b44b264c   0/1     Completed   0          77m
    
  2. Ambil log pod:

    kubectl logs POD_NAME  \
        --kubeconfig ADMIN_KUBECONFIG \
        --namespace CLUSTER_NAMESPACE
    

    Ganti kode berikut:

    • POD_NAME: nama pod pemeriksaan kesehatan.
    • ADMIN_KUBECONFIG: jalur file kubeconfig cluster admin.
    • CLUSTER_NAMESPACE: namespace cluster.

    Contoh berikut menunjukkan bagian log pod untuk pemeriksaan kesehatan mesin node yang berhasil:

    ...
    TASK [Summarize health check] **************************************************
    Wednesday 29 November 2023  00:26:22 +0000 (0:00:00.419)       0:00:19.780 ****
    ok: [10.200.0.4] => {
        "results": {
            "check_cgroup_pass": "passed",
            "check_cni_pass": "passed",
            "check_containerd_pass": "passed",
            "check_cpu_pass": "passed",
            "check_default_route": "passed",
            "check_disks_pass": "passed",
            "check_dns_pass": "passed",
            "check_docker_pass": "passed",
            "check_gcr_pass": "passed",
            "check_googleapis_pass": "passed",
            "check_kernel_version_pass": "passed",
            "check_kubelet_pass": "passed",
            "check_memory_pass": "passed",
            "check_pod_cidr_intersect_pass": "passed",
            "check_registry_mirror_reachability_pass": "passed",
            "check_time_sync_pass": "passed",
            "check_ubuntu_1804_kernel_version": "passed",
            "check_ufw_pass": "passed",
            "check_vcpu_pass": "passed"
        }
    }
    ...
    

    Contoh berikut menunjukkan bagian dari log pod health check mesin node yang gagal. Contoh menunjukkan bahwa pemeriksaan kubelet (check_kubelet_pass) gagal, yang menunjukkan bahwa kubelet tidak berjalan di node ini.

    ...
    TASK [Reach a final verdict] ***************************************************
    Thursday 02 November 2023  17:30:19 +0000 (0:00:00.172)       0:00:17.218 *****
    fatal: [10.200.0.17]: FAILED! => {"changed": false, "msg": "following checks failed, ['check_kubelet_pass']"}
    ...
    

Lihat log di Cloud Logging

Log health check di-streaming ke Cloud Logging dan dapat dilihat di Logs Explorer. Health check berkala diklasifikasikan sebagai Pod dalam log konsol.

  1. Di konsol Google Cloud , buka halaman Logs Explorer di menu Logging.

    Buka Logs Explorer

  2. Di kolom Query, masukkan kueri dasar berikut:

    resource.type="k8s_container"
    resource.labels.pod_name=~"bm-system.*-machine.*"
    
  3. Jendela Hasil kueri menampilkan log untuk pemeriksaan kesehatan mesin node.

Berikut adalah daftar kueri untuk pemeriksaan kesehatan berkala:

  • Default

    resource.type="k8s_container"
    resource.labels.pod_name=~"bm-system.default-*"
    
  • Mesin node

    resource.type="k8s_container"
    resource.labels.pod_name=~"bm-system.*-machine.*"
    
  • Jaringan

    resource.type="k8s_container"
    resource.labels.pod_name=~"bm-system-network.*"
    
  • Kubernetes

    resource.type="k8s_container"
    resource.labels.pod_name=~"bm-system-kubernetes.*"
    
  • Add-on

    resource.type="k8s_container"
    resource.labels.pod_name=~"bm-system-add-ons.*"
    

Health check berkala

Secara default, health check berkala berjalan setiap jam dan memeriksa komponen cluster berikut:

Anda dapat memeriksa kondisi cluster dengan melihat resource kustom HealthCheck (healthchecks.baremetal.cluster.gke.io) Bare Metal di cluster admin. Pemeriksaan Jaringan, Kubernetes, dan Add-on adalah pemeriksaan tingkat cluster, sehingga ada satu resource untuk setiap pemeriksaan. Pemeriksaan Mesin dijalankan untuk setiap node dalam cluster target, sehingga ada resource untuk setiap node.

  • Untuk mencantumkan resource HealthCheck Bare Metal untuk cluster tertentu, jalankan perintah berikut:

    kubectl get healthchecks.baremetal.cluster.gke.io \
        --kubeconfig=ADMIN_KUBECONFIG \
        --namespace=CLUSTER_NAMESPACE
    

    Ganti kode berikut:

    • ADMIN_KUBECONFIG: jalur file kubeconfig cluster admin.

    • CLUSTER_NAMESPACE: namespace cluster target health check.

    Contoh respons berikut menunjukkan formatnya:

    NAMESPACE               NAME                               PASS    AGE
    cluster-test-user001    bm-system-192.0.2.53-machine       true    56d
    cluster-test-user001    bm-system-192.0.2.54-machine       true    56d
    cluster-test-user001    bm-system-add-ons                  true    56d
    cluster-test-user001    bm-system-kubernetes               true    56d
    cluster-test-user001    bm-system-network                  true    56d
    

    Kolom Pass untuk healthchecks.baremetal.cluster.gke.io menunjukkan apakah health check terakhir berhasil (true) atau gagal (false).

Untuk mengetahui informasi selengkapnya tentang cara memeriksa status untuk health check berkala, lihat Resource kustom HealthCheck dan Log health check.

Health check on demand

Untuk menjalankan health check sesuai permintaan, gunakan perintah gkectl diagnose cluster. Saat Anda menggunakan gkectl diagnose cluster untuk menjalankan health check, aturan berikut akan berlaku:

  • Saat Anda memeriksa cluster pengguna dengan perintah gkectl diagnose cluster, tentukan jalur file kubeconfig untuk cluster admin dengan flag --kubeconfig.

  • Log dibuat di direktori berstempel waktu dalam folder log cluster di workstation admin Anda (secara default, /home/ubuntu/.config/gke-on-prem/logs/gkectl-$(date).log).

  • Log health check juga dikirim ke Cloud Logging. Untuk mengetahui informasi selengkapnya tentang log, lihat Log health check.

Deteksi penyimpangan konfigurasi

Saat health check add-on berjalan, antara lain, health check ini akan memeriksa perubahan yang tidak terduga pada resource yang dikelola oleh Google Distributed Cloud. Secara khusus, pemeriksaan menilai manifes untuk resource ini guna menentukan apakah perubahan telah dilakukan oleh entitas eksternal. Pemeriksaan ini dapat membantu memberi peringatan dini tentang perubahan yang tidak disengaja yang mungkin merugikan kesehatan cluster. Laporan ini juga memberikan informasi pemecahan masalah yang berharga.

Manifes yang diperiksa

Dengan beberapa pengecualian, health check add-on meninjau semua resource yang dikelola Google Distributed Cloud untuk cluster Anda. Ini adalah resource yang diinstal dan dikelola oleh software Google Distributed Cloud. Ada ratusan resource ini dan sebagian besar manifesnya diperiksa untuk mengetahui adanya drift konfigurasi. Manifes ini ditujukan untuk semua jenis resource, termasuk, tetapi tidak terbatas pada, hal berikut:

  • ClusterRole
  • ClusterRoleBindings
  • CustomResourceDefinitions
  • DaemonSet
  • Deployment
  • HorizontalPodAutoscaler
  • Penerbit
  • MetricsServers
  • MutatingWebhookConfigurations
  • Namespace
  • Jaringan
  • NetworkLoggings
  • PodDisruptionBudgets
  • Penyedia
  • Peran
  • RoleBinding
  • Layanan
  • StorageClasses
  • ValidatingWebhookConfigurations

Manifes yang tidak diperiksa

Secara desain, kami mengecualikan beberapa manifes dari peninjauan. Kami mengabaikan jenis resource tertentu, seperti Sertifikat, Secret, dan ServiceAccount, karena alasan privasi dan keamanan. Pemeriksaan add-on juga mengabaikan beberapa resource dan kolom resource, karena kami mengharapkannya diubah dan kami tidak ingin perubahan tersebut memicu error drift konfigurasi. Misalnya, pemeriksaan mengabaikan kolom replicas di Deployment, karena Autoscaler dapat mengubah nilai ini.

Cara mengecualikan manifes tambahan atau bagian manifes dari peninjauan

Secara umum, sebaiknya jangan lakukan perubahan pada resource yang dikelola Google Distributed Cloud atau abaikan perubahan yang dilakukan pada resource tersebut. Namun, kami tahu bahwa resource terkadang memerlukan modifikasi untuk memenuhi persyaratan kasus unik atau memperbaiki masalah. Oleh karena itu, kami menyediakan ConfigMap ignore-config-drift untuk setiap cluster di fleet Anda. Anda menggunakan ConfigMaps ini untuk menentukan resource dan kolom resource tertentu yang akan dikecualikan dari penilaian.

Google Distributed Cloud membuat ConfigMap ignore-config-drift untuk setiap cluster. ConfigMap ini berada di cluster pengelola (admin atau campuran) di bawah namespace cluster yang sesuai. Misalnya, jika Anda memiliki cluster admin (admin-one) yang mengelola dua cluster pengguna (user-one dan user-two), Anda dapat menemukan ConfigMap ignore-config-drift untuk cluster user-one di cluster admin-one di namespace cluster-user-one.

Untuk mengecualikan resource atau kolom resource dari peninjauan:

  1. Tambahkan kolom data.ignore-resources ke ConfigMap ignore-config-drift.

    Kolom ini menggunakan array string JSON, dengan setiap string menentukan resource dan, secara opsional, kolom tertentu dalam resource.

  2. Tentukan resource dan, secara opsional, kolom tertentu yang akan diabaikan sebagai objek JSON dalam array string:

    Objek JSON untuk resource dan kolom memiliki struktur berikut:

    {
      "Version": "RESOURCE_VERSION",
      "Kind": "RESOURCE_KIND",
      "Namespace": "RESOURCE_NAMESPACE",
      "Name": "RESOURCE_NAME",
      "Fields": [
        "FIELD_1_NAME",
        "FIELD_2_NAME",
        ...
        "FIELD_N_NAME"
      ]
    }
    

    Ganti kode berikut:

    • RESOURCE_VERSION: (opsional) nilai apiVersion untuk resource.

    • RESOURCE_KIND: (opsional) nilai kind untuk resource.

    • RESOURCE_NAMESPACE: (opsional) nilai metadata.namespace untuk resource.

    • RESOURCE_NAME: (opsional) nilai metadata.name untuk resource.

    • FIELD_NAME: (opsional) menentukan array kolom resource yang akan diabaikan. Jika Anda tidak menentukan kolom apa pun, pemeriksaan add-on akan mengabaikan semua perubahan pada resource.

    Setiap kolom dalam objek JSON bersifat opsional, sehingga berbagai permutasi diizinkan. Anda dapat mengecualikan seluruh kategori resource, atau Anda dapat sangat akurat dan mengecualikan kolom tertentu dari resource tertentu.

    Misalnya, jika Anda ingin pemeriksaan add-on mengabaikan perubahan apa pun hanya pada bagian command Deployment ais di cluster admin, JSON mungkin terlihat seperti berikut:

    {
      "Version": "apps/v1",
      "Kind": "Deployment",
      "Namespace": "anthos-identity-service",
      "Name": "ais",
      "Fields": [
        "command"
      ]
    }
    

    Anda akan menambahkan objek JSON ini ke ignore-resources di ConfigMap config-drift-ignore sebagai nilai string dalam array seperti yang ditunjukkan dalam contoh berikut:

    apiVersion: v1
    kind: ConfigMap
    metadata:
      creationTimestamp: "2024-09-24T00:39:45Z"
      name: config-drift-ignore
      namespace: cluster-example-admin
      ownerReferences:
      - apiVersion: baremetal.cluster.gke.io/v1
        kind: Cluster
        name: example-admin
      ...
    data:
      ignore-resources: '[{"Version":"apps/v1","Kind":"Deployment","Namespace":"anthos-identity-service","Name":"ais","Fields":["command"]}]'
      ...
    

    Contoh setelan ConfigMap ini memungkinkan Anda menambahkan, menghapus, atau mengedit kolom command dalam Deployment ais tanpa memicu error drift konfigurasi. Namun, pengeditan pada kolom di luar bagian command di Deployment masih terdeteksi oleh pemeriksaan add-on dan dilaporkan sebagai drift konfigurasi.

    Jika Anda ingin mengecualikan semua Deployment, nilai ignore-resources mungkin terlihat seperti berikut:

    ...
    data:
      ignore-resources: '[{"Kind":"Deployment"}]'
    ...
    

    Karena ignore-resources menerima array string JSON, Anda dapat menentukan beberapa pola pengecualian. Jika Anda memecahkan masalah atau bereksperimen dengan cluster dan tidak ingin memicu error drift konfigurasi, fleksibilitas ini untuk mengecualikan resource yang sangat ditargetkan dan kolom resource atau kategori resource yang lebih luas dari deteksi drift dapat berguna.

Langkah berikutnya