For a testing environment, I want to connect multiple VMs using DHCP with their hostnames as DNS entrys. The troubleshooting shows that my DNS/DHCP works. But the VM got registered using ubuntu
as hostname instead of my own (k8sm
in this example):
root@k8sm:~# ping k8sm -c1
PING k8sm (192.168.2.89) 56(84) bytes of data.
64 bytes from ubuntu.k8s.home (192.168.2.89): icmp_seq=1 ttl=64 time=0.019 ms
Using my k8sm
hostname, I didn't get an IP when trying dig +short k8sm.k8s.home @192.168.2.2
(where .2.2 is my DNS server).
Cloudinit user-data
hostname: ${hostname}
fqdn: ${hostname}.k8s.home
Which is called from my Terraform config file here:
data "template_file" "k8sm-cloudinit-data" {
template = "${file("${path.module}/cloudinit/user-data.cfg")}"
vars = {
hostname = "k8sm"
}
}
According to the logs
root@k8sm:~# grep hostname /var/log/syslog
Jun 6 19:17:09 k8sm systemd-resolved[604]: Using system hostname 'ubuntu'.
Jun 6 19:17:09 k8sm systemd-networkd[581]: Not connected to system bus, not setting hostname.
Jun 6 19:17:09 k8sm systemd-resolved[604]: System hostname changed to 'k8sm'.
Jun 6 19:17:09 k8sm kernel: [ 3.526063] systemd[1]: Set hostname to <ubuntu>.
Jun 6 19:17:09 k8sm dbus-daemon[781]: [system] Activating via systemd: service name='org.freedesktop.hostname1' unit='dbus-org.freedesktop.hostname1.service' requested by ':1.0' (uid=100 pid=581 comm="/lib/systemd/systemd-networkd " label="unconfined")
Jun 6 19:17:09 k8sm dbus-daemon[781]: [system] Successfully activated service 'org.freedesktop.hostname1'
Jun 6 19:17:09 k8sm systemd-hostnamed[844]: Changed host name to 'ubuntu'
it seems that my k8sm
hostname is applyed, but got overriden by systemd. Why is this happen and what need to be done to set the hostname correctly for DHCP? The target is to reach the machine using k8sm.k8s.home
in this example.
hostnamectl
shows me the correct hostname in the VM
root@k8sm:~# hostnamectl status
Static hostname: k8sm.k8s.home
Icon name: computer-vm
Chassis: vm
Machine ID: 001637a6a5e0410f923cb082af1953d2
Boot ID: 853577fa58844d8e900c107cfb0c1dde
Virtualization: kvm
Operating System: Ubuntu 18.04.2 LTS
Kernel: Linux 4.15.0-50-generic
Architecture: x86-64
Both host and VM runs 18.04 LTS with KVM 2.11.1.
Another approach I tried
preserve_hostname: true
runcmd:
- hostnamectl set-hostname k8sm
- hostnamectl set-hostname k8sm --static
The idea was to skip cloudinits hostname setting with preserve_hostname
and set it manually (later), but the result is the same: VM got registered as ubuntu
instead of its new hostname.