Para melhorar a visibilidade de recursos de contêiner, o Alibaba Cloud Linux 2 (a partir da versão do kernel 4.19.91-22.2.al7) e o Alibaba Cloud Linux 3 (a partir da versão do kernel 5.10.46-7.al8) oferecem interfaces de kernel para o recurso de visualização de recursos de contêiner. Este tópico descreve essas interfaces e fornece exemplos de uso.
Informações básicas
Por padrão, o recurso de visualização de recursos de contêiner do Alibaba Cloud Linux vem desativado. Ao ativar esse recurso e executar comandos como top e free dentro de um contêiner para ler dados das interfaces listadas abaixo, o sistema retorna as informações de recursos do próprio contêiner, em vez dos dados da instância do Elastic Compute Service (ECS) que o hospeda:
/proc/cpuinfo
/proc/meminfo
/sys/devices/system/cpu/online
Interfaces
Interface | Descrição |
/proc/sys/kernel/rich_container_enable | Defina se o recurso de visualização de recursos de contêiner deve ser ativado. Valores válidos:
Valor padrão: 0. |
/proc/sys/kernel/rich_container_source | Origem de dados da interface cgroup. Valores válidos:
Valor padrão: 0. |
/proc/sys/kernel/rich_container_cpuinfo_source | Quantidade de CPUs exibidas nas interfaces /proc/cpuinfo e /sys/devices/system/cpu/online. Valores válidos:
Valor padrão: 0. |
/proc/sys/kernel/rich_container_cpuinfo_sharesbase | Utilize esta interface como parte da fórmula para obter o valor final quando a interface /proc/sys/kernel/rich_container_cpuinfo_source estiver definida como 2. O valor precisa ser um número inteiro maior ou igual a 2. Valor padrão: 1024. |
Exemplos
Nos exemplos a seguir, considera-se uma instância Linux com Docker implantado e um contêiner criado com 1 GB de memória.
Com o recurso de visualização de recursos de contêiner desativado, a interface /proc/sys/kernel/rich_container_enable apresenta valor 0. Ao executar o comando free -m dentro do contêiner, o sistema exibe as informações de recursos da instância Linux hospedeira, conforme mostra a figura a seguir.

Ao executar o comando echo 1 > /proc/sys/kernel/rich_container_enable na instância Linux para ativar o recurso de visualização de recursos de contêiner e, em seguida, executar o comando free -m dentro do contêiner, o sistema passa a exibir as informações de recursos do próprio contêiner, como ilustra a figura abaixo.

Cenários especiais
Geralmente, os valores padrão das interfaces atendem aos requisitos de negócio após a ativação do recurso de visualização de recursos de contêiner. No entanto, observe as configurações de interface nos cenários descritos a seguir:
Em pods sem compartilhamento de namespace de ID de processo (PID), cada contêiner opera com um namespace PID independente. Se você utilizar o comando systemd para iniciar um contêiner privilegiado e o processo desse contêiner for o Processo 1, a tarefa de coleta de dados de monitoramento será executada em um cgroup filho, e não no cgroup raiz do contêiner.
Por exemplo, ao fazer login no contêiner usando um par de chaves SSH e executar o comando cat /proc/cpuinfo, uma das situações abaixo pode ocorrer:
Caso a interface /proc/sys/kernel/rich_container_source esteja definida como 0 durante a execução do comando, o ponteiro atual estará no cgroup filho criado pelo sshd.service dentro do contêiner. Nessa situação, o sistema retorna dados incorretos.
Se você executar o comando echo 1 > /proc/sys/kernel/rich_container_source, o cgroup onde reside o child reaper será usado como origem de dados. Nesse caso, o sistema retorna dados válidos.