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 (khusus software) untuk VMware saat cluster lanjutan diaktifkan. Cluster lanjutan diaktifkan saat enableAdvancedClusters ditetapkan ke true di file konfigurasi cluster admin dan file konfigurasi cluster pengguna. Jika cluster lanjutan tidak diaktifkan, lihat Membuat snapshot diagnostik saat cluster lanjutan tidak diaktifkan.

Jika Anda memerlukan bantuan tambahan, hubungi Cloud Customer Care.

gkectl diagnose snapshot

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

  • 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 penampung di namespace berdasarkan skenario.

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

Merekam status cluster admin

Untuk mengambil status cluster admin, jalankan perintah berikut:

gkectl diagnose snapshot --kubeconfig=ADMIN_CLUSTER_KUBECONFIG

Ganti ADMIN_CLUSTER_KUBECONFIG dengan jalur ke file kubeconfig cluster admin.

Outputnya 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 ingin Anda lihat filenya.

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 dengan 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 mengambil status cluster pengguna, jalankan perintah berikut:

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

Contoh output berikut menyertakan 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 kemungkinan nilai:

  • 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 tanda --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 tanda --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 membedakan huruf besar/kecil). Baris yang berisi kata-kata ini akan dihapus dari hasil snapshot. "password" selalu dikecualikan, terlepas dari apakah Anda menentukannya atau tidak.

  • kubectlCommands: Daftar perintah kubectl yang akan dijalankan. Hasilnya akan disimpan. Perintah dijalankan pada namespace yang sesuai. Untuk perintah kubectl logs, semua Pod dan penampung 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 dalam cluster target akan dipertimbangkan.

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

Langkah selanjutnya

Jika Anda memerlukan bantuan tambahan, hubungi Cloud Customer Care.