Membuat snapshot diagnostik saat cluster lanjutan diaktifkan

Dokumen ini menunjukkan cara menggunakan perintah gkectl diagnose untuk membuat snapshot diagnostik guna memecahkan masalah di cluster yang dibuat menggunakan Google Distributed Cloud (software only) for VMware saat cluster lanjutan diaktifkan. Cluster lanjutan diaktifkan saat enableAdvancedClusters ditetapkan ke true dalam file konfigurasi cluster admin dan file konfigurasi cluster pengguna. Jika cluster lanjutan tidak diaktifkan, lihat Membuat snapshot diagnostik saat cluster lanjutan tidak diaktifkan.

gkectl diagnose snapshot

Perintah ini mengompresi status, konfigurasi, dan log cluster ke dalam file tar. Konfigurasi default perintah gkectl diagnose snapshot mengambil 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.

  • Status bidang kontrol.

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

  • Log container dari node bidang kontrol cluster admin, saat server Kubernetes API tidak tersedia.

  • Log dari perintah gkectl diagnose snapshot.

  • Log tugas pra-penerbangan.

  • Log container di namespace berdasarkan skenario.

Kredensial, termasuk untuk vSphere dan F5, dihapus sebelum file tar dibuat.

Merekam status cluster admin

Untuk merekam status cluster admin, jalankan perintah berikut:

gkectl diagnose snapshot --kubeconfig=ADMIN_CLUSTER_KUBECONFIG

Ganti ADMIN_CLUSTER_KUBECONFIG dengan jalur ke file kubeconfig cluster admin.

Output mencakup daftar file dan nama file tar, seperti yang ditunjukkan dalam contoh output berikut:

Using "system" snapshot configuration...
Creating ssh signer for "[ADMIN_CLUSTER_NAME]"...
Taking snapshots in 10 thread(s)...
    gkectlLogs/gkectl-xxx.log
...
    kubectlCommands/[NAMESPACE]/kubectl_get_pods
    kubectlCommands/[NAMESPACE]/kubectl_get_deployments
    kubectlCommands/[NAMESPACE]/kubectl_get_daemonsets
...
    nodes/[ADMIN_CLUSTER_NODE]/commands/journalctl_-u_kubelet
    nodes/[ADMIN_CLUSTER_NODE]/files/var/log/startup.log
...
Snapshot succeeded. Output saved in [FILENAME].tar.gz.

Untuk mengekstrak file tar ke direktori, jalankan perintah berikut:

tar -zxf TAR_FILE_NAME --directory EXTRACTION_DIRECTORY_NAME

Ganti kode berikut:

  • TAR_FILE_NAME: nama file tar.

  • EXTRACTION_DIRECTORY_NAME: direktori tempat Anda ingin mengekstrak arsip file tar.

Untuk melihat daftar file yang dihasilkan oleh snapshot, jalankan perintah berikut:

cd EXTRACTION_DIRECTORY_NAME/EXTRACTED_SNAPSHOT_DIRECTORY
ls kubectlCommands
ls nodes/NODE_NAME/commands
ls nodes/NODE_NAME/files

Ganti NODE_NAME dengan nama node yang filenya ingin Anda lihat.

Untuk melihat detail operasi tertentu, buka salah satu file.

Menentukan kunci SSH untuk cluster admin

Saat Anda mendapatkan snapshot cluster admin, gkectl akan otomatis menemukan kunci SSH pribadi untuk cluster admin. Anda juga dapat menentukan kunci secara eksplisit menggunakan parameter --admin-ssh-key-path.

Ikuti petunjuk untuk Menggunakan SSH untuk terhubung ke node cluster guna mendownload kunci SSH.

Dalam perintah gkectl diagnose snapshot, tetapkan --admin-ssh-key-path ke jalur kunci yang didekode:

gkectl diagnose snapshot --kubeconfig=ADMIN_CLUSTER_KUBECONFIG \
    --admin-ssh-key-path=PATH_TO_DECODED_KEY

