Containers LXC (Linux containers) com o LXD no CentOS 7
Apresentando o LXC/LXD
Software livre sempre nos traz projetos maravilhosos. Há mais de 10 anos usando máquinas virtuais descobri muitos meses atrás as vantagens dos contêineres. Não pretendo aqui fazer uma análise de um ou de outro, cada um tem suas aplicações e vantagens.
O LXC nos traz uma versatilidade enorme ao podermos “fatiar” um sistema Linux em vários sistemas isolados bem rapidamente. Ele é um método de virtualização que roda no nível do sistema operacional e elimina a sobrecarga de rodar um kernel para cada sistema Linux, como é feito no caso da virtualização. Quer saber tudo sobre LXC? Veja aqui.
Já LXD é uma adição incrível ao LXC. O LXD roda sobre o LXC e traz uma versatilidade enorme ao gerenciamento dos contêineres. Ele é basicamente uma alternativa às ferramentas do LXC e um sistema de distribuição de templates pré-criados de várias distribuições Linux. Precisa de um CentOS 7 rapidinho? Sem problemas! Em segundos ele estará rodando e acessível graças ao LXC/LXD.
Hora de colocar tudo para funcionar
Feitas as apresentações vamos colocar a mão na massa (ou no terminal, se preferir :P). Para esta tarefa parti de um CentOS 7 minimal.
Primeiro, tenha certeza que seu Linux esteja atualizando rodando:
1yum update
Após isso vamos habilitar o repositório Epel e o Copr:
1yum install epel-release yum-plugin-copr -y
Agora prosseguimos com a instalação:
1yum copr enable ngompa/snapcore-el7
2yum install snapd
Precisamos ativar a inicialização automática do serviço
1systemctl enable --now snapd.socket
E habilitar alguns parâmetros na inicialização e argumento do kernel
1grubby --args="user_namespace.enable=1" --update-kernel="$(grubby --default-kernel)"
2grubby --args="namespace.unpriv_enable=1" --update-kernel="$(grubby --default-kernel)"
3sh -c 'echo "user.max_user_namespaces=3883" > /etc/sysctl.d/99-userns.conf'
Nesse ponto efetue um reboot do seu servidor Linux e após logar-se rode os comandos abaixo:
1snap search lxd
2snap install lxd
3ln -s /var/lib/snapd/snap /snap
Após o comando abaixo veja se o resultado é similar a imagem mostrada:
1snap list
Inicie o daemon do LXD.
1systemctl start snap.lxd.daemon
Crie agora um grupo chamado lxd e se inclua nele. Aqui, caso não esteja executando como root e usando o sudo inclua seu usuário nesse novo grupo.
1newgrp lxd
2usermod -a -G lxd root
3id
4exit
Execute o comando abaixo e tenha certeza que nenhum erro é retornado, tendo a saída igual a mostrada na imagem:
1lxc list
Com tudo rodando ok, vamos inicializar o LXD e setar algumas configurações necessárias:
1lxd init
Em “Storage backend” escolhi LVM, mas você pode escolher btrfs ou dir, por exemplo. Mais detalhes sobre cada um nesse link.
Por fim, lance um novo contêiner com o comando
1lxc launch images:centos/7/amd64 centos-teste
Para acessar o terminal do contêiner:
1lxc exec centos-teste bash
O contêiner já “fala” pela bridge criada automaticamente pelo LXD com o mundo exterior, mas o mundo exterior não fala com o contêiner. Para isso é necessário criar regras de NAT no firewall do Linux, mas isso fica pra um outro artigo.