Membuat snapshot untuk membantu mendiagnosis masalah cluster

Jika mengalami masalah dengan salah satu cluster, Anda bisa mendapatkan bantuan dari Cloud Customer Care. Layanan Pelanggan dapat meminta Anda untuk mengambil 'snapshot' cluster, yang dapat mereka gunakan untuk mendiagnosis masalah. Snapshot menangkap file konfigurasi cluster dan node, lalu memaketkan informasi tersebut ke dalam satu file tar.

Dokumen ini menjelaskan cara membuat snapshot default atau snapshot cluster yang lebih disesuaikan. Dijelaskan juga cara membuat snapshot saat cluster mengalami error tertentu.

Snapshot default

Bagian berikut menjelaskan apa yang ada di snapshot standar dan cara membuatnya. Untuk mengetahui informasi tentang snapshot yang disesuaikan, lihat bagian Snapshot yang disesuaikan.

Informasi apa saja yang terdapat dalam snapshot default?

Snapshot cluster adalah file tar dari file konfigurasi dan log tentang cluster tersebut. Secara khusus, konfigurasi perintah default menangkap informasi berikut tentang cluster Anda:

  • Versi Kubernetes.

  • Status resource Kubernetes di namespace sistem kube dan sistem gke: cluster, machine, node, Service, Endpoints, ConfigMaps, ReplicaSets, CronJobs, Pod, dan pemilik Pod tersebut, termasuk Deployment, DaemonSet, dan StatefulSet.

  • Detail tentang setiap konfigurasi node, termasuk alamat IP, aturan iptables, mount point, sistem file, koneksi jaringan, dan proses yang sedang berjalan.

  • Informasi tentang Runtime VM di GDC dan semua VM serta resource terkait VM yang berjalan di cluster Anda. Untuk mengetahui informasi selengkapnya tentang apa yang dikumpulkan secara default dan cara membuat snapshot khusus VM, lihat Informasi VM dalam snapshot dalam dokumen ini.

  • Log dari perintah bmctl check cluster --snapshot.

Informasi kredensial cluster tidak disertakan dalam snapshot default. Jika Cloud Customer Care meminta informasi tersebut, lihat Mengambil informasi cluster.

Untuk daftar lengkap informasi yang dikumpulkan saat Anda menjalankan perintah snapshot, lihat file konfigurasi yang ditampilkan di bagian File konfigurasi secara mendetail. File konfigurasi ini menunjukkan perintah yang dijalankan saat mengambil snapshot default.

Cara membuat snapshot default

Perintah bmctl check cluster mengambil snapshot cluster. Anda dapat menggunakan perintah ini untuk melakukan salah satu tindakan berikut:

  • Membuat snapshot dan mengupload snapshot tersebut secara otomatis ke bucket Cloud Storage.
  • Buat snapshot cluster dan simpan file snapshot tersebut di mesin lokal tempat Anda menjalankan perintah.

Metode #1: membuat snapshot default dan otomatis mengupload ke bucket Cloud Storage

Untuk membuat dan mengupload snapshot ke bucket Cloud Storage, lakukan langkah berikut:

  1. Siapkan API dan akun layanan seperti yang dijelaskan dalam artikel Mengonfigurasi akun layanan yang dapat mengakses bucket Cloud Storage.

    Langkah ini hanya perlu dilakukan 1 kali.

  2. Jalankan perintah bmctl berikut untuk membuat dan mengupload snapshot secara otomatis ke bucket Cloud Storage:

    bmctl check cluster --snapshot --cluster=CLUSTER_NAME \
        --admin-kubeconfig=ADMIN_KUBECONFIG \
        --service-account-key-file SA_KEY_FILE
    

    Di perintah, ganti entri berikut dengan informasi khusus untuk lingkungan cluster Anda:

    • CLUSTER_NAME: nama cluster yang ingin Anda ambil snapshotnya.
    • ADMIN_KUBECONFIG: jalur ke file kubeconfig cluster admin.
    • SA_KEY_FILE: jalur ke file kunci JSON yang didownload untuk akun layanan yang dibuat di langkah sebelumnya. Jika Anda tidak menggunakan tanda --service-account-key-file, perintah akan menggunakan kredensial yang terkait dengan variabel lingkungan GOOGLE_APPLICATION_CREDENTIALS. Menentukan kredensial akun layanan secara eksplisit dengan flag lebih diprioritaskan.

    Perintah ini menghasilkan file tar snapshot dan menyimpannya secara lokal. Jika akun layanan disiapkan dengan benar, perintah ini juga mengupload file tar snapshot ke bucket di Cloud Storage. Perintah ini menelusuri project Anda untuk menemukan bucket penyimpanan yang memiliki nama yang diawali dengan "anthos-snapshot-". Jika bucket tersebut keluar, perintah tersebut akan mengupload snapshot ke bucket tersebut. Jika tidak menemukan bucket dengan nama yang cocok, perintah ini akan membuat bucket baru dengan nama anthos-snapshot-UUID, dengan UUID sebagai ID unik universal 32 digit.

  3. Bagikan akses dengan Cloud Customer Care seperti yang dijelaskan dalam Mengizinkan Dukungan Google Cloud untuk melihat snapshot cluster yang Anda upload.

