Blog Escola Linux

  

Proxmox 4 e o Gerenciamento de Recursos em Contêineres LXC

Proxmox 4 e o Gerenciamento de Recursos em Contêineres LXC

Estamos aqui novamente falando sobre contêineres. No artigo anterior (https://www.escolalinux.com.br/blog/openvz-o-container-para-administradores-de-sistemas-2) falamos sobre o OpenVz, suas principais características, assim como os comandos de criação e gerenciamento dos contêineres. Até a versão 3.4 o gerenciador de ambientes virtuais Proxmox utilizava o OpenVz como ferramenta gestão dos contêineres, mas isto mudou no Proxmox 4. Nesta versão eles passaram a utilizar o LXC. Acompanhe!

O LXC

O LXC utiliza uma característica implementada no Kernel para criar e gerenciar contêineres. Como esta característica já está implementada no Kernel por padrão, não é necessário que seja aplicado qualquer patch para seu funcionamento. A Canonical estimula bastante seu uso, ele também já serviu de base para o badalado Docker (que atualmente não se utiliza mais do LXC).

Em virtude das características citadas acima, sua instalação é bem simples e conta com pacotes nas principais distribuições.

* Exemplo de instalação no Ubuntu:# sudo apt-get install lxc

Administração básica

Após instalado, partimos para a criação dos contêineres propriamente dito. Eles são criados a partir de templates. Os templates são as distribuições e versões de distribuições Linux disponíveis e podem ser listados no diretório /usr/share/lxc/templates.

* Exemplo de criação de um contêiner Debian com o nome ct-debian.

# lxc-create --template=debian --name=ct-debian

Depois de criado o contêiner, os comandos para administração básica são os seguintes;

* Iniciar um contêiner:

# lxc-start -n meu-container -d* Verificar status e listarcontêineres: # lxc-info -n meu-container# lxc-ls -f* Conectar no Shell do Container # lxc-console -n meu-container* Finalizar um contêiner # lxc-stop -n meu-container* Remover o contêiner: # lxc-destroy -n meu-conteiner

Os arquivos de configuração que devem ser observados são:

  • O arquivo de configuração geral:

# /etc/default/lxc

  • O arquivo de configurações de opções padrões para todos os contêineres:

# /etc/lxc/default.conf

Arquivo de configuração específico para cada maquina virtual:

# /var/lib/lxc/meu-container/config

Gerenciamento de recursos

Uma das grandes vantagens no uso dos contêineres é sua utilização em servidores na nuvem, um EC2 da Amazon ou qualquer outro servidor virtual. Pagamos por uma instância apenas e podemos utilizar vários serviços de forma isolada e independente, sem a necessidade de consumir outras instâncias virtuais. Mas, grandes vantagens também levam a grandes responsabilidades, e neste caso a grande responsabilidade é com o desempenho de vários contêineres executando sobre uma mesma instância virtual. Para divisão adequada dos recursos do hardware ou da instância virtual, o LXC trabalha com o conceito de Cgroups.

O Cgroup aloca recursos. Estes recursos de hardware podem ser divididos, aumentando a eficiência geral. Ele é dividido em Subsistemas ou controladores de recursos. Cada subsistema é responsável por controlar um conjunto de recursos.

No LXC podemos definir de duas maneiras estes limites dos subsistemas:

  • Diretamente no arquivo de configuração do contêiner, onde as alterações entraram em vigor após a reinicialização do mesmo.

Editando o arquivo de configuração e inserindo as linhas de limite de recurso conforme o modelo abaixo:

lxc.cgroup.. =

  • Por linha de comando, onde as definições de limites são ativadas instantaneamente porém não ficam salvas após o reinicio co contêiner.

Usando o comando lxc-cgroup conforme o modelo abaixo:

# lxc-cgroup -n .

No LXC basicamente vamos falar dos seguintes subsistemas e suas respectivas opções;

  • blkio: Este subsistema define limites de acesso de entrada/saída para e a partir de dispositivos de bloco tais como drives físicos (HD, etc)

Opções do blkio:

  • blkio.weight: Especifica a proporção relativa (weight) do acesso do bloco E/S disponível por padrão a um cgroup, na abrangência de 100 a 1000.

  • blkio.weight_device: Especifica a proporção relativa de acesso de E/S (weight) em dispositivos específicos disponíveis a um cgroup, na abrangência de 100 a 1000

Exemplo de uso com o comando lxc-cgroup:

# lxc-cgroup -n Deb7-02 blkio.weight 200

# lxc-cgroup -n Deb7 blkio.weight 900

Ou seja, o contêiner chamado Deb-7 terá uma maior prioridade no acesso ao disco em relação ao contêiner chamado Deb7-02.

  • cpu: este subsistema fornece acesso às tarefas de cgroups para o CPU.

Opções de cpu:

  • shares: Especifica uma parte relativa do tempo disponível da CPU para tarefas em um cgroup.

Onde:

1024 (padrão) = 50% de utilização

1524 = 60% de utilização

2048 = 67% de utilização

512 = 40% de utilização

Exemplo de uso com o comando lxc-cgroup:

# lxc-cgroup -n Deb7 cpu.shares 512

  • cpuset: Este subsistema atribui CPUs individuais, em sistemas multicores, e nós de memória para atribuir em um cgroup.

Opções de cpuset :

  • cpuset.cpus: Especifica as CPUs cujas tarefas deste cgroup possuem acesso. Exemplo 0-2,16, representa CPUs 0, 1, 2 e 16.

  • cpuset.mems: Especifica os nós de memória cujas tarefas neste cgroup possuem acesso. Exemplo: 0-2,16, representa nós de memória 0,1,2 e 16.

Exemplo de uso, adicionando a linha abaixo no arquivo de configuração do contêiner:

lxc.cgroup.cpuset.cpus = 0-3

  • memory: Este subsistema define limites no uso de memória pelas tarefas em um cgroup.

Opções de memory:

  • memory.limit_in_bytes: Define a quantia máxima de memória de sistema.

  • memory.memsw.limit_in_bytes: Define a quantia máxima para a soma de memória e swap.

Exemplo de uso, adicionando as linhas abaixo no arquivo de configuração do contêiner:

lxc.cgroup.memory.limit_in_bytes = 500M

lxc.cgroup.memory.memsw.limit_in_bytes = 1G

Monitorando os recursos

Alguns subsistemas foram criados com a intenção de exibir informações estatísticas de um recurso e podem ser acessados também através do comando lxc-cgroup. Além disso, o lxc-cgroup apontando para um subsistema, sem parâmetros exibe a configuração atual do subsistema.

O comando abaixo exibe a atual configuração usada no contêiner Deb7 para o subsistema cpu.shares

# lxc-cgroup -n Deb7 cpu.shares

Informações de utilização de CPU podem ser vistas com os comandos:

# lxc-cgroup -n meu-container cpuacct.stat

# lxc-cgroup -n meu-container cpuacct.usage

Informações de consumo de memória podem ser vistas com o comando;

# lxc-cgroup -n meu-container memory.stat

Conclusão

Utilizando corretamente os recursos de cgroup, podemos otimizar o uso de instâncias virtuais em um ambiente de nuvem ou mesmo em equipamentos dedicados para isso, rodando uma maior quantidade de contêineres com um melhor controle de performance e estabelecimento de prioridades de uso de recurso conforme o tipo de serviço prestado. Um contêiner de banco de dados terá uma prioridade maior de leitura/escrita de disco que outro contêiner com a função de serviço web por exemplo.

Como falamos no início do texto, o Proxmox 4 trabalha com o LXC e pode ser gerenciado por uma agradável interface web, inclusive nas configurações de recursos dos contêineres, o que pode ser de grande ajuda quando trabalhamos com uma estrutura complexa com vários hosts e um número ainda maior de contêineres.

Fontes:

** Introdução LXC: https://www.flockport.com/lxc-guide/

** Aplicação no LXC: https://www.flockport.com/lxc-advanced-guide/

** cgroup em PT-br: https://access.redhat.com/documentation/pt-BR/Red_Hat_Enterprise_Linux/6/html/Resource_Management_Guide/ch01.html

** Doc de introdução: https://baobabmaster.unige.ch/slurmdoc/cgroups.html

** cgroups por Oracle: https://docs.oracle.com/cd/E37670_01/E37355/html/ol_about_cgroups.html

** Informação dos State Objects: https://access.redhat.com/documentation/pt-BR/Red_Hat_Enterprise_Linux/6/html/Resource_Management_Guide/ch-Subsystems_and_Tunable_Parameters.html

** Informações de métrica: https://blog.docker.com/2013/10/gathering-lxc-docker-containers-metrics/

Gostou do artigo? Confira outros artigos como este em nosso site e fique por dentro do mercado de TI!

Curso Proxmox: Gerência de Máquinas Virtuais

E-book 101 dicas para usar o Linux como um Profissional!

 

Benefícios da mensagem instantânea no ambiente cor...
Como otimizar o desempenho de seu servidor Linux?

Artigos Relacionados

Google Analytics Alternative