Merekam status cluster pengguna

Untuk merekam status cluster pengguna, jalankan perintah berikut:

gkectl diagnose snapshot --kubeconfig=ADMIN_CLUSTER_KUBECONFIG \
    --cluster-name=USER_CLUSTER_NAME

Contoh output berikut mencakup daftar file dan nama file tar:

Using "system" snapshot configuration...
Creating ssh signer for "[USER_CLUSTER_NAME]"...
Taking snapshots in 10 thread(s)...
    gkectlLogs/gkectl-xxx.log
...
    kubectlCommands/[NAMESPACE]/kubectl_get_pods
    kubectlCommands/[NAMESPACE]/kubectl_get_deployments
    kubectlCommands/[NAMESPACE]/kubectl_get_daemonsets
...
    nodes/[USER_CLUSTER_NODE_IP_ADDRESS]/commands/journalctl_-u_kubelet
    nodes/[USER_CLUSTER_NODE_IP_ADDRESS]/files/var/log/startup.logn
...
Snapshot succeeded. Output saved in [FILENAME].tar.gz.

Skenario snapshot

Skenario snapshot memungkinkan Anda mengontrol informasi yang disertakan dalam snapshot. Untuk menentukan skenario, gunakan flag --scenario. Daftar berikut menunjukkan nilai yang mungkin:

  • system (default): Mengumpulkan snapshot dengan log di namespace sistem yang didukung.

  • all: Mengumpulkan snapshot dengan log di semua namespace, termasuk namespace yang ditentukan pengguna.

Untuk membuat snapshot cluster admin, Anda tidak perlu menentukan skenario:

gkectl diagnose snapshot \
    --kubeconfig=ADMIN_CLUSTER_KUBECONFIG

Untuk membuat snapshot cluster pengguna menggunakan skenario system:

gkectl diagnose snapshot \
    --kubeconfig=ADMIN_CLUSTER_KUBECONFIG \
    --cluster-name=USER_CLUSTER_NAME \
    --scenario=system

Untuk membuat snapshot cluster pengguna menggunakan skenario all:

gkectl diagnose snapshot \
    --kubeconfig=ADMIN_CLUSTER_KUBECONFIG \
    --cluster-name=USER_CLUSTER_NAME \
    --scenario=all

Menggunakan --log-since untuk membatasi snapshot

Anda dapat menggunakan flag --log-since untuk membatasi pengumpulan log ke periode waktu terbaru. Misalnya, Anda hanya dapat mengumpulkan log dari dua hari terakhir atau tiga jam terakhir. Secara default, diagnose snapshot mengumpulkan semua log.

gkectl diagnose snapshot --kubeconfig=ADMIN_CLUSTER_KUBECONFIG \
    --cluster-name=CLUSTER_NAME \
    --scenario=system \
    --log-since=DURATION

Ganti <var>DURATION</var> dengan nilai waktu seperti 120m atau 48h.

Pertimbangan berikut berlaku:

  • Flag --log-since hanya didukung untuk log kubectl dan journalctl.
  • Flag perintah seperti --log-since tidak diizinkan dalam konfigurasi snapshot yang disesuaikan.

Melakukan uji coba untuk snapshot

Anda dapat menggunakan flag --dry-run untuk menampilkan tindakan yang akan diambil dan konfigurasi snapshot.

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

gkectl diagnose snapshot --kubeconfig=ADMIN_CLUSTER_KUBECONFIG \
    --cluster-name=ADMIN_CLUSTER_NAME \
    --dry-run

Untuk melakukan uji coba di cluster pengguna, masukkan perintah berikut:

gkectl diagnose snapshot --kubeconfig=ADMIN_CLUSTER_KUBECONFIG \
    --cluster-name=USER_CLUSTER_NAME \
    --dry-run

Menggunakan konfigurasi snapshot

