使用工具箱偵測節點問題

您可能需要在 Container-Optimized OS 上安裝額外套件或工具來執行偵錯等特定工作。例如,在工具箱中安裝 tcpdump,以便偵錯節點連線問題。雖然 Container-Optimized OS 不包含套件管理員,但您可以使用預先安裝的 toolbox 公用程式,安裝所需的任何額外套件或工具。使用 /usr/bin/toolbox 是安裝及執行一次性偵錯工具的首選方法。

/usr/bin/toolbox 基本上會在類似 Debian chroot 的環境中提供殼層。叫用 /usr/bin/toolbox 時,系統會執行下列指令:

  1. docker pulldocker create 設定環境。這些指令只會在您第一次叫用 /usr/bin/toolbox 時執行。
  2. systemd-nspawn 執行指定指令,或在沒有任何指令的情況下提供殼層

toolbox 還有一些其他屬性需要留意:

  • 在第一次叫用後,呼叫 toolbox 不需要運作的 Docker 守護程式,也不會產生任何網路/磁碟額外負擔。
  • 系統會為每位叫用 toolbox 環境的使用者設定一次環境。執行 sudo toolbox 會為 root 使用者設定。
  • toolbox 環境會在 /var/lib/toolbox 下建立,並在重新啟動時持續存在。
  • 您可以在 toolbox 環境中存取根目錄系統的部分,例如使用者的主目錄。

針對您的部署自訂工具箱

在以下範例中,我們假設您的使用者名稱為 USER,而 Container-Optimized OS 執行個體名稱為 cos-dev

您可以自訂 toolbox 使用的 Docker 映像檔,以及 toolbox 在根檔案系統中可用的路徑。這些設定位於 /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_IMAGETOOLBOX_DOCKER_TAG 變數會指定要使用的 Docker 映像檔。預設的 gcr.io/cos-cloud/toolbox 會預先安裝 Google Cloud CLI 等常用工具。
  • TOOLBOX_BIND 變數會指定要讓 toolbox 環境使用 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

在 Milestone 93 中,工具箱將無法提取自訂工具箱映像檔。如要解決這個問題,請建構自訂工具箱 Docker 映像檔 tar 檔案,然後透過 ${HOME}/.toolboxrc 檔案或 /etc/default/toolbox 檔案匯出。

USER@cos-dev ~ $ echo "TOOLBOX_DOCKER_IMAGE_TARBALL=[docker image tar ball]" > "${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=[location/to/tarball]
    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 公用程式來啟動 Shell 後,您可以在產生的容器中使用 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 才能在其中執行指令。您只需在指令前加上 toolbox。舉例來說,如要安裝及執行 strace 公用程式,以便追蹤 Docker 守護程式的執行情形,您可以執行下列操作:

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

Google Cloud CLI 已預先安裝在工具箱中:

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
...

請注意,gcloud CLI 只能存取 VM 執行個體已獲授權存取的資源。請參閱 Compute Engine 說明文件,進一步瞭解如何佈建可存取其他資源的 VM 執行個體。

請參閱 Google Cloud CLI 說明文件,進一步瞭解如何使用 gcloud CLI。

將檔案移入或移出工具箱

您可以透過 /media/root 路徑,在 toolbox 內存取主機的根檔案系統。在主機上,您可以透過以下路徑存取 toolbox 的根目錄:/var/lib/toolbox/USER-gcr.io_cos-cloud_toolbox-VERSION/root,其中 USER 是您的使用者名稱,VERSIONtoolbox 的版本號碼 (例如 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

清理工具箱使用的磁碟空間

Toolbox 安裝作業會在 /var 中耗用約 2 到 3 GB 的磁碟空間 (磁碟用量會因 Container-Optimized OS 版本而異)。如要釋出 toolbox 使用的磁碟空間,請視 Container-Optimized OS 版本執行下列任務:

里程碑 89 以下

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

# remove container artifacts
docker image rm $IMAGE_PATH:$TAG

您可以執行 docker image ls 來判斷這些值。例如 IMAGE_PATH=gcr.io/cos-cloud/toolboxTAG=v20220722

93 以上版本

# 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