Os contêineres não podem carregar módulos enquanto compartilham o kernel com a máquina host. Depois de carregar o módulo no seu nó de hardware, ele ficará disponível em todos os contêineres. A mesma regra é para a virtualização do OpenVZ.
Estou tentando executar um keepalive em um contêiner lxc não privilegiado, mas recebo o seguinte erro no syslog.
May 8 10:56:01 dnsmasq Keepalived_vrrp[11025]: Initializing ipvs 2.6
May 8 10:56:01 dnsmasq modprobe: ERROR: ../libkmod/libkmod.c:556 kmod_search_moddep() could not open moddep file '/lib/modules/4.4.0-22-generic/modules.dep.bin'
May 8 10:56:01 dnsmasq Keepalived_vrrp[11025]: IPVS: Can't initialize ipvs: No space left on device
O que estou perdendo? Tentei carregar o módulo do kernel ip_vs no host, mas sem sucesso.
Os contêineres não podem carregar módulos enquanto compartilham o kernel com a máquina host. Depois de carregar o módulo no seu nó de hardware, ele ficará disponível em todos os contêineres. A mesma regra é para a virtualização do OpenVZ.
Se você estiver executando o LXD, precisará permitir que os módulos do Kernel do Linux sejam carregados pelo contêiner LXC.
lxc config set CONTAINERNAME linux.kernel_modules ip_vs_wrr,ip_vs_wlc,ip_vs_sh,ip_vs_sed,ip_vs_rr,ip_vs_nq,ip_vs_lc,ip_vs_lblcr,ip_vs_lblc,ip_vs_ftp,nf_nat,ip_vs_dh,ip_vs,nf_conntrack,libcrc32c
Dentro do contêiner, você precisa definir a opção -P
para continuar usando para usar o keepalived corretamente.
Para fazer isso no Ubuntu 16.04, você pode editar /etc/defaults/keepalived
e definir a seguinte linha:
DAEMON_ARGS="-P"
Se você usar o liblxc se você carregar o módulo do kernel no container do host, você deve ser capaz de carregá-lo dentro do container LXC.