Red Hat Training

A Red Hat training course is available for RHEL 8

Capítulo 6. Execução de imagens especiais de contêineres

Use este capítulo para aprender sobre alguns tipos especiais de imagens de recipientes. Estas incluem:

  • Toolbox: Ao invés de sobrecarregar um sistema host instalando ferramentas necessárias para depurar problemas ou monitorar recursos, você pode executar o comando toolbox. A Toolbox inicia uma imagem de container support-tools que contém ferramentas que você pode usar para executar relatórios ou diagnosticar problemas no host.
  • Runlabels: Algumas imagens de contêineres têm rótulos incorporados que lhe permitem executar esses contêineres com opções e argumentos pré-definidos. O comando podman container runlabel <label>, permite executar o comando definido naquele <label> para a imagem do contêiner. Os rótulos suportados são install, run e uninstall.

6.1. Solução de problemas de contentores com caixa de ferramentas

Em vez de instalar ferramentas de solução de problemas diretamente em seu sistema RHEL 8, o utilitário toolbox oferece uma maneira de adicionar temporariamente essas ferramentas, e depois descartá-las facilmente quando você estiver pronto. O utilitário toolbox funciona por:

  • Trazendo a imagem registry.redhat.io/rhel8/support-tools para seu sistema local.
  • Iniciando um recipiente a partir da imagem, depois rodando uma concha dentro do recipiente a partir do qual você pode acessar o sistema hospedeiro.

O recipiente support-tools permite que você o faça:

  • Executar comandos que não podem ser instalados no sistema hospedeiro, tais como sosreport, strace, ou tcpdump, de uma forma que lhes permita agir no sistema hospedeiro.
  • Instale mais software dentro do contêiner para usar no sistema host.
  • Descarte o recipiente quando estiver pronto.

O seguinte ilustra uma típica sessão toolbox.

Procedimento

  1. Certifique-se de que os pacotes toolbox e podman estejam instalados:

    # lista de módulos de yum - ferramentas para contêineres

    Para instalar o conjunto completo de ferramentas de contêineres, digite:

    # Módulo yum instala ferramentas para container -y
  2. Execute o comando da caixa de ferramentas para puxar e executar a imagem support-tools (inserindo suas credenciais do Portal do Cliente da Red Hat quando solicitado):

    # toolbox
    Trying to pull registry.redhat.io/rhel8/support-tools...
    ...
    Would you like to authenticate to registry: 'registry.redhat.io' and try again? [y/N] y
    Username: johndoe
    Password: *************
    Login Succeeded!
    Trying to pull registry.redhat.io/rhel8/support-tools...Getting image source signatures
    ...
    Storing signatures
    30e261462851238d38f4ef2afdaf55f1f8187775c5ca373b43e0f55722faaf97
    Spawning a container 'toolbox-root' with image 'registry.redhat.io/rhel8/support-tools'
    Detected RUN label in the container image. Using that as the default...
    command: podman run -it --name toolbox-root --privileged --ipc=host --net=host --pid=host -e HOST=/host -e NAME=toolbox-root -e IMAGE=registry.redhat.io/rhel8/support-tools:latest -v /run:/run -v /var/log:/var/log -v /etc/machine-id:/etc/machine-id -v /etc/localtime:/etc/localtime -v /:/host registry.redhat.io/rhel8/support-tools:latest
  3. Abra uma concha de bash para executar comandos dentro do contêiner:

    # bash-4.4#
  4. De dentro do container, o sistema de arquivo raiz no host está disponível no diretório /host. Os outros diretórios mostrados estão todos dentro do contêiner.

    # ls /
    bin   dev  home  lib	lost+found  mnt  proc  run   srv  tmp  var
    boot  etc  host  lib64	media	    opt  root  sbin  sys  usr
  5. Tente executar um comando dentro de seu contêiner. O comando sosreport permite que você gere informações sobre seu sistema para enviar ao suporte da Red Hat:

    bash-4.4# sosreport
    
    sosreport (version 3.6)
    This command will collect diagnostic and configuration information from
    this Red Hat Enterprise Linux system and installed applications.
    
    An archive containing the collected information will be generated in
    /host/var/tmp/sos.u82evisb and may be provided to a Red Hat support
    representative.
    ...
    Press ENTER to continue, or CTRL-C to quit.   <Press ENTER>
    ...
    Your sosreport has been generated and saved in:
      /host/var/tmp/sosreport-rhel81beta-12345678-2019-10-29-pmgjncg.tar.xz
    The checksum is: c4e1fd3ee45f78a17afb4e45a05842ed
    Please send this file to your support representative.

    Note que o comando sosreport salva o relatório para o anfitrião (/host/var/tmp/sosreport-<ID>).

  6. Instale um pacote de software dentro do recipiente, para adicionar ferramentas que ainda não estejam no recipiente. Por exemplo, para obter um núcleo de um processo em execução no host, instale os pacotes procps e gcore, use ps para obter o ID do processo de um daemon em execução, depois use gcore para obter um núcleo de um dump:

    bash-4.4# yum install procps gdb -y
    bash-4.4# ps -ef | grep chronyd
    994        809     1  0 Oct28 ?        00:00:00 /usr/sbin/chronyd
    bash-4.4# gcore -o /host/tmp/chronyd.core 809
    Missing separate debuginfo for target:/usr/sbin/chronyd
    Try: dnf --enablerepo='*debug*' install /usr/lib/debug/.build-id/96/0789a8a3bf28932b093e94b816be379f16a56a.debug
    ...
    Saved corefile /host/tmp/chronyd.core.809
    [Inferior 1 (process 809) detached]
  7. Para deixar o recipiente e voltar para o anfitrião, digite exit. O arquivo é salvo em /host/tmp/chronyd.core.809 e está disponível em /tmp/chronyd.core.809 no host.
  8. Para remover a caixa de ferramentas-root container, digite:

    # podman rm toolbox-root