Metode #2: buat snapshot default di mesin lokal saja

Gunakan flag --local untuk memastikan bahwa snapshot cluster Anda hanya disimpan secara lokal. Anda dapat merekam status cluster yang Anda buat dengan perintah berikut:

bmctl check cluster --snapshot --cluster=CLUSTER_NAME \
    --admin-kubeconfig=ADMIN_KUBECONFIG --local

Ganti kode berikut:

  • CLUSTER_NAME: nama cluster target.

  • ADMIN_KUBECONFIG: jalur ke file kubeconfig cluster admin.

Perintah ini menghasilkan file {i>tar<i} ke mesin lokal Anda. Nama file tar ini berupa snapshot-CLUSTER_NAME-TIMESTAMP.tar.gz, dengan TIMESTAMP menunjukkan tanggal dan waktu file dibuat. File tar ini mencakup informasi debug yang relevan tentang mesin dan komponen sistem cluster.

Saat Anda menjalankan perintah ini, informasi tentang Pod akan dikumpulkan dari namespace berikut: gke-system, gke-connect, capi-system, capi-webhook-system, cert-manager, dan capi-kubeadm-bootstrap-system

Namun, Anda dapat memperluas cakupan informasi diagnostik yang dikumpulkan dengan menggunakan tanda --snapshot-scenario all. Flag ini meningkatkan cakupan snapshot diagnostik untuk menyertakan semua Pod dalam cluster:

bmctl check cluster --snapshot --snapshot-scenario all \
    --cluster=CLUSTER_NAME \
    --kubeconfig=KUBECONFIG_PATH \
    --local

Skenario snapshot

Perintah bmctl check cluster --snapshot mendukung dua skenario. Untuk menentukan skenario, gunakan flag --scenario. Daftar berikut menunjukkan kemungkinan nilai:

  • system: Mengumpulkan snapshot komponen sistem, termasuk log-nya.

  • all: Mengumpulkan snapshot semua pod, termasuk log-nya.

Anda dapat menggunakan masing-masing dari dua skenario tersebut dengan cluster admin atau cluster pengguna. Misalnya, untuk membuat snapshot cluster admin menggunakan skenario system:

bmctl check cluster --snapshot --snapshot-scenario system \
    --cluster=ADMIN_CLUSTER_NAME \
    --kubeconfig=ADMIN_KUBECONFIG_PATH

Untuk membuat snapshot cluster pengguna menggunakan skenario all:

bmctl check cluster --snapshot --snapshot-scenario all \
    --cluster=USER_CLUSTER_NAME \
    --kubeconfig=USER_KUBECONFIG_PATH

Melakukan uji coba untuk snapshot

Saat Anda menggunakan flag --snapshot-dry-run, perintah tersebut tidak akan membuat snapshot. Sebagai gantinya, fungsi ini menunjukkan tindakan yang akan dilakukan perintah snapshot dan menghasilkan file konfigurasi snapshot. Untuk mengetahui informasi tentang file konfigurasi snapshot, lihat Cara membuat snapshot yang disesuaikan.

