Membuat snapshot untuk membantu mendiagnosis masalah cluster

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

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

Jika Anda memerlukan bantuan tambahan, hubungi Cloud Customer Care.

Snapshot default

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

Informasi apa yang terdapat dalam snapshot default?

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

  • Versi Kubernetes.

  • Status resource Kubernetes di namespace kube-system dan gke-system: cluster, mesin, node, Layanan, Endpoint, ConfigMap, ReplicaSet, CronJob, Pod, dan pemilik Pod tersebut, termasuk Deployment, DaemonSet, dan StatefulSet.

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

  • Informasi tentang Runtime VM di GDC serta VM dan 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 bagian berikut tentang file konfigurasi secara mendetail. File konfigurasi ini menunjukkan perintah yang dijalankan saat mengambil snapshot default.

Membuat snapshot default

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

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

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

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

  1. Siapkan API dan akun layanan seperti yang dijelaskan dalam 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
    

    Ganti entri berikut dengan informasi khusus untuk lingkungan cluster Anda:

    • CLUSTER_NAME: nama cluster yang ingin Anda ambil snapshot-nya.
    • 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 flag --service-account-key-file, perintah akan menggunakan kredensial yang terkait dengan variabel lingkungan GOOGLE_APPLICATION_CREDENTIALS. Menentukan kredensial akun layanan dengan flag secara eksplisit akan diprioritaskan.

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

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

Metode #2: membuat snapshot default hanya di komputer lokal

Gunakan flag --local untuk memastikan snapshot cluster Anda hanya disimpan secara lokal. Anda dapat mengambil status cluster yang dibuat 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 tar ke komputer lokal Anda. Nama file tar ini berbentuk snapshot-CLUSTER_NAME-TIMESTAMP.tar.gz, dengan TIMESTAMP menunjukkan tanggal dan waktu file dibuat. File tar ini menyertakan informasi debug yang relevan tentang komponen dan mesin 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 flag --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 kedua skenario tersebut dengan cluster admin atau cluster pengguna. Contoh berikut membuat snapshot cluster admin menggunakan skenario system:

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

Contoh berikut 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 tidak akan membuat snapshot. Sebagai gantinya, perintah 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 melakukan snapshot uji coba di cluster admin, masukkan perintah berikut:

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

Untuk melakukan snapshot uji coba di 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 jangka waktu yang sangat Anda minati. Dengan cara ini, Anda dapat membuat snapshot logging yang lebih kecil dan lebih terfokus yang telah terjadi dalam beberapa detik, menit, atau jam terakhir.

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

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

Menentukan direktori tempat snapshot disimpan untuk sementara

Anda dapat menggunakan flag --snapshot-temp-output-dir untuk menentukan direktori tempat snapshot disimpan untuk 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. Menggunakan opsi --snapshot-temp-output-dir adalah ide yang bagus jika ruang terbatas di direktori /tmp default, misalnya.

Menyembunyikan logging konsol

Anda dapat menggunakan flag --quiet untuk menyembunyikan pesan log agar tidak muncul di konsol selama snapshot dijalankan. Sebagai gantinya, 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

Anda mungkin ingin membuat snapshot cluster yang disesuaikan karena alasan berikut:

  • Untuk menyertakan informasi selengkapnya tentang cluster Anda daripada yang disediakan dalam ringkasan default.
  • Untuk mengecualikan beberapa informasi yang ada dalam snapshot default.

Membuat snapshot yang disesuaikan

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

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

    bmctl check cluster \
        --snapshot --snapshot-dry-run --cluster CLUSTER_NAME \
        --kubeconfig KUBECONFIG_PATH
    
  2. Tentukan jenis informasi yang ingin Anda tampilkan dalam snapshot yang disesuaikan. 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 dalam file konfigurasi.

    Cuplikan file konfigurasi berikut menunjukkan cara membuat perintah snapshot memberikan informasi uptime tentang node 10.200.0.3. 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 Anda inginkan, buat snapshot yang disesuaikan dengan menjalankan perintah berikut:

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

    Tanda --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 perintah dan file standar yang digunakan untuk membuat snapshot, tetapi Anda dapat menambahkan lebih banyak perintah dan file 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 entri yang muncul dalam file konfigurasi contoh sebelumnya:

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

Kolom dalam file konfigurasi

File konfigurasi snapshot dalam 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 file konfigurasi contoh sebelumnya. Jika pembuatan 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) yang akan dijalankan di setiap node. Output 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 minimal satu alamat IP node.

    • files: daftar file yang akan diambil dari setiap node. Jika 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 Anda mengalami error tertentu

Langkah atau parameter perintah tambahan mungkin diperlukan agar berhasil membuat snapshot saat peristiwa tertentu terjadi, seperti upgrade yang terhenti.

Membuat snapshot default selama penginstalan atau upgrade terhenti

Saat menginstal atau mengupgrade cluster admin, campuran, atau mandiri, bmctl terkadang dapat berhenti berfungsi pada titik saat output berikut dapat dilihat:

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

Jika mengalami penghentian penginstalan atau upgrade, Anda dapat mengambil snapshot cluster menggunakan cluster bootstrap, seperti yang ditunjukkan dalam contoh berikut:

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

Membuat snapshot yang disesuaikan selama penginstalan atau upgrade terhenti

Langkah-langkah berikut menunjukkan cara membuat snapshot cluster yang disesuaikan saat penginstalan atau upgrade terhenti:

  1. Ambil file konfigurasi snapshot cluster dari arsip Anda.

  2. Ubah file konfigurasi snapshot sehingga 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
    

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, ...

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

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

Atau, Anda dapat mencantumkan alamat IP node di 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 menggunakan Runtime VM di GDC untuk membuat dan mengelola virtual machine (VM) di Google Distributed Cloud, 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 Google Distributed Cloud dan resource kustom VMRuntime tersedia di cluster Anda yang menjalankan workload. Meskipun Anda belum mengaktifkan Runtime VM di GDC, snapshot masih berisi deskripsi YAML resource kustom VMRuntime.

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

Objek dalam 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 lainnya di bagian ini, seperti VirtualMachineInstance, semuanya terikat dengan 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, informasi tersebut berada di kubectlCommands/default:

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

Objek yang tidak memiliki namespace

Objek berikut tidak memiliki namespace, sehingga informasi terkaitnya berada langsung di kubectlCommands dalam snapshot yang dihasilkan:

  • VMRuntime
  • DataVolume
  • CDI
  • GPUAllocation

Menggunakan file konfigurasi snapshot untuk mengambil detail VM saja

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

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

---
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 informasi selengkapnya tentang cara menggunakan file konfigurasi snapshot, lihat Snapshot yang disesuaikan dalam dokumen ini.

Langkah selanjutnya

Jika Anda memerlukan bantuan tambahan, hubungi Cloud Customer Care.