Você pode alterar o registro, a imagem ou o nome do recipiente utilizado pela caixa de ferramentas, acrescentando o seguinte:

  • REGISTRY: Alterar o registro a partir do qual a imagem da caixa de ferramentas é retirada. Por exemplo REGISTRY=registry.example.com
  • IMAGE: Mude a imagem que é utilizada. Por exemplo, IMAGE=mysupport-tools
  • TOOLBOX_NAME: Alterar o nome atribuído ao recipiente em funcionamento. Por exemplo, TOOLBOX_NAME=mytoolbox

Na próxima vez que você executar toolbox, serão utilizados os novos valores do arquivo .toolboxrc.

6.1.1. Privilégios de abertura para o anfitrião

Quando você executa outros comandos de dentro do contêiner support-tools (ou de qualquer contêiner privilegiado), eles podem se comportar de forma diferente do que quando executados em um contêiner não-privilegiado. Embora sosreport possa dizer quando ele está rodando em um contêiner, outros comandos precisam ser ditos para agir no sistema hospedeiro (o diretório /host ). Aqui estão exemplos de características que podem ou não estar abertas para o host a partir de um contêiner:

  • Privileges: Um container privilegiado (--privileged) executa aplicações como usuário root no host por padrão. O contêiner tem esta capacidade porque roda com um contexto de segurança unconfined_t SELinux. Assim você pode, por exemplo, excluir arquivos e diretórios montados do host que são de propriedade do usuário root.
  • Process tables: Ao contrário de um contêiner normal que só vê os processos rodando dentro do contêiner, rodar um comando ps -e dentro de um contêiner privilegiado (com o conjunto --pid=host ) permite que você veja cada processo rodando no host. Você pode passar um ID de processo do host para comandos que rodam no contêiner privilegiado (por exemplo, kill <PID>). Com alguns comandos, entretanto, podem ocorrer problemas de permissões quando tentam acessar processos a partir do contêiner.
  • Network interfaces: Por padrão, um recipiente tem apenas uma interface de rede externa e uma interface de rede de loopback. Com interfaces de rede abertas para o host (--net=host), você pode acessar essas interfaces de rede diretamente de dentro do contêiner.
  • Inter-process communications: A instalação IPC no host é acessível de dentro do contêiner privilegiado. Você pode executar comandos como ipcs para ver informações sobre filas de mensagens ativas, segmentos de memória compartilhada e conjuntos de semáforos no host.