Untuk menjalankan snapshot uji coba pada cluster admin Anda, masukkan perintah berikut:

bmctl check cluster --snapshot --snapshot-dry-run \
    --cluster=ADMIN_CLUSTER_NAME \
    --kubeconfig=ADMIN_KUBECONFIG_PATH

Untuk menjalankan snapshot uji coba pada cluster pengguna, masukkan perintah berikut:

bmctl check cluster --snapshot --snapshot-dry-run \
    --cluster=USER_CLUSTER_NAME \
    --kubeconfig=USER_KUBECONFIG_PATH

Mendapatkan log dari periode tertentu

Anda dapat menggunakan flag --since untuk mengambil log dari periode waktu yang sangat Anda minati. Dengan cara ini, Anda dapat membuat snapshot logging yang lebih kecil dan lebih fokus yang terjadi dalam beberapa detik, menit, atau jam terakhir.

Misalnya, perintah bmctl berikut membuat snapshot logging yang terjadi dalam tiga jam terakhir:

bmctl check cluster --snapshot --since=3h \
    --cluster=CLUSTER_NAME \
    --kubeconfig=ADMIN_KUBECONFIG_PATH

Menentukan direktori tempat snapshot disimpan sementara

Anda dapat menggunakan tanda --snapshot-temp-output-dir untuk menentukan direktori tempat snapshot disimpan sementara:

bmctl check cluster --snapshot --snapshot-temp-output-dir=TEMP_OUTPUT_DIR \
    --cluster=CLUSTER_NAME \
    --kubeconfig=ADMIN_KUBECONFIG_PATH

Jika Anda tidak menentukan direktori, snapshot akan disimpan di direktori /tmp untuk sementara. Sebaiknya gunakan opsi --snapshot-temp-output-dir jika, misalnya, ruang terbatas di direktori /tmp default.

Sembunyikan logging konsol

Anda dapat menggunakan flag --quiet untuk menyembunyikan pesan log agar tidak muncul di konsol selama snapshot berjalan. Sebaliknya, log konsol disimpan dalam file 'bmctl_diagnose_snapshot.log' sebagai bagian dari snapshot.

Jalankan perintah berikut untuk menyembunyikan pesan log agar tidak muncul di konsol:

bmctl check cluster --snapshot --quiet \
    --cluster=CLUSTER_NAME \
    --kubeconfig=ADMIN_KUBECONFIG_PATH

Snapshot yang disesuaikan

Sebaiknya buat snapshot cluster yang disesuaikan karena alasan berikut:

  • Untuk menyertakan lebih banyak informasi tentang cluster Anda daripada yang disediakan di snapshot default.
  • Untuk mengecualikan beberapa informasi yang ada di snapshot default.

Cara membuat snapshot yang disesuaikan

Pembuatan snapshot yang disesuaikan memerlukan penggunaan file konfigurasi snapshot. Langkah-langkah berikut menjelaskan cara membuat file konfigurasi, memodifikasinya, dan menggunakannya untuk membuat snapshot cluster yang disesuaikan:

  1. Buat file konfigurasi snapshot dengan menjalankan perintah berikut pada cluster Anda dan menulis outputnya ke file:

    bmctl check cluster \
        --snapshot --snapshot-dry-run --cluster CLUSTER_NAME \
        --kubeconfig KUBECONFIG_PATH
    
  2. Tentukan jenis informasi yang ingin Anda munculkan dalam snapshot kustom Anda. Untuk melakukannya, ubah file konfigurasi snapshot yang Anda buat di langkah 1. Misalnya, jika Anda ingin snapshot berisi informasi tambahan, seperti berapa lama node tertentu telah berjalan, tambahkan perintah Linux uptime ke bagian yang relevan dari file konfigurasi. Cuplikan file konfigurasi berikut menunjukkan cara agar perintah snapshot memberikan informasi uptime tentang 10.200.0.3 node. Informasi ini tidak muncul dalam snapshot standar.

    ...
    nodeCommands:
    - nodes:
      - 10.200.0.3
      commands:
      - uptime
    ...
    
  3. Setelah Anda mengubah file konfigurasi untuk menentukan jenis snapshot yang diinginkan, buat snapshot kustom tersebut dengan menjalankan perintah berikut:

    bmctl check cluster --snapshot --snapshot-config SNAPSHOT_CONFIG_FILE \
        --cluster CLUSTER_NAME--kubeconfig KUBECONFIG_PATH
    

    Flag --snapshot-config mengarahkan perintah bmctl untuk menggunakan konten file konfigurasi snapshot guna menentukan informasi yang muncul dalam snapshot.

