יצירת תמונות מצב של אבחון כשאשכול מתקדם מופעל

במאמר הזה מוסבר איך להשתמש בפקודה gkectl diagnose כדי ליצור קובצי snapshot של אבחון לפתרון בעיות באשכולות שנוצרו באמצעות Google Distributed Cloud (תוכנה בלבד) ל-VMware, כשהאפשרות 'אשכול מתקדם' מופעלת. אפשר להפעיל את האשכול המתקדם כשמגדירים את enableAdvancedClusters לערך true בקובץ התצורה של אשכול האדמין ובקובץ התצורה של אשכול המשתמשים. אם האפשרות 'אשכול מתקדם' לא מופעלת, אפשר לעיין במאמר בנושא יצירת תמונות מצב של אבחון כשהאפשרות 'אשכול מתקדם' לא מופעלת.

gkectl diagnose snapshot

הפקודה הזו דוחסת את הסטטוס, ההגדרות והיומנים של אשכול לקובץ tar. ההגדרה שמוגדרת כברירת מחדל של הפקודה 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 לא זמין.

  • יומנים מהפקודה gkectl diagnose snapshot.

  • רישומים של משימות בדיקה מקדימה.

  • יומנים של קונטיינרים במרחבי שמות על סמך התרחישים.

פרטי הכניסה, כולל פרטי כניסה ל-vSphere ול-F5, מוסרים לפני שנוצר קובץ ה-tar.

תיעוד המצב של אשכול האדמין

כדי לצלם את מצב אשכול האדמין, מריצים את הפקודה הבאה:

gkectl diagnose snapshot --kubeconfig=ADMIN_CLUSTER_KUBECONFIG

מחליפים את ADMIN_CLUSTER_KUBECONFIG בנתיב לקובץ kubeconfig של אשכול האדמין.

הפלט כולל רשימה של קבצים ושם של קובץ tar, כמו שמוצג בפלט לדוגמה הבא:

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.

כדי לחלץ את קובץ ה-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:

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.

תרחישים של תמונות מצב

תרחישי תמונת מצב מאפשרים לכם לשלוט במידע שנכלל בתמונת מצב. כדי לציין תרחיש, משתמשים בדגל --scenario. הרשימה הבאה מציגה את הערכים האפשריים:

  • system (ברירת מחדל): איסוף snapshot עם יומנים במרחבי שמות נתמכים של המערכת.

  • all: איסוף קובץ snapshot עם יומנים בכל מרחבי השמות, כולל מרחבי שמות שהוגדרו על ידי המשתמש.

כדי ליצור 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

שימוש ב---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

הפלט אמור להיראות כך:

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

המידע הבא מוצג בפלט:

  • numOfParallelThreads: מספר השרשורים המקבילים שמשמשים ליצירת תמונות מצב.

  • excludeWords: רשימת מילים שיוחרגו מקובץ ה-snapshot (לא תלויות באותיות רישיות). שורות שמכילות את המילים האלה מוסרות מתוצאות התמונה. הסיסמה 'password' תמיד מוחרגת, גם אם מציינים אותה וגם אם לא.

  • kubectlCommands: רשימה של פקודות kubectl להרצה. התוצאות נשמרות. הפקודות מופעלות מול מרחבי השמות המתאימים. בפקודות kubectl logs, כל ה-Pods והקונטיינרים במרחבי השמות המתאימים מתווספים אוטומטית. יש תמיכה בביטויים רגולריים לציון מרחבי שמות. אם לא מציינים מרחב שמות, המערכת מניחה שמרחב השמות הוא default namespace.

  • nodeCommands: רשימת פקודות להרצה בצמתים המתאימים. התוצאות נשמרות. אם לא מציינים צמתים, נלקחים בחשבון כל הצמתים באשכול היעד.

  • nodeFiles: רשימת הקבצים שצריך לאסוף מהצמתים המתאימים. הקבצים נשמרים. אם לא מציינים צמתים, נלקחים בחשבון כל הצמתים באשכול היעד.

המאמרים הבאים

לקבלת עזרה נוספת, אפשר לפנות אל Cloud Customer Care.

אפשר גם לעיין במאמר קבלת תמיכה לקבלת מידע נוסף על מקורות מידע לתמיכה, כולל: