Eu encontrei o problema. Parece que minhas VMs resultantes continham um servidor de nomes adicional que foi introduzido automaticamente pelo qemu. Isso ocorre quando uma VM é criada e um dispositivo de rede não é especificado para ela. Da documentação do Proxmox para qm
:
net[n]: [model=] [,bridge=] [,firewall=<1|0>] [,link_down=<1|0>] [,macaddr=] [,queues=] [,rate=] [,tag=] [,trunks=] [,=]
Specify network devices.bridge=
Bridge to attach the network device to. The Proxmox VE standard bridge is called vmbr0.If you do not specify a bridge, we create a kvm user (NATed) network device, which provides DHCP and DNS services. The following addresses are used:
10.0.2.2 Gateway
10.0.2.3 DNS Server
10.0.2.4 SMB Server
The DHCP server assign addresses to the guest starting from 10.0.2.15.
Meu procedimento foi o seguinte:
1) Crie uma VM usando a API Proxmox através do Módulo Ansible Proxmox_KVM.
2) Clone quatro VMs Kubernetes desta VM.
3 ) Configure cada uma das VMs do Kubernetes por sua vez.
Durante o Passo 1) , declarei uma bridge. No entanto, em Passo 2) eu não, como é um simples qm clone
. Que, de acordo com a documentação, não suporta um sinalizador net[n]
a ser passado. Foi nesse ponto que o servidor de nomes aleatório foi introduzido. Então, quando a Etapa 3) apareceu, e eu configurei um servidor de nomes através de cloud-init
, ele foi anexado ao meu arquivo /etc/resolv.conf
como o segundo servidor de nomes.
No momento, estou refazendo meu Playbook para tentar contornar isso executando a seguinte tarefa entre Etapa 1) e Etapa 2) :
- name: Setting the name server for the template to ensure that QEMU doesn't automatically configure the clones to use 10.0.2.3.
shell: >
qm set {{ proxmox_template_id }}
--ipconfig0 gw={{ k8s_master_gw }},ip={{ k8s_master_ip }}{{ k8s_master_sn }}
--nameserver {{ k8s_master_ns }}
--searchdomain {{ k8s_master_sd }}
Cruzando meus dedos, isso resolverá o problema.
----- EDITAR -----
Isso não aconteceu. E não parece que é possível provisionar um adaptador de rede ao fazer um qm clone
. Significando que terei que retrabalhar meu manual de jogo para provisionar quatro instâncias individuais em vez de clonar a partir de um modelo.
----- EDIT 2 -----
Também não parece que o módulo Proxmox_kvm Ansible de baixa qualidade suporta material relacionado à API do cloudinit. Significa que terei que fazer tudo por meio de comandos do shell e aproveitar qm
. : (
----- EDITAR 3 -----
Parece que o servidor de nomes está na IMAGEM BASE POR PADRÃO. WTF CENTOS?
root@hypervisor-1:/rpool/data# modprobe nbd max_part=8
root@hypervisor-1:/rpool/data# qemu-nbd --connect=/dev/nbd0 /tmp/CentOS7.qcow2c
root@hypervisor-1:/rpool/data# fdisk -l /dev/nbd0
Disk /dev/nbd0: 8 GiB, 8589934592 bytes, 16777216 sectors
Units: sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disklabel type: dos
Disk identifier: 0x000b2638
Device Boot Start End Sectors Size Id Type
/dev/nbd0p1 * 2048 16777215 16775168 8G 83 Linux
root@hypervisor-1:/rpool/data# mount /dev/nbd0p1 /mnt/tmp
root@hypervisor-1:/rpool/data# cd /mnt/tmp
root@hypervisor-1:/mnt/tmp# ls
bin boot dev etc home lib lib64 media mnt opt proc root run sbin srv sys tmp usr var
root@hypervisor-1:/mnt/tmp# cat etc/resolv.conf
# Generated by NetworkManager
nameserver 10.0.2.3