ניפוי באגים בבעיות בצומת באמצעות ארגז הכלים

יכול להיות שתצטרכו להתקין חבילות או כלים נוספים במערכת ההפעלה שמותאמת לקונטיינרים כדי לבצע משימות מסוימות, כמו ניפוי באגים. לדוגמה, אפשר לפתור בעיות בחיבור של הצומת על ידי התקנת tcpdump בארגז הכלים. למרות שמערכת הפעלה שמותאמת לקונטיינרים לא כוללת כלי לניהול חבילות, אפשר להשתמש בכלי השירות toolbox שהותקן מראש כדי להתקין חבילות או כלים נוספים שנדרשים לכם. השיטה המועדפת להתקנה ולהפעלה של כלי ניפוי באגים חד-פעמיים היא שימוש ב-/usr/bin/toolbox.

/usr/bin/toolbox בעצם מספק לכם מעטפת בסביבה שדומה ל-Debian chroot. כשמפעילים את /usr/bin/toolbox, הוא מריץ את הפקודות הבאות:

  1. docker pull ו-docker create כדי להגדיר את הסביבה. הפעולות האלה מופעלות רק בפעם הראשונה שמפעילים את /usr/bin/toolbox.
  2. systemd-nspawn כדי להריץ את הפקודה שצוינה או (אם לא צוינה פקודה) כדי לספק לכם מעטפת

ל-toolbox יש עוד כמה מאפיינים שכדאי לזכור:

  • הפעלת toolbox אחרי ההפעלה הראשונה לא דורשת דמון Docker פעיל, ולא גורמת לתקורה של רשת או דיסק.
  • סביבת toolbox מוגדרת פעם אחת לכל משתמש שמפעיל אותה. הפעלת sudo toolbox מגדירה אותו עבור משתמש root.
  • סביבת toolbox נוצרת ב-/var/lib/toolbox והיא נשמרת גם אחרי הפעלה מחדש.
  • אתם יכולים לגשת לחלקים של מערכת הקבצים הבסיסית, כמו ספריות ביתיות של משתמשים, מתוך סביבת toolbox.

התאמה אישית של ארגז הכלים לפריסה

בדוגמאות הבאות, נניח ששם המשתמש הוא USER ושם המופע של מערכת הפעלה שמותאמת לקונטיינרים הוא cos-dev.

אפשר להתאים אישית את קובץ האימג' של Docker שבו משתמשים ב-toolbox, וגם את הנתיבים שזמינים ל-toolbox במערכת הקבצים של ה-root. ההגדרות האלה נמצאות בקובץ /etc/default/toolbox. קובץ /etc/default/toolbox שמוגדר כברירת מחדל בדרך כלל נראה כך:

USER@cos-dev ~ $ cat /etc/default/toolbox
# Copyright 2016 The Chromium OS Authors. All rights reserved.
# Use of this source code is governed by a BSD-style license that can be
# found in the LICENSE file.

TOOLBOX_DOCKER_IMAGE="gcr.io/cos-cloud/toolbox"
TOOLBOX_DOCKER_TAG="v20220722"
TOOLBOX_BIND="--bind=/:/media/root/ --bind=/mnt/disks/:/media/root/mnt/disks/ --bind=/var/:/media/root/var/ --bind=/home:/media/root/home/ --bind=/etc/resolv.conf:/etc/resolv.conf"
: ${USER:=root}
  • המשתנים TOOLBOX_DOCKER_IMAGE ו-TOOLBOX_DOCKER_TAG מציינים את קובץ אימג' של Docker שבו יש להשתמש. gcr.io/cos-cloud/toolboxכברירת מחדל, חלק מהכלים הנפוצים כמו Google Cloud CLI מותקנים מראש.
  • המשתנה TOOLBOX_BIND מציין את הנתיבים מ-rootfs שיהיו זמינים בסביבת ארגז הכלים.

כדי לשנות את הגדרות ברירת המחדל, משנים את הקובץ /etc/default/toolbox או מציינים ערכים חדשים למשתנים בקובץ ${HOME}/.toolboxrc עבור המשתמש המתאים. לדוגמה, אם רוצים ש-toolbox ישתמש ב-fedora:latest כקונטיינר שלו, אפשר להריץ את הפקודות הבאות:

USER@cos-dev ~ $ echo "TOOLBOX_DOCKER_IMAGE=docker.io/library/fedora" > "${HOME}/.toolboxrc"
USER@cos-dev ~ $ echo "TOOLBOX_DOCKER_TAG=latest" >> "${HOME}/.toolboxrc"
USER@cos-dev ~ $ toolbox

