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. Embora o Container-Optimized OS não inclua um gerenciador de pacotes, é possível usar o utilitário pré-instalado toolbox para instalar qualquer pacote ou ferramenta adicional que precisar. Usar /usr/bin/toolbox é o método preferido para instalar e executar ferramentas de depuração individuais.

/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/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}
  • As variáveis TOOLBOX_DOCKER_IMAGE e TOOLBOX_DOCKER_TAG especificam a imagem do Docker a ser usada. O gcr.io/google-containers/toolbox padrão vem com algumas das ferramentas comuns, como a ferramenta de linha de comando gcloud 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=fedora" > "${HOME}/.toolboxrc"
USER@cos-dev ~ $ echo "TOOLBOX_DOCKER_TAG=latest" >> "${HOME}/.toolboxrc"
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`

O SDK do Cloud é pré-instalado 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 Cloud SDK version is: 287.0.0
The latest available version is: 295.0.0
...

Lembre-se de que 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 o provisionamento de instâncias de VM com acesso a outros recursos.

Leia a documentação do SDK do Cloud para saber mais sobre como usar o 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_google-containers_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, 20200404-00).

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