Como depurar problemas de nó usando a caixa de ferramentas

Pode ser preciso instalar outros pacotes ou ferramentas no Container-Optimized OS para certas tarefas, como a depuração. Por exemplo, depure problemas de conectividade do nó instalando tcpdump na caixa de ferramentas. Embora o Container-Optimized OS não inclua um gerenciador de pacotes, é possível usar o utilitário caixa de ferramentas pré-instalado para instalar qualquer pacote ou ferramenta adicional que você precisar. Usar /usr/bin/toolbox é o método preferencial para instalar e executar ferramentas de depuração únicas.

/usr/bin/toolbox essencialmente fornece um shell em um ambiente parecido com o chroot do Debian. Quando você invoca /usr/bin/toolbox, ele executa os seguintes comandos:

  1. docker pull e docker create para configurar o ambiente. São executados apenas na primeira vez que você invoca /usr/bin/toolbox.
  2. systemd-nspawn para executar o comando especificado ou (na ausência de qualquer comando) fornecer um shell

toolbox tem outras propriedades a serem consideradas:

  • Chamar toolbox após a primeira chamada não exige um daemon do Docker em execução e não causa sobrecarga de rede/disco.
  • O ambiente toolbox é configurado uma vez para cada usuário invocando-o. A execução de sudo toolbox o configura para root usuário.
  • O ambiente toolbox é criado em /var/lib/toolbox e é persistente durante as reinicializações.
  • Você pode acessar seções do sistema de arquivos raiz, como os diretórios principais do usuário, a partir do ambiente da toolbox.

Personalizar a caixa de ferramentas para sua implantação

Nos exemplos a seguir, presumimos que o nome de usuário que você está usando é USER e nome da instância do Container-Optimized OS é cos-dev.

Você pode personalizar a imagem que o Docker toolbox usa, bem como os caminhos disponíveis para toolbox no sistema de arquivos raiz. Essas configurações estão localizadas no arquivo /etc/default/toolbox. O arquivo padrão /etc/default/toolbox normalmente é semelhante ao seguinte:

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 ser usada. O gcr.io/cos-cloud/toolbox padrão vê com algumas das ferramentas comuns, como a Google Cloud CLI pré-instalada.
  • A variável TOOLBOX_BIND especifica os caminhos do rootfs que precisam ser disponibilizados no ambiente da caixa de ferramentas.

Para alterar as configurações padrão, modifique o arquivo /etc/default/toolbox ou especifique novos valores para as variáveis em ${HOME}/.toolboxrc para o usuário apropriado. Por exemplo, supondo que você queira que toolbox use fedora:latest como contêiner, execute 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

No Marco 93, a caixa de ferramentas não extrairá a imagem personalizada dela. Para solucionar esse problema, crie uma bola tar da imagem do Docker personalizada da caixa de ferramentas e exporte-a por meio do arquivo ${HOME}/.toolboxrc ou /etc/default/toolbox.

USER@cos-dev ~ $ echo "TOOLBOX_DOCKER_IMAGE_TARBALL=[docker image tar ball]" > "${HOME}/.toolboxrc"
USER@cos-dev ~ $ toolbox
O arquivo `/etc/default/toolkit` 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=[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

Instalar e executar ferramentas a partir da caixa de ferramentas

Depois de invocar o utilitário toolbox para iniciar o shell, é possível usar apt-get dentro do contêiner resultante para instalar pacotes. 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

Você nem sempre precisa inserir toolbox para executar os comandos. Basta anexar toolbox no início dos comandos. Por exemplo, para instalar e executar o utilitário strace para rastrear a execução do daemon do Docker, faça o seguinte:

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

A Google Cloud CLI vem 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
...

Lembre-se de que a CLI gcloud só pode acessar recursos que a instância de VM está autorizada a acessar. Leia a documentação do Compute Engine para saber mais sobre como provisionar instâncias de VM com acesso a outros recursos.

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

Como depositar e retirar arquivos da caixa de ferramentas

O sistema de arquivos raiz do host pode ser acessado dentro de toolbox usando o caminho /media/root. No host, o diretório raiz de toolbox pode ser acessado usando o seguinte caminho: /var/lib/toolbox/USER-gcr.io_cos-cloud_toolbox-VERSION/root, em que USER é o nome de usuário que você está usando e VERSION é o número da versão da toolbox (por exemplo, v20220722).

Os exemplos a seguir mostram como depositar e retirar arquivos 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

Como limpar o espaço em disco usado pela caixa de ferramentas

A instalação da caixa de ferramentas consome aproximadamente de 2 a 3 GB de espaço em disco em /var (o uso do disco varia de acordo com a versão do Container-Optimized OS). Para liberar espaço em disco usado pela caixa de ferramentas, execute as seguintes tarefas, dependendo da versão do Container-Optimized OS:

Marco 89 e anteriores

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

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

Execute docker image ls para determinar esses valores. Por exemplo, IMAGE_PATH=gcr.io/cos-cloud/toolbox e TAG=v20220722.

Marco 93 e posteriores

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

# remove container artifacts
sudo ctr images rm $IMAGE_NAME

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