Cómo depurar problemas de nodos con toolbox

Es posible que debas instalar paquetes o herramientas adicionales en Container-Optimized OS para determinadas tareas como, por ejemplo, la depuración. Por ejemplo, depurar problemas de conectividad de nodos mediante instalación de tcpdump en la caja de herramientas. Aunque Container-Optimized OS no incluye un administrador de paquetes, puedes usar el modelo caja de herramientas para instalar cualquier paquete o herramienta adicional que necesites. El uso de /usr/bin/toolbox es el método preferido para instalar y ejecutar herramientas de depuración únicas.

/usr/bin/toolbox básicamente te proporciona un shell en un entorno similar a chroot de Debian. Cuando invocas /usr/bin/toolbox, ejecuta los siguientes comandos:

  1. docker pull y docker create para configurar el entorno. Estas solo se ejecutan la primera vez que invocas a /usr/bin/toolbox.
  2. systemd-nspawn para ejecutar el comando dado o (si no hay ningún comando) te proporciona un shell

toolbox tiene algunas otras propiedades que se deben tener en cuenta:

  • La invocación de toolbox después de la primera invocación no requiere un daemon de Docker que funcione ni incurre en ninguna sobrecarga de red o disco.
  • El entorno toolbox se configura una vez para cada usuario que lo invoca. Si ejecutas sudo toolbox, se configurará para el usuario root.
  • El entorno de toolbox se crea en /var/lib/toolbox y es persistente en todos los reinicios.
  • Puedes acceder a las secciones del sistema de archivos raíz como, por ejemplo, los directorios de inicio del usuario, desde el entorno de toolbox.

Cómo personalizar la caja de herramientas para tu implementación

En los siguientes ejemplos, suponemos que tu nombre de usuario es USER y el nombre de la instancia de Container-Optimized OS es cos-dev.

Puedes personalizar la imagen de Docker que usa toolbox y las rutas disponibles para toolbox en el sistema de archivos raíz. Esta configuración se encuentra en el archivo /etc/default/toolbox. Por lo general, el archivo /etc/default/toolbox predeterminado es similar al siguiente:

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}
  • Las variables TOOLBOX_DOCKER_IMAGE y TOOLBOX_DOCKER_TAG especifican la imagen de Docker que se usará. La gcr.io/cos-cloud/toolbox predeterminada viene con algunas de las herramientas comunes preinstaladas, como Google Cloud CLI.
  • La variable TOOLBOX_BIND especifica las rutas de rootfs que estarán disponibles dentro del entorno de toolbox.

Para cambiar la configuración predeterminada, modifica el archivo /etc/default/toolbox o especifica valores nuevos de las variables en ${HOME}/.toolboxrc para el usuario apropiado. Por ejemplo, si deseas que toolbox use fedora:latest como su contenedor, puedes ejecutar los siguientes comandos:

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

En el hito 93, la caja de herramientas no podrá extraer la imagen personalizada. Para solucionar este problema, compila el tarball de la imagen de Docker de la caja de herramientas personalizada y expórtalo a través del archivo ${HOME}/.toolboxrc o /etc/default/toolbox.

USER@cos-dev ~ $ echo "TOOLBOX_DOCKER_IMAGE_TARBALL=[docker image tar ball]" > "${HOME}/.toolboxrc"
USER@cos-dev ~ $ toolbox
El archivo "/etc/default/toolbox" se puede modificar como se muestra a continuación.
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

Cómo instalar y ejecutar herramientas de la caja de herramientas

Una vez que hayas invocado la utilidad toolbox para iniciar la shell, puedes usar apt-get dentro del contenedor resultante para instalar los paquetes. Por ejemplo:

# 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

No siempre necesitas ingresar toolbox para ejecutar comandos en ella. Puedes agregar prefijos a tus comandos con toolbox. Por ejemplo, si deseas instalar y ejecutar la utilidad strace para rastrear la ejecución del daemon de Docker, puedes hacer lo siguiente:

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

Google Cloud CLI está preinstalada en 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
...

Ten en cuenta que gcloud CLI solo puede acceder a los recursos a los que está autorizada la instancia de VM. Consulta la documentación de Compute Engine para obtener más información sobre el aprovisionamiento de instancias de VM con acceso a otros recursos.

Lee la documentación de Google Cloud CLI para obtener más información sobre el uso de gcloud CLI.

Cómo ingresar y extraer archivos en toolbox

Se puede acceder al sistema de archivos raíz del host dentro de toolbox a través de la ruta de acceso /media/root. En el host, se puede acceder al directorio raíz de toolbox a través de la siguiente ruta: /var/lib/toolbox/USER-gcr.io_cos-cloud_toolbox-VERSION/root en el que USER es tu nombre de usuario y VERSION es el toolbox (por ejemplo, v20220722).

Los siguientes ejemplos muestran cómo incluir archivos en toolbox y quitarlos de ella:

# 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

Libera espacio en el disco que usa la caja de herramientas

La instalación de la caja de herramientas consume alrededor de 2 a 3 GB de disco espacio en /var (el uso del disco varía según la versión de Container-Optimized OS). Para liberar el espacio en el disco que usa Toolbox, realiza las siguientes tareas según la versión de Container-Optimized OS que tengas:

Evento importante 89 and versiones anteriores

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

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

Puedes ejecutar docker image ls para determinar estos valores. Por ejemplo, IMAGE_PATH=gcr.io/cos-cloud/toolbox y TAG=v20220722.

Evento importante 93 y versiones posteriores

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

# remove container artifacts
sudo ctr images rm $IMAGE_NAME

Puedes ejecutar sudo ctr images ls -q para determinar este valor. Por ejemplo, IMAGE_NAME=gcr.io/cos-cloud/toolbox:v20220722