Membuat snapshot untuk membantu mendiagnosis masalah cluster

Saat mengalami masalah dengan salah satu cluster, Anda bisa meminta bantuan dari Cloud Customer Care. Layanan Pelanggan mungkin meminta Anda untuk mengambil 'snapshot' cluster tersebut, yang mereka digunakan untuk mendiagnosis masalah. Snapshot menangkap cluster dan node konfigurasi file, dan memaketkan informasi tersebut ke dalam satu file {i>tar<i}.

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

Jika Anda memerlukan bantuan tambahan, hubungi Cloud Customer Care.

Snapshot default

Bagian berikut menjelaskan apa yang ada di {i>snapshot <i}standar dan cara membuatnya satu. Untuk mengetahui informasi tentang snapshot yang disesuaikan, lihat bagian tentang snapshot yang disesuaikan.

Informasi apa saja yang terdapat dalam snapshot default?

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

  • Versi Kubernetes.

  • Status resource Kubernetes di namespace kube-system dan gke-system: cluster, mesin, node, Layanan, Endpoint, ConfigMaps, ReplicaSets, CronJobs, Pod, dan pemilik Pod tersebut, termasuk Deployment, DaemonSets, dan StatefulSets.

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

  • Informasi tentang Runtime VM di GDC serta VM apa pun yang terkait dengan VM resource yang berjalan di cluster Anda. Untuk informasi selengkapnya tentang data yang dikumpulkan secara default dan cara membuat snapshot khusus VM. Lihat Informasi VM dalam snapshot di 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 snapshot lihat bagian berikut tentang file konfigurasi secara mendetail. File konfigurasi ini akan menunjukkan perintah mana yang dijalankan saat mengambil tanpa harus membuat snapshot.

Membuat snapshot default

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

  • Membuat snapshot dan menguploadnya secara otomatis ke Cloud Storage direktori VM dengan bucket.
  • Membuat snapshot cluster dan menyimpan file snapshot di mesin 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 langkah berikut:

  1. Menyiapkan API dan akun layanan seperti yang dijelaskan di Konfigurasi akun layanan yang dapat mengakses bucket Cloud Storage.

    Langkah ini hanya perlu dilakukan 1 kali.

  2. Jalankan perintah bmctl berikut untuk membuat dan mengupload secara otomatis snapshot 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 cluster Anda lingkungan:

    • CLUSTER_NAME: nama cluster yang Anda inginkan untuk mengambil cuplikannya.
    • ADMIN_KUBECONFIG: jalur ke file {i> admin cluster <i}kubeconfig.
    • SA_KEY_FILE: jalur ke file kunci JSON yang didownload untuk akun layanan yang dibuat di langkah sebelumnya. Jika Anda tidak menggunakan --service-account-key-file penanda menggunakan kredensial yang terkait dengan Variabel lingkungan GOOGLE_APPLICATION_CREDENTIALS. Eksplisit sehingga Anda harus menentukan kredensial akun layanan dengan tanda tersebut.

    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 yang sesuai di Cloud Storage. Perintah ini menelusuri bucket penyimpanan di project Anda yang memiliki nama yang diawali dengan "anthos-snapshot-" Jika bucket semacam itu maka perintah akan mengupload snapshot ke bucket tersebut. Jika perintah tidak menemukan bucket dengan nama yang cocok, maka akan membuat bucket baru dengan nama anthos-snapshot-UUID, dengan UUID adalah ID unik universal 32 digit.

  3. Membagikan akses ke Cloud Customer Care seperti yang dijelaskan dalam Izinkan Cloud Customer Care untuk melihat snapshot cluster yang Anda upload.

Metode #2: buat snapshot default hanya di mesin lokal

Gunakan flag --local untuk memastikan bahwa snapshot cluster Anda disimpan secara lokal saja. Anda dapat mengambil status cluster yang dibuat dengan 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 {i> admin cluster <i}kubeconfig.

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

Ketika 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 oleh menggunakan flag --snapshot-scenario all. Tanda ini meningkatkan ruang lingkup snapshot diagnostik untuk menyertakan semua Pod dalam sebuah 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 ini, gunakan flag --scenario. Daftar berikut menunjukkan kemungkinan nilai-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 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 all skenario:

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 membuat snapshot. Sebagai gantinya, ini menunjukkan tindakan apa yang akan dilakukan perintah {i>snapshot <i}dan menghasilkan file konfigurasi snapshot. Untuk mengetahui informasi tentang konfigurasi snapshot , lihat Cara membuat ringkasan kustom.

Untuk melakukan snapshot uji coba di cluster admin Anda, masukkan perintah berikut:

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

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

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

Tentukan 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 dalam direktori /tmp untuk sementara. Menggunakan opsi --snapshot-temp-output-dir adalah ide yang bagus saat ruang terbatas di direktori /tmp default, misalnya.

Hentikan logging konsol

Anda dapat menggunakan tanda --quiet untuk menyembunyikan pesan log agar tidak muncul di saat menjalankan snapshot. Sebagai gantinya, log konsol disimpan di '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 kustom cluster untuk hal-hal berikut alasan:

  • Untuk menyertakan informasi yang lebih lengkap tentang cluster Anda daripada yang diberikan dalam snapshot default.
  • Untuk mengecualikan beberapa informasi yang ada dalam snapshot default.

Buat snapshot yang disesuaikan

