Membuat snapshot untuk mendiagnosis masalah cluster

Dokumen ini menunjukkan cara menggunakan perintah gkectl diagnose untuk membuat snapshot diagnostik untuk memecahkan masalah di cluster Anda yang dibuat menggunakan Google Distributed Cloud (khusus software) untuk VMware. Alat gkectl memiliki dua perintah untuk memecahkan masalah terkait cluster: gkectl diagnose snapshot dan gkectl diagnose cluster. Perintah ini berfungsi pada cluster admin dan pengguna.

Untuk mengetahui informasi selengkapnya, cara menggunakan perintah gkectl diagnose cluster untuk mendiagnosis masalah cluster, melihat Mendiagnosis masalah cluster.

Jika Anda memerlukan bantuan tambahan, hubungi Cloud Customer Care.

gkectl diagnose snapshot

Perintah ini mengompresi status, konfigurasi, dan log cluster ke file tar. Saat Anda menjalankan gkectl diagnose snapshot, perintah akan otomatis menjalankan gkectl diagnose cluster sebagai bagian dari proses, dan file output ditempatkan di folder baru dalam snapshot bernama /diagnose-report.

Snapshot default

Konfigurasi default perintah gkectl diagnose snapshot 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.

  • 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 Kubernetes Server API tidak tersedia.

  • Informasi vSphere termasuk objek VM dan Event-nya berdasarkan Resource Kolam. Juga mengumpulkan informasi tentang Pusat Data, Cluster, Jaringan, dan Objek Datastore yang terkait dengan VM.

  • Informasi load balancer F5 BIG-IP termasuk server virtual, virtual yaitu address, pool, node, dan monitor.

  • Log dari perintah gkectl diagnose snapshot.

  • Log tugas preflight.

  • Log container di namespace berdasarkan skenario.

  • Informasi tentang akhir masa berlaku sertifikat Kubernetes cluster admin di bagian file ringkasan /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 {i>tar<i} 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 {i>snapshot <i}karena menangkap lebih sedikit informasi tentang cluster tersebut. Saat Anda menambahkan --scenario=lite ke perintah tersebut, hanya informasi berikut yang disertakan dalam snapshot:

  • 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

  • Log dari perintah gkectl diagnose snapshot

Mengambil status cluster

Jika perintah gkectl diagnose cluster menemukan error, Anda harus merekam status cluster Anda dan memberikan informasi ke Cloud Customer Care. Anda dapat menangkap informasi ini menggunakan perintah gkectl diagnose snapshot.

gkectl diagnose snapshot memiliki tanda opsional untuk --config. Selain itu untuk mengumpulkan informasi tentang cluster, tanda ini mengumpulkan file konfigurasi yang digunakan untuk membuat atau meningkatkan .

Mengambil status cluster admin

Untuk mengambil 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 memberikan informasi proses debug selengkapnya.

Di 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 pada 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 ekstrak arsip {i>.tar<i}.

Untuk melihat daftar file yang dihasilkan oleh snapshot, jalankan perintah berikut 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 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 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 untuk mengunduh 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

Mengambil 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 menyertakan daftar file dan nama tar file:

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 tanpa harus membuat 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 namespace.

  • lite (1.29 dan yang lebih tinggi): Mengumpulkan snapshot hanya dengan resource Kubernetes dan gkectl log. Semua log lain, seperti log container dan log kernel node dikecualikan.

Skenario snapshot yang tersedia bervariasi, bergantung pada laporan Google Distributed Cloud .

  • Versi yang lebih lama dari 1.13: system, system-with-logs, all, dan all-with-logs.

  • Versi 1.13 - 1.28: system dan all. Skenario system sama dengan skenario system-with-logs lama. Skenario all adalah sama dengan skenario all-with-logs lama.

  • Versi 1.29 dan yang lebih tinggi: system, all, dan lite.

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 flag --log-since untuk membatasi pengumpulan log hingga waktu terbaru titik. 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 log kubectl dan journalctl.
  • Flag perintah seperti --log-since tidak diizinkan dalam snapshot yang disesuaikan konfigurasi Anda.

Melakukan uji coba untuk snapshot

Anda dapat menggunakan tanda --dry-run untuk menunjukkan tindakan yang akan dilakukan dan konfigurasi snapshot Anda.

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

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

Untuk melakukan uji coba pada 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, dapat membuat snapshot kustom 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 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 (kasus tidak peka). Baris yang berisi kata-kata ini akan dihapus dari hasil snapshot. "sandi" akan selalu dikecualikan, baik Anda menentukannya maupun tidak.

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

  • nodeCommands: Daftar perintah untuk dijalankan pada node yang sesuai. Hasil disimpan. Jika node tidak ditentukan, semua node dalam target cluster yang dipertimbangkan.

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

  • seesawCommands: Daftar perintah yang akan dijalankan untuk mengumpulkan load balancer Seesaw tidak akurat atau tidak sesuai. Hasilnya disimpan jika cluster menggunakan beban Jungkat-jungkit dengan load balancer Jaringan Passthrough Eksternal Regional.

  • seesawFiles: Daftar file yang akan dikumpulkan untuk load balancer Seesaw.

  • nodeCollectors: Kolektor yang menjalankan node Cilium untuk mengumpulkan eBPF tidak akurat atau tidak sesuai.

  • f5: Flag untuk memungkinkan pengumpulan informasi terkait F5 BIG-IP dengan load balancer Jaringan Passthrough Eksternal Regional.

  • vCenter: Tanda untuk memungkinkan pengumpulan informasi yang terkait dengan vCenter.

  • prometheusRequests: Permintaan Daftar Prometheus. Hasil disimpan.

Mengupload snapshot ke bucket Cloud Storage

Untuk mempermudah pencatatan, analisis, dan penyimpanan, Anda dapat mengunggah semua dari cluster tertentu ke bucket Cloud Storage. Ini adalah sangat membantu jika Anda memerlukan bantuan dari Cloud Customer Care.

Sebelum Anda mengupload snapshot ke bucket Cloud Storage, tinjau dan melengkapi persyaratan awal berikut:

  • Aktifkan storage.googleapis.com di project host perangkat. Meskipun Anda dapat menggunakan project berbeda, sebaiknya gunakan project host fleet.

    gcloud services enable --project=FLEET_HOST_PROJECT_ID storage.googleapis.com
    
  • Berikan 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 tindakan menghubungkan akun layanan pendaftaran yang disarankan. Lihat Akun layanan untuk 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 koneksi mendaftarkan akun layanan.

Setelah persyaratan ini terpenuhi, Anda sekarang 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 flag --upload, perintah tersebut akan menelusuri project Anda untuk menemukan objek bucket penyimpanan yang namanya diawali dengan "anthos-snapshot-" Jika seperti atau bucket ada, perintah akan mengupload snapshot ke bucket tersebut. Jika perintah tidak menemukan bucket dengan nama yang cocok, bucket baru dengan nama tersebut akan dibuat anthos-snapshot-UUID, dengan UUID ID unik universal 32 digit.

Saat menggunakan flag --share-with, Anda tidak perlu secara manual membagikan akses ke bucket dengan Cloud Customer Care.

Contoh output berikut akan 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 selanjutnya

Jika Anda memerlukan bantuan tambahan, hubungi Cloud Customer Care.