File konfigurasi secara mendetail

Contoh file konfigurasi snapshot berikut menunjukkan file dan perintah standar yang digunakan untuk membuat snapshot, tetapi Anda dapat menambahkan perintah dan file lainnya jika informasi diagnostik tambahan diperlukan:

numOfParallelThreads: 10
excludeWords:
- password
nodeCommands:
- nodes:
  - 10.200.0.3
  - 10.200.0.4
  commands:
  - uptime
  - df --all --inodes
  - ip addr
  - ip neigh
  - iptables-save --counters
  - mount
  - ip route list table all
  - top -bn1 || true
  - docker info || true
  - docker ps -a || true
  - crictl ps -a || true
  - docker ps -a | grep anthos-baremetal-haproxy | cut -d ' ' -f1 | head -n 1 | xargs
    sudo docker logs || true
  - docker ps -a | grep anthos-baremetal-keepalived | cut -d ' ' -f1 | head -n 1 |
    xargs sudo docker logs || true
  - crictl ps -a | grep anthos-baremetal-haproxy | cut -d ' ' -f1 | head -n 1 | xargs
    sudo crictl logs || true
  - crictl ps -a | grep anthos-baremetal-keepalived | cut -d ' ' -f1 | head -n 1 |
    xargs sudo crictl logs || true
  - ps -edF
  - ps -eo pid,tid,ppid,class,rtprio,ni,pri,psr,pcpu,stat,wchan:14,comm,args,cgroup
  - conntrack --count
  - dmesg
  - systemctl status -l docker || true
  - journalctl --utc -u docker
  - journalctl --utc -u docker-monitor.service
  - systemctl status -l kubelet
  - journalctl --utc -u kubelet
  - journalctl --utc -u kubelet-monitor.service
  - journalctl --utc --boot --dmesg
  - journalctl --utc -u node-problem-detector
  - systemctl status -l containerd || true
  - journalctl --utc -u containerd
  - systemctl status -l docker.haproxy || true
  - journalctl --utc -u docker.haproxy
  - systemctl status -l docker.keepalived || true
  - journalctl --utc -u docker.keepalived
  - systemctl status -l container.haproxy || true
  - journalctl --utc -u container.haproxy
  - systemctl status -l container.keepalived || true
  - journalctl --utc -u container.keepalived
nodeFiles:
- nodes:
  - 10.200.0.3
  - 10.200.0.4
  files:
  - /proc/sys/fs/file-nr
  - /proc/sys/net/netfilter/nf_conntrack_max
  - /proc/sys/net/ipv4/conf/all/rp_filter
  - /lib/systemd/system/kubelet.service
  - /etc/systemd/system/kubelet.service.d/10-kubeadm.conf
  - /lib/systemd/system/docker.service || true
  - /etc/systemd/system/containerd.service || true
  - /etc/docker/daemon.json || true
  - /etc/containerd/config.toml || true
  - /etc/systemd/system/container.keepalived.service || true
  - /etc/systemd/system/container.haproxy.service || true
  - /etc/systemd/system/docker.keepalived.service || true
  - /etc/systemd/system/docker.haproxy.service || true
nodeSSHKey: ~/.ssh/id_rsa # path to your ssh key file

Entri berikut dalam file konfigurasi Anda mungkin berbeda dengan yang muncul dalam contoh file konfigurasi di atas:

  • Alamat IP node di bagian nodeCommands dan nodeFiles
  • Jalur ke nodeSSHKey cluster Anda

Kolom dalam file konfigurasi

