Depuração de problemas de nós com a caixa de ferramentas

Pode ter de instalar pacotes ou ferramentas adicionais no SO otimizado para contentores para determinadas tarefas, como a depuração. Por exemplo, resolva problemas de conectividade de nós instalando tcpdump na caixa de ferramentas. Embora o SO otimizado para contentores não inclua um gestor de pacotes, pode usar o utilitário toolbox pré-instalado para instalar quaisquer pacotes ou ferramentas adicionais de que necessite. A utilização de /usr/bin/toolbox é o método preferencial para instalar e executar ferramentas de depuração únicas.

Essencialmente, o /usr/bin/toolbox oferece-lhe uma shell num ambiente semelhante a um chroot do Debian. Quando invoca o /usr/bin/toolbox, este executa os seguintes comandos:

  1. docker pull e docker create para configurar o ambiente. Estes comandos só são executados na primeira vez que invoca /usr/bin/toolbox.
  2. systemd-nspawn para executar o comando fornecido ou (na ausência de qualquer comando) fornece-lhe uma shell

toolbox tem outras propriedades a ter em conta:

  • A invocação de toolbox após a primeira invocação não requer um daemon do Docker funcional, nem incorre em sobrecarga de rede ou de disco.
  • O ambiente toolbox é configurado uma vez para cada utilizador que o invoca. A execução de sudo toolbox configura-o para o utilizador root.
  • O ambiente toolbox é criado em /var/lib/toolbox e é persistente nos reinícios.
  • Pode aceder a secções do sistema de ficheiros de raiz, como diretórios principais do utilizador, a partir do ambiente toolbox.

Personalize a caixa de ferramentas para a sua implementação

Nos exemplos seguintes, partimos do princípio de que o seu nome de utilizador é USER e o nome da instância do SO otimizado para contentores é cos-dev.

Pode personalizar a imagem do Docker que o toolbox usa, bem como os caminhos disponíveis para o toolbox no sistema de ficheiros de raiz. Estas definições encontram-se no ficheiro /etc/default/toolbox. Normalmente, o ficheiro /etc/default/toolbox predefinido tem o seguinte aspeto:

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}
  • As variáveis TOOLBOX_DOCKER_IMAGE e TOOLBOX_DOCKER_TAG especificam a imagem do Docker a usar. A imagem predefinida gcr.io/cos-cloud/toolbox inclui algumas das ferramentas comuns, como a CLI do Google Cloud pré-instaladas.
  • A variável TOOLBOX_BIND especifica os caminhos de rootfs a disponibilizar no ambiente da caixa de ferramentas.

Para alterar as predefinições, modifique o ficheiro /etc/default/toolbox ou especifique novos valores para as variáveis em ${HOME}/.toolboxrc para o utilizador adequado. Por exemplo, supondo que quer que toolbox use fedora:latest como respetivo contentor, pode executar os seguintes 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

O ficheiro /etc/default/toolbox pode ser modificado conforme mostrado abaixo.

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

Instale e execute ferramentas a partir da caixa de ferramentas

Depois de invocar o utilitário toolbox para iniciar a shell, pode usar apt-get no contentor resultante para instalar pacotes. Por exemplo:

# 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

Não tem sempre de introduzir toolbox para executar comandos. Pode adicionar o prefixo toolbox aos seus comandos. Por exemplo, para instalar e executar o utilitário strace para rastrear a execução do daemon Docker, pode fazer o seguinte:

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

A CLI do Google Cloud está pré-instalada na caixa de ferramentas:

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

Tenha em atenção que a CLI gcloud só pode aceder a recursos aos quais a instância de VM tem autorização de acesso. Leia a documentação do Compute Engine para saber mais sobre o aprovisionamento de instâncias de VM com acesso a outros recursos.

Leia a documentação da CLI do Google Cloud para saber mais sobre a utilização da CLI gcloud.

Coloque ficheiros dentro e fora da caixa de ferramentas

O sistema de ficheiros raiz do anfitrião é acessível no interior de toolbox através do caminho /media/root. No anfitrião, o diretório raiz do toolbox é acessível através do seguinte caminho: /var/lib/toolbox/USER-gcr.io_cos-cloud_toolbox-VERSION/root onde USER é o seu nome de utilizador e VERSION é o número da versão do toolbox (por exemplo, v20220722).

Os exemplos seguintes mostram como transferir ficheiros para o toolbox e a partir deste:

# 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

Limpe o espaço em disco usado pela caixa de ferramentas

A instalação da caixa de ferramentas consome aproximadamente 2 a 3 GB de espaço em disco em /var (a utilização do disco varia consoante a versão do SO otimizado para contentores). Para libertar espaço em disco usado pela caixa de ferramentas, execute as seguintes tarefas consoante a sua versão do SO otimizado para contentores:

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

# remove container artifacts
sudo ctr images rm $IMAGE_NAME

Pode executar sudo ctr images ls -q para determinar este valor. Por exemplo, IMAGE_NAME=gcr.io/cos-cloud/toolbox:v20220722.