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.
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 logkubectl
danjournalctl
. - 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 perintahkubectl logs
, semua Pod dan penampung di namespace yang sesuai akan ditambahkan secara otomatis. Ekspresi reguler didukung untuk menentukan namespace. Jika Anda tidak menentukan namespace, namespacedefault
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.