OpenVz – O Container para administradores de sistemas

Como assim contêiner para administradores de sistemas? Os outros contêineres não são? Bem, a ferramenta de contêiner da moda é o Docker, e agora também o Rocket já que a CoreOS esta encabeçando isto. Sou administrador de sistemas e por isso gosto de conectar por ssh em meus servidores, em alguns momentos “puxar” a console, seja ela virtualizada ou conteinerizada. Não gosto de deixar algo que esta funcionando lá no canto dele, sem poder ter interação e não me sinto confortável se a interação é dificultada ou prejudicada.

Por estas particularíssimas razões, não me senti a vontade com o Docker e sua estrutura de camadas que lembram cebolas. Não me entenda mal, o Docker é muito interessante, mas parece que todas as suas vantagens, sua flexibilidade, sua capacidade de padronização de ambientes foram pensadas e projetadas para e por desenvolvedores. Por isso ainda prefiro utilizar soluções de contêiner “de uma geração anterior” que me permitem conectar ao cliente de maneira mais ágil como o LXC e o OpenVz.

Sem querer entrar nos meandres do incrível mundo da virtualização, pretendo falar sobre o Openvz.

Openvz

Mas como é e como funciona?

Openvz não é um virtualizador mas sim uma conteinerização parecida com o ‘FreeBSD Jails’ . OpenVZ usa um único kernel do Linux (com um patch) podendo executar somente clientes Linux. Todas as maquinas clientes funcionam sob a mesma versão de kernel que o host físico. O OpenVZ usa um sistema de arquivos comum para que cada ambiente virtual, é apenas um diretório de arquivos que é isolado usando chroot. Uma máquina virtual pode ser clonada apenas copiando os arquivos de um diretório para outro, criando um arquivo de configuração para a máquina virtual e iniciando-a.

Virtualização e Isolamento

Cada contêiner é uma entidade separada, e comporta-se em grande parte como um servidor físico faria. Cada contêiner tem seus:

  • Arquivos: Bibliotecas de sistemas, aplicações, /proc e /sys virtualizados, locks virtualizados, etc.
  • Usuários e grupos: Cada contêiner tem seu próprio usuário root, assim como outros usuários e grupos.
  • Árvores de processos: Os contêineres apenas visualizam seus próprios processos (iniciando por init). PIDs são virtualizados, de modo que o PID init é 1, como deve ser.
  • Rede: Dispositivo de rede virtualizado, que permite que o contêiner tenha seus próprios endereços de IP, bem como configurações de netfilter (iptables), e regras de roteamento.

Gerenciamento de Recursos

Uma das vantagens de uso do OpenVz é que mesmo ele sendo um simples gerenciador de contêiner, permite configurações bem otimizadas de divisão de carga de processamento e I/O entre os contêineres. O gerenciamento de recursos OpenVZ consiste em três componentes: Quota de disco em dois níveis, Planejamento “equitativo” de CPU e ‘user beancounter’. Estes recursos podem ser ajustados com o contêiner em execução sem a necessidade de reboot.

Checkpointing e Live Migration

É possível mover contêiner de um servidor físico para outro sem parar o contêiner. O processo é conhecido como checkpointing: o contêiner é congelado e seu estado é salvo em arquivos no disco. Este arquivo pode ser transferido para outras máquinas e contêineres e podem ser descongelados (restaurados) lá. O delay é de alguns segundos.

Fazendo Acontecer

O OpenVz está integrado a uma distribuição paga chamada Virtuozzo com uma interface de gerenciamento gráfica. Existem alguns painéis Web que também permitem o uso gráfico do OpenVz. A ferramenta padrão de gerenciamento do OpenVz é OpenSource e funciona por linha de comando, porém aconselho seu uso através da ferramenta Proxmox que é uma distribuição baseada no Debian com pacotes que proveem virtualização KVM e conteinerização com OpenVz. O Proxmox conta com uma interface Web de gerenciamento que permite a manutenção e configuração dos contêineres de maneira rápida, simples e eficiente. Se você quer se aprofundar na ferramenta Proxmox, pode fazer um curso on-line na Escola Linux. Neste artigo pretendo demonstrar como instalar e configurar um contêiner utilizando OpenVz por Linha de comando. O processo de instalação do OpenVZ no Debian 7 consiste em:

  • Ajustar os repositórios para incluir pacotes OpenVZ
  • Instalar o Kernel OpenVZ
  • Instalar os aplicativos de gerenciamento dos contêineres
  • Ajustar parametrizações de Kernel em sysctl

Não vou me estender em um passo-a-passo da instalação já que pode ser obtido em detalhes no endereço: https://openvz.org/Installation_on_Debian.

O OpenVZ tem os arquivos de configuração de seu serviço básico e também as configurações específicas de cada contêiner.

* Configurações gerais do OpenVZ: /etc/vz/vz.conf

* Diretório de configurações dos contêineres: /etc/vz/conf

Após instalado o OpenVZ, podemos criar os contêineres e gerenciá-los.

Para criar um contêiner:

# vzctl create CTID –ostemplate OSTEMP

Onde: CTID – ID do contêiner, pode ser 100 por exemplo e OSTEMP – Nome do template, pode ser por exemplo: ubuntu-15.04-x86_64-minimal

Os templates podem ser consultados e baixados diretamente para o diretório /var/lib/vz/template/cache/ do host, a partir do site: http://openvz.org/Download/template/precreated.

Para ajustar IP e DNS do contêiner:

# vzctl set CTID –ipadd a.b.c.d –save

# vzctl set CTID –nameserver a.b.c.d –save

Onde: a.b.c.d é o IP do contêiner e do DNS server respectivamente.

Uma vez feita a instalação e configuração básica, o Contêiner pode ser iniciado e utilizado.

Alguns comandos importantes de administração do OpenVZ:

vzctl: Programa avançado, utilizado para gerenciar contêineres.

Programa do OpenVZ. Alguns exemplos:

# vzctl enter CTID: Usado para conectar na console do contêiner

# vzctl enter CTID –exec “apt-get install vim && logout”: Instala o aplicativo no contêiner e sai.

# vzctl start CTID: Iniciar Contêiner

# vzctl stop CTID: Stop contêiner

# vzctl status CTID: Status contêiner

Vzlist: Lista os contêineres em execução.

Comandos específicos de backup:

# vzdump: Utilitário de backup para maquina virtual.

# vzrestore: Utilitário de restauração de backup OpenVz.

Observação sobre tipos de rede:

O OpenVZ trabalha com basicamente dois tipos de configuração de rede: Venet e Veth

  • Tipo Roteamento (Venet):Virtual Network. O próprio VZ gerencia. Tipo padrão recomendado.
  • Tipo bridge (veth): Virtual Ethernet. Parecido com o funcionamento de rede de uma VM clássica. Placa de rede independente. Precisa ser configurada no S.O. do contêiner.

Espero que com esta introdução, você se anime a testar e utilizar o OpenVz principalmente quando não for necessário a utilização da virtualização clássica, para ganhar principalmente com a otimização e recursos de hardware.