Déboguer les problèmes de nœuds avec Toolbox

Vous devrez peut-être installer des packages ou des outils supplémentaires sur Container-Optimized OS pour certaines tâches, telles que le débogage. Par exemple, déboguez les problèmes de connectivité des nœuds en installant tcpdump dans la boîte à outils. Bien que Container-Optimized OS n'inclue pas de gestionnaire de packages, vous pouvez utiliser l'utilitaire pré-installé Toolbox pour installer les packages ou outils supplémentaires dont vous avez besoin. L'utilisation de /usr/bin/toolbox est la méthode recommandée pour installer et exécuter des outils de débogage ponctuels.

/usr/bin/toolbox fournit essentiellement une interface système dans un environnement Debian de type chroot. Lorsque vous appelez l'utilitaire /usr/bin/toolbox, il exécute les commandes suivantes :

  1. docker pull et docker create pour configurer l'environnement. Ces commandes ne sont exécutées que la première fois que vous appelez /usr/bin/toolbox.
  2. systemd-nspawn pour exécuter la commande donnée ou (en l'absence de commande) fournir une interface système.

toolbox a d'autres propriétés à garder à l'esprit :

  • Appeler de nouveau toolbox après le premier appel ne nécessite pas de démon Docker opérationnel, et n'entraîne pas de surcharge réseau/disque.
  • L'environnement toolbox est configuré une fois pour chaque utilisateur qui l'appelle. L'exécution de sudo toolbox le configure pour l'utilisateur root.
  • L'environnement toolbox est créé sous /var/lib/toolbox et est persistant après le redémarrage.
  • Vous pouvez accéder à des sections du système de fichiers racine, telles que les répertoires d'accueil des utilisateurs, à partir de l'environnement toolbox.

Personnaliser toolbox pour votre déploiement

Dans les exemples suivants, nous supposons que votre nom d'utilisateur est USER et que votre nom d'instance Container-Optimized OS est cos-dev.

Vous pouvez personnaliser l'image Docker utilisée par toolbox, ainsi que les chemins d'accès disponibles pour toolbox dans le système de fichiers racine. Ces paramètres se trouvent dans le fichier /etc/default/toolbox. Le fichier /etc/default/toolbox par défaut ressemble généralement à ce qui suit :

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}
  • Les variables TOOLBOX_DOCKER_IMAGE et TOOLBOX_DOCKER_TAG spécifient l'image Docker à utiliser. La valeur par défaut gcr.io/cos-cloud/toolbox est fournie avec certains outils courants tels que Google Cloud CLI préinstallé.
  • La variable TOOLBOX_BIND spécifie les chemins d'accès du système de fichiers rootfs à rendre disponibles dans l'environnement toolbox.

Pour modifier les paramètres par défaut, modifiez le fichier /etc/default/toolbox ou spécifiez de nouvelles valeurs pour les variables dans ${HOME}/.toolboxrc pour l'utilisateur approprié. Par exemple, si vous souhaitez que toolbox utilise fedora:latest comme conteneur, vous pouvez exécuter les commandes suivantes :

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

Pour l'étape 93, "Boîte à outils" ne pourra pas extraire l'image personnalisée de "Boîte à outils". Pour contourner ce problème, créez la boîte à outils personnalisée Docker image tar ball et exportez-la via un fichier ${HOME}/.toolboxrc ou /etc/default/toolbox.

USER@cos-dev ~ $ echo "TOOLBOX_DOCKER_IMAGE_TARBALL=[docker image tar ball]" > "${HOME}/.toolboxrc"
USER@cos-dev ~ $ toolbox
Le fichier "/etc/default/dialog" peut être modifié comme indiqué ci-dessous.
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

Installer et exécuter des outils à partir de toolbox

Une fois que vous avez appelé l'utilitaire toolbox pour démarrer l'interface système, vous pouvez utiliser apt-get à l'intérieur du conteneur résultant pour installer les packages. Exemple :

# 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

Vous n'avez pas toujours besoin de saisir toolbox pour y exécuter des commandes. Vous pouvez simplement ajouter le préfixe toolbox à vos commandes. Par exemple, pour installer et exécuter l'utilitaire strace pour suivre l'exécution du daemon Docker, vous pouvez effectuer les opérations suivantes :

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

La Google Cloud CLI est préinstallée dans 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
...

N'oubliez pas que la gcloud CLI ne peut accéder qu'aux ressources auxquelles l'instance de VM est autorisée à accéder. Consultez la documentation de Compute Engine pour en savoir plus sur le provisionnement d'instances de VM ayant accès à d'autres ressources.

Consultez la documentation de Google Cloud CLI pour en savoir plus sur l'utilisation de gcloud CLI.

Importer et extraire des fichiers de la boîte à outils

Le système de fichiers racine de l'hôte est accessible dans toolbox via le chemin /media/root. Sur l'hôte, le répertoire racine de toolbox est accessible via le chemin d'accès suivant /var/lib/toolbox/USER-gcr.io_cos-cloud_toolbox-VERSION/rootUSER est votre nom d'utilisateur et VERSION le toolbox numéro de version (par exemple, v20220722).

Les exemples suivants montrent comment importer et extraire des fichiers dans 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

Nettoyer l'espace disque utilisé par Toolbox

L'installation de toolbox consomme environ 2 à 3 Go d'espace disque dans le fichier /var (l'utilisation du disque varie en fonction de la version de Container-Optimized OS). Pour libérer de l'espace disque utilisé par toolbox, effectuez les tâches suivantes en fonction de la version de Container-Optimized OS :

Jalon 89 et versions antérieures

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

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

Vous pouvez exécuter docker image ls pour déterminer ces valeurs. Par exemple, IMAGE_PATH=gcr.io/cos-cloud/toolbox et TAG=v20220722.

Jalon 93 et versions ultérieures

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

# remove container artifacts
sudo ctr images rm $IMAGE_NAME

Vous pouvez exécuter sudo ctr images ls -q pour déterminer cette valeur. Exemple : IMAGE_NAME=gcr.io/cos-cloud/toolbox:v20220722.