Jika kedua skenario ini (--scenario system atau all) tidak memenuhi kebutuhan Anda, Anda dapat membuat snapshot yang disesuaikan dengan meneruskan file konfigurasi snapshot menggunakan flag --snapshot-config:

gkectl diagnose snapshot --kubeconfig=ADMIN_CLUSTER_KUBECONFIG \
    --cluster-name=USER_CLUSTER_NAME \
    --snapshot-config=SNAPSHOT_CONFIG_FILE

Membuat konfigurasi snapshot

Anda dapat membuat konfigurasi snapshot untuk skenario tertentu dengan meneruskan flag --scenario dan --dry-run. Misalnya, untuk melihat konfigurasi snapshot untuk skenario default (system) cluster pengguna, masukkan perintah berikut:

gkectl diagnose snapshot \
    --kubeconfig=ADMIN_CLUSTER_KUBECONFIG \
    --cluster-name=USER_CLUSTER_NAME \
    --scenario=system
    --dry-run

Outputnya mirip dengan contoh berikut:

The snapshot configuration is:
numOfParallelThreads: 10
excludeWords:
- password
kubectlCommands:
- commands:
  - kubectl version
  - kubectl cluster-info
  - kubectl top node
  - kubectl top pod -A --containers
  namespaces: []
- commands:
  - kubectl get -o wide --ignore-not-found
  - kubectl get -o yaml --ignore-not-found
  - kubectl describe
  namespaces:
  - kube-system
...
  expandResources: true
- commands:
  - kubectl logs
  namespaces:
  - kube-system
...
kindNodeCommands: []
nodeCommands:
- nodes: []
  commands:
  - uptime
  - df --all --inodes
  - ip addr
  - ip neigh
  - iptables-save --counters
  - mount
  - ip route list table all
  - top -bn1 || true
  - docker info || true
...
- nodes: []
  commands:
  - dmesg
  - systemctl status -l kubelet
  - journalctl --utc -u kubelet
  - journalctl --utc -u kubelet-monitor.service
...
nodeFiles:
- nodes: []
  files:
  - /proc/sys/fs/file-nr
  - /proc/sys/net/netfilter/nf_conntrack_max
...
- nodes: []
  files:
  - /var/log/apiserver/audit-proxy-buffer/* || true

Informasi berikut ditampilkan dalam output:

  • numOfParallelThreads: Jumlah thread paralel yang digunakan untuk mengambil snapshot.

  • excludeWords: Daftar kata yang akan dikecualikan dari snapshot (tidak peka huruf besar/kecil). Baris yang berisi kata-kata ini akan dihapus dari hasil snapshot. "password" selalu dikecualikan, baik Anda menentukannya atau tidak.

  • kubectlCommands: Daftar perintah kubectl yang akan dijalankan. Hasilnya akan disimpan. Perintah dijalankan terhadap namespace yang sesuai. Untuk perintah kubectl logs, semua Pod dan container di namespace yang sesuai akan ditambahkan secara otomatis. Ekspresi reguler didukung untuk menentukan namespace. Jika Anda tidak menentukan namespace, namespace default akan diasumsikan.

  • nodeCommands: Daftar perintah yang akan dijalankan di node yang sesuai. Hasilnya akan disimpan. Jika node tidak ditentukan, semua node di cluster target akan dipertimbangkan.

  • nodeFiles: Daftar file yang akan dikumpulkan dari node yang sesuai. File akan disimpan. Jika node tidak ditentukan, semua node di cluster target akan dipertimbangkan.

Langkah berikutnya

Jika Anda memerlukan bantuan tambahan, hubungi Layanan Pelanggan Cloud.

Anda juga dapat melihat Mendapatkan dukungan untuk mengetahui informasi selengkapnya tentang resource dukungan, termasuk hal berikut:

  • Persyaratan untuk membuka kasus dukungan.
  • Alat untuk membantu Anda memecahkan masalah, seperti log dan metrik.
  • Komponen , versi, dan fitur Google Distributed Cloud for VMware (software only) yang didukung.