אפשר לשנות את הקובץ /etc/default/toolbox כמו בדוגמה הבאה.

USER@cos-dev ~ $ cat /etc/default/toolbox
# Copyright 2016 The Chromium OS Authors. All rights reserved.
# Use of this source code is governed by a BSD-style license that can be
# found in the LICENSE file.

TOOLBOX_DOCKER_IMAGE="gcr.io/cos-cloud/toolbox"
TOOLBOX_DOCKER_TAG="v20220722"
TOOLBOX_DOCKER_IMAGE_TARBALL=<var>[location/to/tarball]</var>
TOOLBOX_BIND="--bind=/:/media/root/ --bind=/mnt/disks/:/media/root/mnt/disks/ --bind=/var/:/media/root/var/ --bind=/home:/media/root/home/"
: ${USER:=root}
USER@cos-dev ~ $ toolbox

התקנה והפעלה של כלים מארגז הכלים

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

# Inside the toolbox shell
USER@cos-dev ~ $ toolbox
root@cos-dev:~# apt-get update && apt-get install -y htop psmisc
root@cos-dev:~# htop
root@cos-dev:~# pstree -p
root@cos-dev:~# exit

לא תמיד צריך להזין את הפקודה toolbox כדי להריץ פקודות ב-Cloud Shell. אפשר להוסיף את הקידומת toolbox לפקודות. לדוגמה, כדי להתקין ולהריץ את כלי השירות strace כדי לעקוב אחר ההרצה של Docker daemon, אפשר לעשות את הפעולות הבאות:

USER@cos-dev ~ $ toolbox apt-get install -y strace
USER@cos-dev ~ $ toolbox strace -p `pidof dockerd`

‫Google Cloud CLI מותקן מראש ב-toolbox:

USER@cos-dev ~ $ toolbox
root@cos-dev:~# which gcloud
/google-cloud-sdk/bin/gcloud
# View installed components
root@cos-dev:~# gcloud components list

Your current gcloud CLI version is: 287.0.0
The latest available version is: 295.0.0
...

חשוב לזכור ש-CLI של gcloud יכול לגשת רק למשאבים שלמכונת ה-VM יש הרשאה לגשת אליהם. כדי לקבל מידע נוסף על הקצאת מכונות וירטואליות עם גישה למשאבים אחרים, אפשר לקרוא את מאמרי העזרה בנושא Compute Engine.

כדי לקבל מידע נוסף על השימוש ב-CLI של gcloud, אפשר לעיין במסמכי התיעוד של Google Cloud CLI.

העברת קבצים אל ארגז הכלים וממנו

אפשר לגשת למערכת הקבצים הבסיסית של המארח בתוך toolbox דרך הנתיב /media/root. במארח, אפשר לגשת לתיקיית השורש של toolbox דרך הנתיב הבא: /var/lib/toolbox/USER-gcr.io_cos-cloud_toolbox-VERSION/root כאשר USER הוא שם המשתמש שלכם ו-VERSION הוא מספר הגרסה של toolbox (לדוגמה, v20220722).

בדוגמאות הבאות אפשר לראות איך מעבירים קבצים אל toolbox וממנו:

# Access the host filesystem inside the toolbox
USER@cos-dev ~ $ toolbox
root@cos-dev:~# ls /media/root
bin  boot  dev  etc  home  lib  lib64  ...
root@cos-dev:~# cp /media/root/home/USER/some-file .

# Access toolbox directory from the host
USER@cos-dev ~ $ sudo cp some-file /var/lib/toolbox/USER-gcr.io_cos-cloud_toolbox-v20220722/root

# Run a command inside toolbox and save its output in your home directory
USER@cos-dev ~ $ toolbox strace -o /media/root/$HOME/ls.strace ls
USER@cos-dev ~ $ more $HOME/ls.strace

פינוי מקום בדיסק שמשמש את ארגז הכלים

התקנת ארגז הכלים צורכת כ-2-3GB של שטח דיסק ב-/var (השימוש בדיסק משתנה בהתאם לגרסת מערכת הפעלה שמותאמת לקונטיינרים). כדי לפנות שטח אחסון בדיסק שמשמש את ארגז הכלים, מבצעים את המשימות הבאות בהתאם לגרסה של מערכת ההפעלה שמותאמת לקונטיינרים:

# remove files in /var/lib/toolbox
sudo rm -rf /var/lib/toolbox/*

# remove container artifacts
sudo ctr images rm $IMAGE_NAME

אפשר להריץ את הפקודה sudo ctr images ls -q כדי לקבוע את הערך הזה. לדוגמה, IMAGE_NAME=gcr.io/cos-cloud/toolbox:v20220722.