Déboguer les problèmes de nœuds à l'aide de la boîte à outils

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. Bien que Container-Optimized OS n'inclut pas de gestionnaire de packages, vous pouvez utiliser l'utilitaire toolbox pré-installé 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 uniques.

/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. Elles 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 le nom de votre 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 à ceci:

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/google-containers/toolbox"
TOOLBOX_DOCKER_TAG="20200404-00"
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 gcr.io/google-containers/toolbox par défaut est fournie avec certains outils courants, tels que l'outil de ligne de commande gcloud 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, en supposant que vous souhaitiez que toolbox utilise fedora:latest comme conteneur, vous pouvez exécuter les commandes suivantes:

USER@cos-dev ~ $ echo "TOOLBOX_DOCKER_IMAGE=fedora" > "${HOME}/.toolboxrc"
USER@cos-dev ~ $ echo "TOOLBOX_DOCKER_TAG=latest" >> "${HOME}/.toolboxrc"
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 dans le conteneur résultant pour installer des 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

Il n'est pas toujours nécessaire de saisir toolbox pour exécuter des commandes. Vous pouvez simplement ajouter le préfixe toolbox à vos commandes. Par exemple, pour installer et exécuter l'utilitaire strace afin de suivre l'exécution du daemon Docker, procédez comme suit:

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

Le SDK Cloud est préinstallé dans la boîte à outils:

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 Cloud SDK version is: 287.0.0
The latest available version is: 295.0.0
...

N'oubliez pas que gcloud ne peut accéder qu'aux ressources auxquelles l'instance de VM est autorisée à accéder. Lisez 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 du SDK Cloud pour en savoir plus sur l'utilisation de gcloud.

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 suivant: /var/lib/toolbox/USER-gcr.io_google-containers_toolbox-VERSION/rootUSER est votre nom d'utilisateur et VERSION est le numéro de version toolbox (par exemple, 20200404-00).

Les exemples suivants montrent comment transférer des fichiers vers et depuis 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_google-containers_toolbox-20200404-00/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