File konfigurasi snapshot menggunakan format YAML. File konfigurasi mencakup kolom berikut:

  • numOfParallelThreads: rutinitas snapshot biasanya menjalankan banyak perintah. Beberapa thread paralel membantu rutinitas dijalankan lebih cepat. Sebaiknya tetapkan numOfParallelThreads ke 10 seperti yang ditunjukkan dalam contoh file konfigurasi sebelumnya. Jika snapshot Anda memerlukan waktu terlalu lama, tingkatkan nilai ini.

  • excludeWords: snapshot berisi data dalam jumlah besar untuk node cluster Anda. Gunakan excludeWords untuk mengurangi risiko keamanan saat Anda membagikan snapshot. Misalnya, kecualikan password sehingga string sandi yang sesuai tidak dapat diidentifikasi.

  • nodeCommands: bagian ini menentukan informasi berikut:

    • nodes: daftar alamat IP untuk node cluster tempat Anda ingin mengumpulkan informasi. Untuk membuat snapshot saat cluster admin tidak dapat dijangkau, tentukan setidaknya satu alamat IP node.

    • commands: daftar perintah (dan argumen) untuk dijalankan di setiap node. Output dari setiap perintah disertakan dalam snapshot.

  • nodeFiles: bagian ini menentukan informasi berikut:

    • nodes: daftar alamat IP node cluster tempat Anda ingin mengumpulkan file. Untuk membuat snapshot saat cluster admin tidak dapat dijangkau, tentukan setidaknya satu alamat IP node.

    • files: daftar file yang akan diambil dari setiap node. Saat file yang ditentukan ditemukan di node, file tersebut akan disertakan dalam snapshot.

  • nodeSSHKey: jalur ke file kunci SSH Anda. Jika cluster admin tidak dapat dijangkau, kolom ini wajib diisi.

Membuat snapshot saat mengalami error tertentu

Cara membuat snapshot default selama penginstalan atau upgrade terhenti

Saat menginstal atau mengupgrade cluster admin, hybrid, atau mandiri, bmctl terkadang dapat berhenti pada titik yang menampilkan output berikut:

  • Menunggu cluster kubeconfig siap.
  • Menunggu cluster siap.
  • Menunggu kumpulan node siap.
  • Menunggu upgrade selesai.

Jika proses penginstalan atau upgrade terhenti, Anda tetap dapat mengambil snapshot cluster, menggunakan cluster bootstrap, dengan menjalankan perintah berikut:

bmctl check cluster --snapshot --cluster=CLUSTER_NAME \
    --kubeconfig=WORKSPACE_DIR/.kindkubeconfig

Cara membuat ringkasan kustom selama penginstalan atau upgrade yang terhenti

Langkah-langkah berikut menunjukkan cara membuat snapshot kustom dari sebuah cluster saat penginstalan atau upgrade terhenti:

  1. Ambil file konfigurasi snapshot cluster dari arsip Anda.

  2. Ubah file konfigurasi snapshot agar snapshot berisi informasi yang Anda inginkan.

  3. Buat snapshot yang disesuaikan dengan menjalankan perintah berikut:

    bmctl check cluster --snapshot
        --snapshot-config=SNAPSHOT_CONFIG_FILE \
        --cluster=CLUSTER_NAME
        --kubeconfig=WORKSPACE_DIR/.kindkubeconfig
    

Cara membuat snapshot yang disesuaikan saat cluster admin tidak dapat dijangkau

Jika cluster admin tidak dapat dijangkau, Anda dapat mengambil snapshot cluster yang disesuaikan dengan menjalankan perintah berikut:

bmctl check cluster --snapshot --cluster CLUSTER_NAME
    --node-ssh-key SSH_KEY_FILE
    --nodes NODE_1_IP_ADDRESS, NODE_2_IP_ADDRESS, ...

Di perintah, ganti entri berikut dengan informasi khusus untuk lingkungan cluster Anda:

  • CLUSTER_NAME: nama cluster yang ingin Anda ambil snapshotnya.
  • SSH_KEY_FILE: jalur ke file kunci SSH node.
  • NODE_x_IP_ADDRESS: alamat IP node cluster yang Anda inginkan informasinya.

Atau, Anda dapat mencantumkan alamat IP node pada baris terpisah:

bmctl check cluster
    --snapshot --cluster CLUSTER_NAME \
    --node-ssh-key SSH_KEY_FILE \
    --nodes NODE_1_IP_ADDRESS \
    --nodes NODE_2_IP_ADDRESS
  ...

Informasi VM dalam snapshot

Jika Anda menggunakan VM Runtime di GDC untuk membuat dan mengelola virtual machine (VM) di GKE pada Bare Metal, Anda dapat mengumpulkan informasi diagnostik yang relevan dalam snapshot. Snapshot adalah resource penting untuk mendiagnosis dan memecahkan masalah pada VM Anda.

Data yang dikumpulkan secara default

Saat Anda membuat snapshot default, snapshot tersebut akan berisi informasi tentang Runtime VM di GDC dan resource terkait. Runtime VM di GDC dipaketkan dengan GKE di Bare Metal dan resource kustom VMRuntime tersedia di cluster Anda yang menjalankan workload. Meskipun Anda belum mengaktifkan Runtime VM di GDC, snapshot tersebut masih berisi deskripsi YAML resource kustom VMRuntime.

Jika Anda telah mengaktifkan Runtime VM di GDC, snapshot berisi status dan informasi konfigurasi untuk resource terkait VM (saat objek ada) di cluster Anda. Resource terkait VM mencakup objek Kubernetes, seperti Pod, Deployment, DaemonSets, dan ConfigMaps.

Objek di namespace vm-system

Informasi status dan konfigurasi untuk objek berikut terletak di kubectlCommands/vm-system dalam snapshot yang dihasilkan:

  • KubeVirt
  • VirtualMachineType
  • VMHighAvailabilityPolicy

Objek di namespace lain

Saat membuat VM (VirtualMachine), Anda dapat menentukan namespace. Jika Anda tidak menentukan namespace, VM akan mendapatkan namespace default. Objek lain di bagian ini, seperti VirtualMachineInstance, semuanya terikat ke namespace untuk VM yang sesuai.

Informasi status dan konfigurasi untuk objek berikut terletak di kubectlCommands/VM_NAMESPACE dalam snapshot yang dihasilkan. Jika Anda tidak menetapkan namespace tertentu untuk VM, informasinya ada di kubectlCommands/default:

  • VirtualMachine
  • VirtualMachineInstance
  • VirtualMachineDisk
  • GuestEnvironmentData
  • VirtualMachineAccessRequest
  • VirtualMachinePasswordResetRequest

Objek yang tidak diberi namespace

Objek berikut tidak diberi namespace sehingga informasinya yang sesuai berada langsung di kubectlCommands pada snapshot yang dihasilkan:

  • VMRuntime
  • DataVolume
  • CDI
  • GPUAllocation

Menggunakan file konfigurasi snapshot untuk merekam detail VM saja

Jika Anda mendiagnosis masalah khusus untuk VM, Anda dapat menggunakan file konfigurasi snapshot untuk membatasi informasi yang dikumpulkan hanya untuk detail terkait VM dan menyesuaikan informasi VM yang dikumpulkan.

File konfigurasi snapshot berikut mengilustrasikan cara membuat snapshot khusus VM. Anda dapat menyertakan perintah tambahan guna mengumpulkan informasi selengkapnya untuk snapshot Anda.

---
kubectlCommands:
- commands:
    - kubectl get vm -o wide
    - kubectl get vmi -o wide
    - kubectl get gvm -o wide
    - kubectl get vm -o yaml
    - kubectl get vmi -o yaml
    - kubectl get gvm -o yaml
    - kubectl describe vm
    - kubectl describe vmi
    - kubectl describe gvm
  namespaces:
    - .*
- commands:
    - kubectl get virtualmachinetype -o wide
    - kubectl get virtualmachinedisk -o wide
    - kubectl get virtualmachinetype -o yaml
    - kubectl get virtualmachinedisk -o yaml
    - kubectl describe virtualmachinetype
    - kubectl describe virtualmachinedisk
  namespaces:
    - vm-system

Untuk mengetahui informasi selengkapnya tentang penggunaan file konfigurasi snapshot, lihat Snapshot yang disesuaikan dalam dokumen ini.