使用工具箱偵測節點問題

您可能需要在 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 Daemon,也不會產生任何網路或磁碟負擔。
  • 系統會為每位叫用 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 變數會指定從 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,才能在其中執行指令。你可以在指令前加上 toolbox。舉例來說,如要安裝及執行 strace 公用程式,追蹤 Docker Daemon 的執行作業,可以執行下列操作:

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 是您的使用者名稱,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

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

工具箱安裝作業會耗用 /var 中約 2 到 3 GB 的磁碟空間 (磁碟用量會因 Container-Optimized OS 版本而異)。如要釋放工具箱占用的磁碟空間,請根據 Container-Optimized OS 版本執行下列工作:

# 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