Pembuatan snapshot kustom memerlukan penggunaan konfigurasi snapshot . Langkah-langkah berikut menjelaskan cara membuat file konfigurasi, memodifikasi dan menggunakannya untuk membuat snapshot kustom dari sebuah cluster:

  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 ditampilkan dalam kolom tanpa harus membuat snapshot. Untuk melakukannya, ubah file konfigurasi {i>snapshot <i}yang Anda yang dibuat di langkah 1. Misalnya, jika Anda ingin {i>snapshot <i}berisi informasi tambahan, seperti berapa lama {i> node<i} tertentu telah berjalan, tambahkan perintah Linux uptime ke bagian konfigurasi yang relevan .

    Cuplikan file konfigurasi berikut menunjukkan cara membuat perintah snapshot memberikan informasi uptime tentang node 10.200.0.3. Ini informasi tidak muncul dalam snapshot standar.

    ...
    nodeCommands:
    - nodes:
      - 10.200.0.3
      commands:
      - uptime
    ...
    
  3. Setelah Anda memodifikasi file konfigurasi untuk mendefinisikan jenis yang diinginkan, buat snapshot kustom 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 dalam file konfigurasi snapshot untuk menentukan informasi apa yang tanpa harus membuat snapshot.

File konfigurasi secara mendetail

Contoh file konfigurasi {i>snapshot <i}berikut menunjukkan perintah standar dan yang digunakan untuk membuat {i>snapshot<i}, tetapi Anda bisa menambahkan lebih banyak perintah dan file saat 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 dari yang muncul di contoh file konfigurasi sebelumnya:

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

Kolom di file konfigurasi

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

  • numOfParallelThreads: rutinitas snapshot biasanya berjalan dalam berbagai perintah. Beberapa thread paralel membantu rutinitas berjalan lebih cepat. Rab sebaiknya Anda menetapkan numOfParallelThreads ke 10 seperti yang ditunjukkan di contoh file konfigurasi sebelumnya. Jika snapshot memakan waktu terlalu lama, meningkatkan nilai ini.

  • excludeWords: snapshot berisi data dalam jumlah besar untuk node cluster. Gunakan excludeWords untuk mengurangi risiko keamanan saat Anda berbagi {i>snapshot<i} Anda. Misalnya, kecualikan password agar nilai yang sesuai {i>string <i}dari {i>password<i} tidak dapat diidentifikasi.

  • nodeCommands: bagian ini menentukan informasi berikut:

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

    • commands: daftar perintah (dan argumen) untuk dijalankan pada setiap node. Tujuan output dari setiap perintah disertakan dalam snapshot.

  • nodeFiles: bagian ini menentukan informasi berikut:

    • nodes: daftar alamat IP node cluster yang Anda gunakan untuk ingin mengumpulkan file. Untuk membuat snapshot saat cluster admin sedang tidak dapat dijangkau, tentukan minimal satu alamat IP node.

    • files: daftar file yang akan diambil dari setiap node. Jika ditentukan ditemukan di sebuah node, maka file tersebut akan dimasukkan ke dalam snapshot.

  • nodeSSHKey: jalur ke file kunci SSH Anda. Saat cluster admin tidak dapat dijangkau, maka bidang 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 yang terhenti

Saat menginstal atau mengupgrade cluster admin, hybrid, atau mandiri, bmctl dapat terkadang berhenti di titik tempat output berikut dapat dilihat:

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

Jika mengalami penginstalan atau upgrade yang terhenti, Anda dapat mengambil cuplikan cluster menggunakan cluster bootstrap, seperti yang ditunjukkan pada contoh berikut:

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

Membuat snapshot kustom selama penginstalan atau upgrade yang terhenti

Langkah berikut menunjukkan cara membuat ringkasan kustom dari cluster saat penginstalan atau upgrade terhenti:

  1. Ambil file konfigurasi snapshot cluster dari arsip Anda.

  2. Ubah file konfigurasi snapshot sehingga snapshot berisi informasi yang diinginkan.

  3. Buat snapshot kustom dengan menjalankan perintah berikut:

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

Membuat snapshot kustom saat cluster admin tidak dapat dijangkau

Saat cluster admin tidak dapat dijangkau, Anda dapat mengambil snapshot kustom dari cluster 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, ...

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

  • CLUSTER_NAME: nama cluster yang ingin Anda buat snapshot.
  • 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 Anda menggunakan VM Runtime di GDC untuk membuat dan mengelola virtual machine (VM) di Google Distributed Cloud, Anda dapat mengumpulkan informasi diagnostik yang relevan dalam snapshot. Snapshot adalah sumber daya penting untuk mendiagnosis dan memecahkan masalah dengan VM Anda.

Apa 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. Bahkan jika Anda belum melakukan mengaktifkan Runtime VM di GDC, snapshot masih berisi deskripsi YAML resource kustom VMRuntime.

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

Objek di namespace vm-system

Informasi status dan konfigurasi untuk objek berikut berada 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. Lainnya objek di bagian ini, seperti VirtualMachineInstance, semuanya terikat ke untuk VM yang sesuai.

Informasi status dan konfigurasi untuk objek berikut berada di kubectlCommands/VM_NAMESPACE dalam snapshot yang dihasilkan. Jika Anda tidak menetapkan namespace spesifik untuk VM Anda, informasi ini terletak di kubectlCommands/default:

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

Objek yang tidak diberi namespace

Objek berikut tidak diberi namespace, jadi informasinya yang terkait akan yang terletak 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 VM, Anda dapat menggunakan snapshot file konfigurasi untuk membatasi informasi yang dikumpulkan ke terkait VM dan menyesuaikan informasi VM yang dikumpulkan.

File konfigurasi {i>snapshot <i}berikut mengilustrasikan bagaimana Anda bisa membuat untuk snapshot khusus VM. Anda dapat menyertakan perintah tambahan untuk mengumpulkan informasi 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 informasi selengkapnya tentang penggunaan file konfigurasi snapshot, lihat Snapshot yang disesuaikan dalam dokumen ini.

Langkah selanjutnya

Jika Anda memerlukan bantuan tambahan, hubungi Cloud Customer Care.