במאמר הזה מוסבר איך להשתמש בפקודה gkectl diagnose כדי ליצור קובצי snapshot של אבחון לפתרון בעיות באשכולות שנוצרו באמצעות Google Distributed Cloud (תוכנה בלבד) ל-VMware, כשלא מופעל אשכול מתקדם.
האפשרות 'אשכול מתקדם' לא מופעלת כאשר enableAdvancedClusters מוגדר ל-false בקובץ התצורה של אשכול האדמין ובקובץ התצורה של אשכול המשתמש. אם מופעל אשכול מתקדם, אפשר לעיין במאמר יצירת תמונות מצב כשאשכול מתקדם מופעל.
בכלי gkectl יש שתי פקודות לפתרון בעיות שקשורות לאשכולות: gkectl diagnose snapshot ו-gkectl diagnose cluster. הפקודות פועלות גם עם אשכולות של אדמינים וגם עם אשכולות של משתמשים.
מידע נוסף על שימוש בפקודה gkectl diagnose cluster כדי לאבחן בעיות באשכול זמין במאמר אבחון בעיות באשכול.
gkectl diagnose snapshot
הפקודה הזו דוחסת את הסטטוס, ההגדרות והיומנים של אשכול לקובץ tar. כשמריצים את הפקודה gkectl diagnose snapshot, הפקודה gkectl diagnose cluster מורצת אוטומטית כחלק מהתהליך, וקבצי הפלט ממוקמים בתיקייה חדשה בתמונת המצב שנקראת /diagnose-report.
תמונת מצב שמוגדרת כברירת מחדל
ההגדרה שמוגדרת כברירת מחדל בפקודה gkectl diagnose snapshot מתעדת את המידע הבא על האשכול:
גרסת Kubernetes.
הסטטוס של משאבי Kubernetes במרחבי השמות kube-system ו-gke-system: cluster, machine, nodes, Services, Endpoints, ConfigMaps, ReplicaSets, CronJobs, Pods, והבעלים של ה-Pods האלה, כולל Deployments, DaemonSets ו-StatefulSets.
הסטטוס של מישור הבקרה.
פרטים על כל הגדרת צומת, כולל כתובות IP, כללי iptables, נקודות הרכבה, מערכת קבצים, חיבורים לרשת ותהליכים שפועלים.
יומני קונטיינרים מהצומת של מישור הבקרה של אשכול האדמין, כששרת ה-API של Kubernetes לא זמין.
מידע על vSphere, כולל אובייקטים של מכונות וירטואליות והאירועים שלהם על סמך Resource Pool. הכלי אוסף גם מידע על אובייקטים של מרכזי נתונים, אשכולות, רשתות ומאגרי נתונים שמשויכים למכונות וירטואליות.
מידע על מאזן העומסים F5 BIG-IP, כולל שרת וירטואלי, כתובת וירטואלית, מאגר, צומת וניטור.
יומנים מהפקודה
gkectl diagnose snapshot.רישומים של משימות בדיקה מקדימה.
יומנים של קונטיינרים במרחבי שמות על סמך התרחישים.
מידע על תפוגה של אישור Kubernetes של אשכול אדמין בקובץ התמונה
/nodes/<admin_master_node_name>/sudo_kubeadm_certs_check-expiration.קובץ אינדקס בפורמט HTML לכל הקבצים בתמונת המצב.
אופציונלי: קובץ התצורה של אשכול הניהול שמשמש להתקנה ולשדרוג של האשכול עם הדגל
--config.
פרטי הכניסה, כולל פרטי כניסה ל-vSphere ול-F5, מוסרים לפני שנוצר קובץ ה-tar.
תמונת מצב קלת משקל
ב-Google Distributed Cloud בגרסה 1.29 ואילך, גרסה קלה של gkectl diagnose snapshot זמינה גם לאשכולות אדמין וגם לאשכולות משתמשים.
התמונה הקלה מאיצה את תהליך יצירת התמונה כי היא כוללת פחות מידע על האשכול. כשמוסיפים את --scenario=lite לפקודה, רק הפרטים הבאים נכללים בתמונת המצב:
הסטטוס של משאבי Kubernetes במרחבי השמות kube-system ו-gke-system: cluster, machine, nodes, Services, Endpoints, ConfigMaps, ReplicaSets, CronJobs, Pods, והבעלים של ה-Pods האלה, כולל Deployments, DaemonSets ו-StatefulSets
יומנים מהפקודה
gkectl diagnose snapshot
צילום מצב האשכול
אם הפקודות gkectl diagnose cluster מוצאות שגיאות, צריך לצלם את מצב האשכול ולספק את המידע ל-Cloud Customer Care. אפשר לצלם את המידע הזה באמצעות הפקודה gkectl diagnose snapshot.
ל-gkectl diagnose snapshot יש דגל אופציונלי ל---config. בנוסף לאיסוף מידע על האשכול, הדגל הזה אוסף את קובץ ההגדרה ששימש ליצירה או לשדרוג של האשכול.
תיעוד המצב של אשכול האדמין
כדי לצלם את מצב אשכול האדמין, מריצים את הפקודה הבאה:
gkectl diagnose snapshot --kubeconfig=ADMIN_CLUSTER_KUBECONFIG --config
הפרמטר --config הוא אופציונלי:
אם יש בעיה בכתובת IP וירטואלית (VIP) באשכול היעד, אפשר להשתמש בדגל --config כדי לספק את קובץ התצורה של אשכול האדמין ולקבל מידע על תוצאות ניפוי הבאגים.
בגרסה 1.29 ואילך, אפשר לכלול את התג --scenario=lite אם לא צריך את כל המידע בתמונת ברירת המחדל.
הפלט כולל רשימה של קבצים ושם של קובץ tar, כמו שמוצג בפלט לדוגמה הבא:
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.
כדי לחלץ את קובץ ה-tar לספרייה, מריצים את הפקודה הבאה:
tar -zxf TAR_FILE_NAME --directory EXTRACTION_DIRECTORY_NAME
מחליפים את מה שכתוב בשדות הבאים:
TAR_FILE_NAME: השם של קובץ ה-tar.
EXTRACTION_DIRECTORY_NAME: הספרייה שאליה רוצים לחלץ את הארכיון של קובץ ה-tar.
כדי לראות את רשימת הקבצים שנוצרו על ידי התמונה, מריצים את הפקודות הבאות:
cd EXTRACTION_DIRECTORY_NAME/EXTRACTED_SNAPSHOT_DIRECTORY ls kubectlCommands ls nodes/NODE_NAME/commands ls nodes/NODE_NAME/files
מחליפים את NODE_NAME בשם הצומת שרוצים להציג את הקבצים שלו.
כדי לראות את הפרטים של פעולה מסוימת, פותחים אחד מהקבצים.
ציון מפתח SSH לאשכול האדמין
כשמבצעים צילום מצב של אשכול האדמין, gkectl מוצא באופן אוטומטי את מפתח ה-SSH הפרטי של אשכול האדמין. אפשר גם לציין את המפתח באופן מפורש באמצעות הפרמטר --admin-ssh-key-path.
פועלים לפי ההוראות שבמאמר שימוש ב-SSH כדי להתחבר לצומת של אשכול כדי להוריד את מפתחות ה-SSH.
בפקודה gkectl diagnose snapshot, מגדירים את --admin-ssh-key-path לנתיב המפתח המפוענח:
gkectl diagnose snapshot --kubeconfig=ADMIN_CLUSTER_KUBECONFIG \
--admin-ssh-key-path=PATH_TO_DECODED_KEY
תיעוד מצב אשכול המשתמשים
כדי לצלם את המצב של אשכול משתמשים, מריצים את הפקודה הבאה:
gkectl diagnose snapshot --kubeconfig=ADMIN_CLUSTER_KUBECONFIG \
--cluster-name=USER_CLUSTER_NAME
פלט לדוגמה שכולל רשימה של קבצים ושם של קובץ 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.
תרחישים של תמונות מצב
תרחישי תמונת מצב מאפשרים לכם לשלוט במידע שנכלל בתמונת מצב. כדי לציין תרחיש, משתמשים בדגל --scenario. הרשימה הבאה מציגה את הערכים האפשריים:
system(ברירת מחדל): איסוף snapshot עם יומנים במרחבי שמות נתמכים של המערכת.
all: איסוף קובץ snapshot עם יומנים בכל מרחבי השמות, כולל מרחבי שמות שהוגדרו על ידי המשתמש.
lite(1.29 ואילך): איסוף snapshot עם משאבי Kubernetes בלבד ויומנים.gkectlלא נכללים כל שאר היומנים, כמו יומני מאגרי מידע ויומני ליבת צמתים.
תרחישי הצילום הזמינים משתנים בהתאם לגרסה של Google Distributed Cloud.
גרסאות נמוכות מ-1.13:
system,system-with-logs,allו-all-with-logs.גרסאות 1.13 עד 1.28:
systemו-all. תרחישsystemזהה לתרחישsystem-with-logsהישן. תרחישallזהה לתרחישall-with-logsהישן.גרסאות 1.29 ומעלה:
system,allו-lite.
כדי ליצור snapshot של אשכול האדמין, לא צריך לציין תרחיש:
gkectl diagnose snapshot \
--kubeconfig=ADMIN_CLUSTER_KUBECONFIG
כדי ליצור snapshot של אשכול משתמשים באמצעות התרחיש system:
gkectl diagnose snapshot \
--kubeconfig=ADMIN_CLUSTER_KUBECONFIG \
--cluster-name=USER_CLUSTER_NAME \
--scenario=system
כדי ליצור snapshot של אשכול משתמשים באמצעות התרחיש all:
gkectl diagnose snapshot \
--kubeconfig=ADMIN_CLUSTER_KUBECONFIG \
--cluster-name=USER_CLUSTER_NAME \
--scenario=all
כדי ליצור snapshot של אשכול משתמשים באמצעות התרחיש lite:
gkectl diagnose snapshot \
--kubeconfig=ADMIN_CLUSTER_KUBECONFIG \
--cluster-name=USER_CLUSTER_NAME \
--scenario=lite
שימוש ב---log-since כדי להגביל תמונת מצב
אפשר להשתמש בדגל --log-since כדי להגביל את איסוף הרישומים לתקופה האחרונה. לדוגמה, אפשר לאסוף רק את היומנים מיומיים אחרונים או משלוש השעות האחרונות. כברירת מחדל, diagnose snapshot אוסף את כל היומנים.
gkectl diagnose snapshot --kubeconfig=ADMIN_CLUSTER_KUBECONFIG \
--cluster-name=CLUSTER_NAME \
--scenario=system \
--log-since=DURATION
מחליפים את <var>DURATION</var> בערך של זמן, כמו 120m או 48h.
צריך להתחשב בשיקולים הבאים:
- הסימון הבוליאני
--log-sinceנתמך רק ביומניkubectlו-journalctl. - אסור להשתמש בדגלי פקודות כמו
--log-sinceבהגדרת הצילום המותאם אישית.
הרצת בדיקה של snapshot
אפשר להשתמש בדגל --dry-run כדי להציג את הפעולות שצריך לבצע ואת הגדרת תמונת המצב.
כדי לבצע הרצה יבשה באשכול הניהול, מזינים את הפקודה הבאה:
gkectl diagnose snapshot --kubeconfig=ADMIN_CLUSTER_KUBECONFIG \
--cluster-name=ADMIN_CLUSTER_NAME \
--dry-run
כדי לבצע הרצה יבשה באשכול משתמשים, מזינים את הפקודה הבאה:
gkectl diagnose snapshot --kubeconfig=ADMIN_CLUSTER_KUBECONFIG \
--cluster-name=USER_CLUSTER_NAME \
--dry-run
שימוש בהגדרת תמונה
אם שני התרחישים האלה (--scenario system או all) לא מתאימים לצרכים שלכם, אתם יכולים ליצור תמונת מצב מותאמת אישית על ידי העברת קובץ תצורה של תמונת מצב באמצעות הדגל --snapshot-config:
gkectl diagnose snapshot --kubeconfig=ADMIN_CLUSTER_KUBECONFIG \
--cluster-name=USER_CLUSTER_NAME \
--snapshot-config=SNAPSHOT_CONFIG_FILE
יצירת הגדרת תמונת מצב
כדי ליצור תצורת תמונת מצב לתרחיש מסוים, מעבירים את הדגלים --scenario ו---dry-run. לדוגמה, כדי לראות את הגדרות התמונה של תרחיש ברירת המחדל (system) של אשכול משתמשים, מזינים את הפקודה הבאה:
gkectl diagnose snapshot \
--kubeconfig=ADMIN_CLUSTER_KUBECONFIG \
--cluster-name=USER_CLUSTER_NAME \
--scenario=system
--dry-run
הפלט אמור להיראות כך:
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
המידע הבא מוצג בפלט:
numOfParallelThreads: מספר השרשורים המקבילים שמשמשים ליצירת תמונות מצב.excludeWords: רשימת מילים שיוחרגו מקובץ ה-snapshot (לא תלויות באותיות רישיות). שורות שמכילות את המילים האלה מוסרות מתוצאות התמונה. הסיסמה 'password' תמיד מוחרגת, גם אם מציינים אותה וגם אם לא.
kubectlCommands: רשימה של פקודות kubectl להרצה. התוצאות נשמרות. הפקודות מופעלות מול מרחבי השמות המתאימים. בפקודותkubectl logs, כל ה-Pods והקונטיינרים במרחבי השמות המתאימים מתווספים אוטומטית. יש תמיכה בביטויים רגולריים לציון מרחבי שמות. אם לא מציינים מרחב שמות, המערכת מניחה שמרחב השמות הואdefaultnamespace.
nodeCommands: רשימת פקודות להרצה בצמתים המתאימים. התוצאות נשמרות. אם לא מציינים צמתים, נלקחים בחשבון כל הצמתים באשכול היעד.
nodeFiles: רשימת הקבצים שצריך לאסוף מהצמתים המתאימים. הקבצים נשמרים. אם לא מציינים צמתים, נלקחים בחשבון כל הצמתים באשכול היעד.
seesawCommands: רשימת הפקודות שצריך להריץ כדי לאסוף מידע על מאזן העומסים של Seesaw. התוצאות נשמרות אם האשכול משתמש במאזן העומסים Seesaw.
seesawFiles: רשימת הקבצים שצריך לאסוף עבור מאזן העומסים של Seesaw.
nodeCollectors: כלי לאיסוף נתונים שפועל בצמתי Cilium כדי לאסוף מידע על eBPF.
f5: דגל להפעלת איסוף מידע שקשור למאזן העומסים F5 BIG-IP.
vCenter: דגל להפעלת איסוף מידע שקשור ל-vCenter.prometheusRequests: רשימה של בקשות Prometheus. התוצאות נשמרות.
העלאת תמונות מצב לקטגוריה של Cloud Storage
כדי להקל על ניהול הרשומות, הניתוח והאחסון, אפשר להעלות את כל התמונות של אשכול מסוים לקטגוריה של Cloud Storage. המידע הזה שימושי במיוחד אם אתם צריכים עזרה מ-Cloud Customer Care.
לפני שמעלים תמונות מצב לקטגוריה של Cloud Storage, צריך לעיין בדרישות הראשוניות הבאות ולבצע אותן:
מפעילים את
storage.googleapis.comבפרויקט המארח של הצי. אפשר להשתמש בפרויקט אחר, אבל מומלץ להשתמש בפרויקט המארח של צי הרכבים.gcloud services enable --project=FLEET_HOST_PROJECT_ID storage.googleapis.com
מעניקים את
roles/storage.adminלחשבון השירות בפרויקט ההורה שלו, ומעבירים את קובץ מפתח ה-JSON של חשבון השירות באמצעות הפרמטר--service-account-key-file. אפשר להשתמש בכל חשבון שירות, אבל מומלץ להשתמש בחשבון השירות של Connect Register. מידע נוסף זמין במאמר חשבונות שירות.gcloud projects add-iam-policy-binding FLEET_HOST_PROJECT_ID \ --member "serviceAccount:CONNECT_REGISTER_SERVICE_ACCOUNT" \ --role "roles/storage.admin"
מחליפים את
CONNECT_REGISTER_SERVICE_ACCOUNTבחשבון השירות של connect register.
אחרי שמוודאים שכל הדרישות האלה מתקיימות, אפשר להעלות את התמונה לקטגוריה של Cloud Storage:
gkectl diagnose snapshot --kubeconfig=ADMIN_CLUSTER_KUBECONFIG \
--cluster-name CLUSTER_NAME \
--upload \
--share-with GOOGLE_SUPPORT_SERVICE_ACCOUNT
אפשר להשתמש בדגל --share-with כדי לציין רשימה של שמות של חשבונות שירות. מחליפים את GOOGLE_SUPPORT_SERVICE_ACCOUNT בחשבון השירות של Cloud Customer Care שסופק על ידי Cloud Customer Care, וגם בכל חשבון שירות אחר שסופק על ידי Cloud Customer Care.
כשמשתמשים בדגל --upload, הפקודה מחפשת בפרויקט קטגוריית אחסון שהשם שלה מתחיל ב-anthos-snapshot-. אם קיימת קטגוריה כזו, הפקודה מעלה את התמונה שלה לקטגוריה הזו. אם הפקודה לא מוצאת קטגוריה עם שם תואם, היא יוצרת קטגוריה חדשה עם השם anthos-snapshot-UUID, כאשר UUID הוא מזהה ייחודי אוניברסלי בן 32 ספרות.
כשמשתמשים בדגל --share-with, לא צריך לשתף באופן ידני את הגישה לקטגוריה עם Cloud Customer Care.
הדוגמה הבאה מציגה את הפלט שמוצג כשמעלים תמונת מצב לקטגוריה של 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>
המאמרים הבאים
לקבלת עזרה נוספת, אפשר לפנות אל Cloud Customer Care.
אפשר גם לעיין במאמר קבלת תמיכה לקבלת מידע נוסף על מקורות מידע לתמיכה, כולל:
- דרישות לפתיחת בקשת תמיכה.
- כלים שיעזרו לכם לפתור בעיות, כמו יומנים ומדדים.
- רכיבים, גרסאות ותכונות נתמכים של Google Distributed Cloud ל-VMware (תוכנה בלבד).