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 containersupport-toolsque 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ãoinstall,runeuninstall.
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-toolspara 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, outcpdump, 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
Certifique-se de que os pacotes
toolboxepodmanestejam 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
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
Abra uma concha de bash para executar comandos dentro do contêiner:
# bash-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
Tente executar um comando dentro de seu contêiner. O comando
sosreportpermite 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
sosreportsalva o relatório para o anfitrião (/host/var/tmp/sosreport-<ID>).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
procpsegcore, usepspara obter o ID do processo de um daemon em execução, depois usegcorepara 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]
-
Para deixar o recipiente e voltar para o anfitrião, digite
exit. O arquivo é salvo em/host/tmp/chronyd.core.809e está disponível em/tmp/chronyd.core.809no host. 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çaunconfined_tSELinux. 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 -edentro 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
ipcspara ver informações sobre filas de mensagens ativas, segmentos de memória compartilhada e conjuntos de semáforos no host.