ツールボックスを使用したノードの問題のデバッグ

デバッグなどの特定のタスクを行うには、Container-Optimized OS にパッケージやツールを追加でインストールする必要があります。たとえば、ツールボックスに tcpdump をインストールして、ノードの接続の問題をデバッグします。Container-Optimized OS にはパッケージ マネージャーが含まれていませんが、プリインストールされた ツールボックス ユーティリティを使用して、必要なパッケージやツールを追加でインストールできます。1 回だけデバッグツールをインストールして実行する場合は、/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_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

マイルストーン 93 では、ツールボックスはカスタム ツールボックス イメージを pull できません。この問題を回避するには、カスタム ツールボックスの Docker イメージの tarball をビルドし、${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 ユーティリティを起動してシェルを実行すると、作成されたコンテナ内の 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 インスタンスのアクセスが許可されているリソースのみであることにご注意ください。他のリソースへのアクセスが可能な VM インスタンスのプロビジョニングの詳細については、Compute Engine のドキュメントをご覧ください。

gcloud CLI の使用方法の詳細については、Google Cloud CLI のドキュメントをご覧ください。

ツールボックスへのファイルの入出力

ホストのルート ファイルシステムには、toolbox 内で /media/root パスを介してアクセスできます。ホスト上では、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

ツールボックスで使用されるディスク スペースのクリーンアップ

ツールボックスのインストールでは、/var で約 2~3 GB のディスク容量が消費されます(ディスク使用量は Container-Optimized OS のバージョンによって異なります)。ツールボックスで使用されるディスク容量を解放するには、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