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 tidak diaktifkan.
Cluster lanjutan tidak diaktifkan jika enableAdvancedClusters
disetel ke false
di
file konfigurasi cluster admin
dan file konfigurasi cluster pengguna. Jika
cluster lanjutan diaktifkan, lihat
Membuat snapshot saat cluster lanjutan diaktifkan.
Alat gkectl
memiliki dua perintah untuk memecahkan masalah pada cluster: gkectl diagnose snapshot
dan gkectl diagnose cluster
. Perintah ini berfungsi dengan
cluster admin dan pengguna.
Untuk mengetahui informasi selengkapnya tentang cara menggunakan perintah gkectl diagnose cluster
untuk mendiagnosis masalah cluster, lihat Mendiagnosis masalah cluster.
gkectl diagnose snapshot
Perintah ini akan mengompresi status, konfigurasi, dan log cluster ke dalam file tar. Saat Anda menjalankan gkectl diagnose snapshot
, perintah akan otomatis
menjalankan gkectl diagnose cluster
sebagai bagian dari proses, dan file output akan
ditempatkan dalam folder baru di snapshot yang disebut /diagnose-report
.
Snapshot default
Konfigurasi default perintah gkectl diagnose snapshot
merekam
informasi berikut tentang cluster Anda:
Versi Kubernetes.
Status resource Kubernetes di namespace kube-system dan gke-system: cluster, machine, node, Service, 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 sedang berjalan.
Log container dari node bidang kontrol cluster admin, saat server API Kubernetes tidak tersedia.
Informasi vSphere termasuk objek VM dan Peristiwanya berdasarkan Resource Pool. Juga mengumpulkan informasi tentang objek Datacenter, Cluster, Network, dan Datastore yang terkait dengan VM.
Informasi load balancer F5 BIG-IP termasuk server virtual, alamat virtual, pool, node, dan monitor.
Log dari perintah
gkectl diagnose snapshot
.Log tugas pra-penerbangan.
Log container di namespace berdasarkan skenario.
Informasi tentang masa berlaku sertifikat Kubernetes cluster admin dalam file snapshot
/nodes/<admin_master_node_name>/sudo_kubeadm_certs_check-expiration
.File indeks HTML untuk semua file dalam snapshot.
Secara opsional, file konfigurasi cluster admin yang digunakan untuk menginstal dan mengupgrade cluster dengan tanda
--config
.
Kredensial, termasuk untuk vSphere dan F5, dihapus sebelum file tar dibuat.
Snapshot ringan
Di Google Distributed Cloud versi 1.29 dan yang lebih tinggi, versi ringan
gkectl diagnose snapshot
tersedia untuk cluster admin dan pengguna.
Snapshot ringan mempercepat proses snapshot karena menangkap
lebih sedikit informasi tentang cluster. Saat Anda menambahkan --scenario=lite
ke
perintah, hanya informasi berikut yang disertakan dalam snapshot:
Status resource Kubernetes di namespace kube-system dan gke-system: cluster, machine, node, Service, Endpoint, ConfigMap, ReplicaSet, CronJob, Pod, dan pemilik Pod tersebut, termasuk Deployment, DaemonSet, dan StatefulSet
Log dari perintah
gkectl diagnose snapshot
Merekam status cluster
Jika perintah gkectl diagnose cluster
menemukan error, Anda harus merekam status cluster dan memberikan informasi tersebut kepada Cloud Customer Care. Anda dapat merekam
informasi ini menggunakan perintah gkectl diagnose snapshot
.
gkectl diagnose snapshot
memiliki flag opsional untuk --config
. Selain mengumpulkan informasi tentang cluster, flag ini mengumpulkan file konfigurasi yang digunakan untuk membuat atau mengupgrade cluster.
Merekam status cluster admin
Untuk merekam status cluster admin, jalankan perintah berikut:
gkectl diagnose snapshot --kubeconfig=ADMIN_CLUSTER_KUBECONFIG --config
Parameter --config
bersifat opsional:
Jika ada masalah dengan alamat IP virtual (VIP) di cluster target, gunakan flag --config
untuk memberikan file konfigurasi cluster admin guna memberikan informasi debug lebih lanjut.
Pada versi 1.29 dan yang lebih baru, Anda dapat menyertakan --scenario=lite
jika tidak
memerlukan semua informasi dalam snapshot default.
Output mencakup daftar file dan nama file tar, seperti yang ditunjukkan dalam contoh output berikut:
Taking snapshot of admin cluster "[ADMIN_CLUSTER_NAME]"...
Using default snapshot configuration...
Setting up "[ADMIN_CLUSTER_NAME]" ssh key file...DONE
Taking snapshots...
commands/kubectl_get_pods_-o_yaml_--kubeconfig_...env.default.kubeconfig_--namespace_kube-system
commands/kubectl_get_deployments_-o_yaml_--kubeconfig_...env.default.kubeconfig_--namespace_kube-system
commands/kubectl_get_daemonsets_-o_yaml_--kubeconfig_...env.default.kubeconfig_--namespace_kube-system
...
nodes/[ADMIN_CLUSTER_NODE]/commands/journalctl_-u_kubelet
nodes/[ADMIN_CLUSTER_NODE]/files/var/log/startup.log
...
Snapshot succeeded. Output saved in [TAR_FILE_NAME].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.
Tentukan kunci SSH untuk cluster admin
Saat Anda mendapatkan snapshot cluster admin, gkectl
akan menemukan kunci SSH pribadi untuk cluster admin secara otomatis. 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 merekam status cluster pengguna, jalankan perintah berikut:
gkectl diagnose snapshot --kubeconfig=ADMIN_CLUSTER_KUBECONFIG \ --cluster-name=USER_CLUSTER_NAME
Output contoh berikut mencakup daftar file dan nama file tar:
Taking snapshot of user cluster "[USER_CLUSTER_NAME]"...
Using default snapshot configuration...
Setting up "[USER_CLUSTER_NAME]" ssh key file...DONE
commands/kubectl_get_pods_-o_yaml_--kubeconfig_...env.default.kubeconfig_--namespace_user
commands/kubectl_get_deployments_-o_yaml_--kubeconfig_...env.default.kubeconfig_--namespace_user
commands/kubectl_get_daemonsets_-o_yaml_--kubeconfig_...env.default.kubeconfig_--namespace_user
...
commands/kubectl_get_pods_-o_yaml_--kubeconfig_.tmp.user-kubeconfig-851213064_--namespace_kube-system
commands/kubectl_get_deployments_-o_yaml_--kubeconfig_.tmp.user-kubeconfig-851213064_--namespace_kube-system
commands/kubectl_get_daemonsets_-o_yaml_--kubeconfig_.tmp.user-kubeconfig-851213064_--namespace_kube-system
...
nodes/[USER_CLUSTER_NODE]/commands/journalctl_-u_kubelet
nodes/[USER_CLUSTER_NODE]/files/var/log/startup.log
...
Snapshot succeeded. Output saved in [FILENAME].tar.gz.
Skenario snapshot
Skenario snapshot memungkinkan Anda mengontrol informasi yang disertakan dalam snapshot. Untuk menentukan skenario, gunakan tanda --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.lite
(1.29 dan yang lebih baru): Mengumpulkan snapshot hanya dengan resource Kubernetes dan loggkectl
. Semua log lainnya, seperti log penampung dan log kernel node, dikecualikan.
Skenario snapshot yang tersedia bervariasi, bergantung pada versi Google Distributed Cloud.
Versi di bawah 1.13:
system
,system-with-logs
,all
, danall-with-logs
.Versi 1.13 - 1.28:
system
danall
. Skenariosystem
sama dengan skenariosystem-with-logs
lama. Skenarioall
sama dengan skenarioall-with-logs
lama.Versi 1.29 dan yang lebih tinggi:
system
,all
, danlite
.
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
Untuk membuat snapshot cluster pengguna menggunakan skenario lite
:
gkectl diagnose snapshot \ --kubeconfig=ADMIN_CLUSTER_KUBECONFIG \ --cluster-name=USER_CLUSTER_NAME \ --scenario=lite
Menggunakan --log-since
untuk membatasi snapshot
Anda dapat menggunakan tanda --log-since
untuk membatasi pengumpulan log ke jangka waktu
terbaru. Misalnya, Anda dapat mengumpulkan hanya 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 tanda --dry-run
untuk menampilkan tindakan yang akan dilakukan 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
Buat 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:
numOfParallelThreads: 10
excludeWords:
- password
kubectlCommands:
- commands:
- kubectl get clusters -o wide
- kubectl get machines -o wide
- kubectl get clusters -o yaml
- kubectl get machines -o yaml
- kubectl describe clusters
- kubectl describe machines
namespaces:
- default
- commands:
- kubectl version
- kubectl cluster-info
- kubectl get nodes -o wide
- kubectl get nodes -o yaml
- kubectl describe nodes
namespaces: []
- commands:
- kubectl get pods -o wide
- kubectl get deployments -o wide
- kubectl get daemonsets -o wide
- kubectl get statefulsets -o wide
- kubectl get replicasets -o wide
- kubectl get services -o wide
- kubectl get jobs -o wide
- kubectl get cronjobs -o wide
- kubectl get endpoints -o wide
- kubectl get configmaps -o wide
- kubectl get pods -o yaml
- kubectl get deployments -o yaml
- kubectl get daemonsets -o yaml
- kubectl get statefulsets -o yaml
- kubectl get replicasets -o yaml
- kubectl get services -o yaml
- kubectl get jobs -o yaml
- kubectl get cronjobs -o yaml
- kubectl get endpoints -o yaml
- kubectl get configmaps -o yaml
- kubectl describe pods
- kubectl describe deployments
- kubectl describe daemonsets
- kubectl describe statefulsets
- kubectl describe replicasets
- kubectl describe services
- kubectl describe jobs
- kubectl describe cronjobs
- kubectl describe endpoints
- kubectl describe configmaps
namespaces:
- kube-system
- gke-system
- gke-connect.*
prometheusRequests: []
nodeCommands:
- nodes: []
commands:
- uptime
- df --all --inodes
- ip addr
- sudo iptables-save --counters
- mount
- ip route list table all
- top -bn1
- sudo docker ps -a
- ps -edF
- ps -eo pid,tid,ppid,class,rtprio,ni,pri,psr,pcpu,stat,wchan:14,comm,args,cgroup
- sudo conntrack --count
nodeFiles:
- nodes: []
files:
- /proc/sys/fs/file-nr
- /proc/sys/net/nf_conntrack_max
seesawCommands: []
seesawFiles: []
nodeCollectors:
- nodes: []
f5:
enabled: true
vCenter:
enabled: 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 perintahkubectl logs
, semua Pod dan container 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 untuk dijalankan di node yang sesuai. Hasil disimpan. Jika node tidak ditentukan, semua node di cluster target akan dipertimbangkan.nodeFiles
: Daftar file yang akan dikumpulkan dari node terkait. File disimpan. Jika node tidak ditentukan, semua node di cluster target akan dipertimbangkan.seesawCommands
: Daftar perintah yang akan dijalankan untuk mengumpulkan informasi load balancer Seesaw. Hasil disimpan jika cluster menggunakan load balancer Seesaw.seesawFiles
: Daftar file yang akan dikumpulkan untuk load balancer Seesaw.nodeCollectors
: Pengumpul yang berjalan untuk mengumpulkan informasi eBPF node Cilium.f5
: Flag untuk mengaktifkan pengumpulan informasi terkait load balancer F5 BIG-IP.vCenter
: Flag untuk mengaktifkan pengumpulan informasi terkait vCenter.prometheusRequests
: Daftar permintaan Prometheus. Hasil disimpan.
Mengupload snapshot ke bucket Cloud Storage
Untuk mempermudah pencatatan, analisis, dan penyimpanan, Anda dapat mengupload semua snapshot cluster tertentu ke bucket Cloud Storage. Informasi ini sangat berguna jika Anda memerlukan bantuan dari Cloud Customer Care.
Sebelum mengupload snapshot ke bucket Cloud Storage, tinjau dan selesaikan persyaratan awal berikut:
Aktifkan
storage.googleapis.com
di project host fleet. Meskipun Anda dapat menggunakan project lain, project host fleet direkomendasikan.gcloud services enable --project=FLEET_HOST_PROJECT_ID storage.googleapis.com
Beri
roles/storage.admin
ke akun layanan di project induknya, dan teruskan file kunci JSON akun layanan menggunakan parameter--service-account-key-file
. Anda dapat menggunakan akun layanan apa pun, tetapi sebaiknya gunakan akun layanan pendaftaran koneksi. Lihat Akun layanan untuk mengetahui informasi selengkapnya.gcloud projects add-iam-policy-binding FLEET_HOST_PROJECT_ID \ --member "serviceAccount:CONNECT_REGISTER_SERVICE_ACCOUNT" \ --role "roles/storage.admin"
Ganti
CONNECT_REGISTER_SERVICE_ACCOUNT
dengan akun layanan connect register.
Setelah persyaratan ini terpenuhi, Anda kini dapat mengupload snapshot ke bucket Cloud Storage:
gkectl diagnose snapshot --kubeconfig=ADMIN_CLUSTER_KUBECONFIG \ --cluster-name CLUSTER_NAME \ --upload \ --share-with GOOGLE_SUPPORT_SERVICE_ACCOUNT
Flag --share-with
dapat menerima daftar nama akun layanan. Ganti
GOOGLE_SUPPORT_SERVICE_ACCOUNT
dengan
akun layanan Cloud Customer Care yang disediakan oleh Cloud Customer Care, beserta
akun layanan lain yang disediakan oleh Cloud Customer Care.
Saat Anda menggunakan tanda --upload
, perintah akan menelusuri project Anda untuk menemukan bucket penyimpanan yang memiliki nama yang diawali dengan "anthos-snapshot-
". Jika bucket tersebut ada, perintah akan mengupload snapshot ke bucket tersebut. Jika perintah tidak menemukan bucket dengan nama yang cocok, perintah akan membuat bucket baru dengan nama anthos-snapshot-UUID
, dengan UUID
adalah ID unik universal 32 digit.
Saat menggunakan tanda --share-with
, Anda tidak perlu secara manual
membagikan akses ke bucket dengan Cloud Customer Care.
Contoh output berikut ditampilkan saat Anda mengupload snapshot ke bucket Cloud Storage:
Using "system" snapshot configuration...
Taking snapshot of user cluster <var>CLUSTER_NAME</var>...
Setting up <var>CLUSTER_NAME</var> ssh key...DONE
Using the gke-connect register service account key...
Setting up Google Cloud Storage bucket for uploading the snapshot...DONE
Taking snapshots in 10 thread(s)...
...
Snapshot succeeded.
Snapshots saved in "<var>SNAPSHOT_FILE_PATH</var>".
Uploading snapshot to Google Cloud Storage...... DONE
Uploaded the snapshot successfully to gs://anthos-snapshot-a4b17874-7979-4b6a-a76d-e49446290282/<var>xSNAPSHOT_FILE_NAME</var>.
Shared successfully with service accounts:
<var>GOOGLE_SUPPORT_SERVICE_ACCOUNT</var>
Langkah berikutnya
Jika Anda memerlukan bantuan tambahan, hubungi Cloud Customer Care.
Anda juga dapat melihat bagian Mendapatkan dukungan untuk mengetahui informasi selengkapnya tentang sumber dukungan, termasuk yang berikut:
- Persyaratan untuk membuka kasus dukungan.
- Alat untuk membantu Anda memecahkan masalah, seperti log dan metrik.
- Komponen yang didukung, versi, dan fitur Google Distributed Cloud untuk VMware (khusus software).