Derzeit läuft mein Kubernetescluster in einem Satz von VMs, auf denen Rancher OS läuft. Rancher OS hat die angenehme Eigenschaft, daß es sich mit Cloud-Init einstellen läßt, so daß die gesamte Konfiguration außerhalb der VM in einer Datei aufbewahrt werden kann.

Cloud-Init zu verwenden, um Rancher OS zu konfigurieren, ist nicht schwer. Zuerst machen wir uns einen Ordner mit dem richtigen Namen (nämlich cloud-init/openstack/latest) und erstellen darin eine Datei namens meta_data.json:

/vm/kubeia-master-2$ cat cloud-init/openstack/latest/meta_data.json
{
         "dsmode": "local",
         "network_config": {},
         "hostname": "kubeia-master-2"
}

Dann können wir die Datei mit der eigentlichen Konfiguration anlegen.  Sie ist im YAML-Format und heißt user_data:

/vm/kubeia-master-2$ cat cloud-init/openstack/latest/user_data
#cloud-config
rancher:
   resize_device: /dev/vda
   system_docker:
     storage_driver: overlay2
   docker:
     storage_driver: overlay2
   network:
     dns:
       nameservers:
         - 10.1.1.1
         - 2a01:4f8:222:244::1:1:1
       search:
         - local
     interfaces:
       eth0:
         addresses:
           - 10.1.1.20/22
           - 2a01:4f8:222:244::1:1:20/110
         gateway: 10.1.1.1
         gateway_ipv6: 2a01:4f8:222:244::1:1:1
         dhcp: false
   services:
     user-volumes:
       volumes:
         - /home:/home
         - /opt:/opt
         - /var/lib/kubelet:/var/lib/kubelet
         - /var/lib/etcd:/var/lib/etcd
         - /etc/kubernetes:/etc/kubernetes
   sysctl:
     vm.max_map_count: 262144
 ssh_authorized_keys:
   - ssh-ed25519 ... mulk@ilmenblatt
   - ssh-ed25519 ... rancher@kubeia-master-2

Die Verzeichnisstruktur mit den beiden Dateien packen wir ein ISO-Abbild mit dem Namen „config-2“. genisoimage eignet sich dafür gut:

/vm/kubeia-master-2$ genisoimage -o cloud-init.iso -V config-2 -r -J cloud-init

In unserer VM binden wir die ISO-Datei als CD-Laufwerk ein (hier als Beispiel in Form einer Konfigurationsdatei für vm-bhyve):

/vm/kubeia-master-2$ cat kubeia-master-2.conf

# ... some detail omitted ...

disk0_type="virtio-blk"
disk0_name="disk0"
disk0_dev="sparse-zvol"
disk1_type="ahci-cd"
disk1_name="/vm/kubeia-master-2/cloud-init.iso"
disk1_dev="custom"

# ... some detail omitted ...

loader="grub"
grub_install0="linux /boot/vmlinuz-4.9.80-rancher rancheros-v1.3.0 console=ttyS0 rancher.autologin=ttyS0 printk.devkmsg=on panic=10"
grub_install1="initrd /boot/initrd-v1.3.0"
grub_run0="linux /boot/vmlinuz-4.9.80-rancher rancheros-v1.3.0 printk.devkmsg=on console=ttyS0 rancher.autologin=ttyS0 rancher.state.dev=LABEL=RANCHER_STATE rancher.state.wait panic=10 "
grub_run1="initrd /boot/initrd-v1.3.0"

Und das sollte es tun.