Depurar problemas de nodos con la caja de herramientas

Es posible que tengas que instalar paquetes o herramientas adicionales en Container-Optimized OS para realizar determinadas tareas, como depurar. Por ejemplo, puedes depurar problemas de conectividad de nodos instalando tcpdump en la caja de herramientas. Aunque Container-Optimized OS no incluye un gestor de paquetes, puedes usar la utilidad toolbox preinstalada para instalar los paquetes o las herramientas adicionales que necesites. Usar /usr/bin/toolbox es el método preferido para instalar y ejecutar herramientas de depuración puntuales.

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

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

toolbox tiene otras propiedades que debes tener en cuenta:

  • Invocar toolbox después de la primera invocación no requiere un daemon de Docker que funcione, ni supone ninguna sobrecarga de red o de disco.
  • El entorno toolbox se configura una vez por cada usuario que lo invoca. Al ejecutar sudo toolbox, se configura para el usuario root.
  • El entorno toolbox se crea en /var/lib/toolbox y persiste tras los reinicios.
  • Puedes acceder a secciones del sistema de archivos raíz, como los directorios de inicio de los usuarios, desde el entorno toolbox.

Personalizar la caja de herramientas para tu implementación

En los siguientes ejemplos, se da por hecho que tu nombre de usuario es USER y que el nombre de tu instancia de Container-Optimized OS es cos-dev.

Puedes personalizar la imagen Docker que usa toolbox, así como las rutas disponibles para toolbox en el sistema de archivos raíz. Estos ajustes se encuentran en el archivo /etc/default/toolbox. El archivo /etc/default/toolbox predeterminado suele ser 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 va a usar. La gcr.io/cos-cloud/toolbox predeterminada incluye algunas de las herramientas habituales, como la CLI de Google Cloud, preinstaladas.
  • La variable TOOLBOX_BIND especifica las rutas de rootfs que se van a poner a disposición en el entorno de la caja de herramientas.

Para cambiar los ajustes predeterminados, modifique el archivo /etc/default/toolbox o especifique nuevos valores para las variables en ${HOME}/.toolboxrc del usuario correspondiente. Por ejemplo, si quieres que toolbox use fedora:latest como 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

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

Instalar y ejecutar herramientas de la caja de herramientas

Una vez que hayas invocado la utilidad toolbox para iniciar el shell, puedes usar apt-get dentro del contenedor resultante para instalar 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 tienes que introducir toolbox para ejecutar comandos en ella. Puedes añadir el prefijo toolbox a tus comandos. Por ejemplo, para instalar y ejecutar la utilidad strace para monitorizar 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á preinstalado en la caja de herramientas:

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 la CLI de gcloud solo puede acceder a los recursos a los que la instancia de VM tenga autorización. 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.

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

Importar y exportar archivos de la caja de herramientas

Se puede acceder al sistema de archivos raíz del host en toolbox a través de la ruta /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 donde USER es tu nombre de usuario y VERSION es el número de versión de toolbox (por ejemplo, v20220722).

En los siguientes ejemplos se muestra cómo introducir y extraer archivos de 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

Limpiar el espacio en disco usado por la caja de herramientas

La instalación de la caja de herramientas consume aproximadamente entre 2 y 3 GB de espacio en disco en /var (el uso del disco varía en función de la versión de Container-Optimized OS). Para liberar espacio en disco usado por la caja de herramientas, realiza las siguientes tareas en función de tu versión de Container-Optimized OS:

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