Virtualização

O que é LXC?

Também conhecido como: Linux Containers
Definição

LXC is Linux-native containerisation that isolates processes with namespaces and cgroups while sharing the host kernel. LXC is excellent inside a trust boundary you already own and weak as a multi-tenant boundary, because a kernel escape affects every container on the host.

Porque é que LXC importa

LXC é excelente dentro de um limite de confiança que já possui e fraco como limite multi-inquilino, porque uma fuga do kernel afeta todos os contentores no anfitrião.

LXC na prática

Com LXC obtém um contentor leve que partilha o kernel do hospedeiro. Gere-o através do conjunto de comandos lxc ou da API, monitorizando as estatísticas do cgroup para pressão de CPU e memória. A afinação consiste sobretudo em limites de namespace e cgroup: fixar processos, definir tetos de memória. O custo de errar é a exposição: uma fuga no kernel compromete todos os contentores no hospedeiro, por isso trata o hospedeiro como um único domínio de confiança e planeia a failover ao nível do hospedeiro, não por contentor.

O que se costuma entender mal sobre LXC

As pessoas tratam o LXC como um limite de segurança equivalente ao KVM. Não é: os contentores partilham um kernel, portanto uma falha nesse kernel pode sair de qualquer contentor. A correção é que o LXC serve para isolamento dentro de um limite de confiança que possui, não para alojamento multi-inquilino onde os inquilinos podem ser hostis.

LXC — perguntas frequentes

O LXC é o mesmo que o Docker?

Não. O Docker baseia-se em primitivas de contentores como o LXC, mas adiciona gestão de imagens, camadas e orquestração. O LXC é mais parecido com uma VM leve: executa uma distribuição completa nele e gere-o com systemd ou init diretamente. O Docker trata de empacotar aplicações; o LXC trata de virtualizar sistemas.

Posso executar LXC com um kernel personalizado?

Isso depende do hospedeiro. Alguns fornecedores, como a OnionVPS, dão root completo e permitem kernels personalizados, mas com LXC partilha o kernel do hospedeiro, portanto um kernel personalizado não é para o próprio contentor. Para isso usaria KVM. O LXC está ligado à versão e configuração do kernel que o hospedeiro fornece.

Mais de virtualização

KVM
KVM é virtualização completa de hardware integrada no kernel Linux, dando a cada convidado o seu próprio kernel e isolamento imposto por hardware dos outros inquilinos.
OpenVZ
OpenVZ é virtualização baseada em contentores em que cada instância partilha o kernel do anfitrião, pelo que os convidados não podem carregar módulos do kernel nem executar um sistema operativo diferente.
Hipervisor
Um hipervisor é a camada de software que cria e executa máquinas virtuais, alocando CPU física, memória e I/O entre elas.
Virtualização aninhada
A virtualização aninhada permite que uma máquina virtual execute, ela própria, máquinas virtuais, expondo as extensões de virtualização do processador ao convidado.
vCPU
Uma vCPU é um processador virtual apresentado a um convidado, suportado por tempo de agendamento num núcleo físico ou thread.
cloud-init
cloud-init é o mecanismo padrão para configurar uma máquina virtual no primeiro arranque, usando metadados fornecidos pela plataforma.