使用 CoreOS 工具箱调试节点问题

您可能需要在 Container-Optimized OS 上安装其他软件包或工具以执行某些任务,例如调试。尽管 Container-Optimized OS 不包含程序包管理器,但您可以使用预先安装的 CoreOS 工具箱实用程序来安装所需的其他任何程序包或工具。安装和运行一次性调试工具的首选方法是使用 /usr/bin/toolbox

/usr/bin/toolbox 基本上是在类似于 Debian chroot 的环境中为您提供了一个 shell。在调用 /usr/bin/toolbox 时,它会运行以下命令:

  1. 运行 docker pulldocker create 以设置环境。这些命令仅会在您首次调用 /usr/bin/toolbox 时运行。
  2. systemd-nspawn,用于运行给定的命令或(如果没有任何命令)为您提供 shell

toolbox 还有其他一些需要注意的属性:

  • 首次调用 toolbox 后再调用该命令时,不需要有效的 Docker 守护进程,也不会产生任何网络/磁盘开销。
  • toolbox 环境会为每个调用它的用户设置一次。运行sudo toolbox 即可为 root 用户设置它。
  • toolbox 环境在 /var/lib/toolbox 下创建,并且在重新启动后保持不变。
  • 您可以在 toolbox 环境内访问根文件系统的各个部分,例如用户主目录。

为您的部署自定义工具箱

您可以自定义 toolbox 使用的 Docker 映像,以及根文件系统中可供 toolbox 使用的路径。这些设置位于文件 /etc/default/toolbox 中。默认的 /etc/default/toolbox 文件通常类似于以下内容:

TOOLBOX_DOCKER_IMAGE="gcr.io/google-containers/toolbox"
TOOLBOX_DOCKER_TAG="20161110-02"
TOOLBOX_BIND="--bind=/:/media/root/ --bind=/mnt/disks/:/media/root/mnt/disks/ --bind=/var/:/media/root/var/ --bind=/home:/media/root/home/"
  • TOOLBOX_DOCKER_IMAGETOOLBOX_DOCKER_TAG 变量指定要使用的 Docker 映像。默认的 gcr.io/google-containers/toolbox 附带了一些常用工具,例如预装的 gcloud 命令行工具。
  • TOOLBOX_BIND 变量指定 rootfs 中可在工具箱环境内使用的路径。

要更改默认设置,请修改 /etc/default/toolbox 文件,或在 ${HOME}/.toolboxrc 中为相应用户指定变量的新值,如下所示:

    echo "TOOLBOX_DOCKER_IMAGE=fedora" > "${HOME}/.toolboxrc"
    echo "TOOLBOX_DOCKER_TAG=latest" >> "${HOME}/.toolboxrc"

安装和运行工具箱中的工具

调用工具箱实用程序来启动 shell 之后,即可在生成的容器中使用 apt-get 来安装程序包。例如:

# Inside the toolbox shell
apt-get update && apt-get install -y htop psmisc
htop
pstree -p

您还可以使用简写表示法来调用工具箱中的工具。 例如,要安装并运行 strace 实用程序以跟踪正在运行的进程的执行情况,请执行以下操作:

toolbox apt-get install -y strace
toolbox strace -p `pidof docker`

要运行预装的 gcloud 命令行工具,请确保您的实例具有足够的范围,可以访问各种 API。

# Inside the toolbox shell
which gcloud
/google-cloud-sdk/bin/gcloud

# View installed components
gcloud components list

Your current Cloud SDK version is: 134.0.0
The latest available version is: 141.0.0
...