I boot the rancher.iso with a persistent RANCHER_STATE drive. I want to have the state saved between boots but not images, they should be pulled every time. Would it be possible to fex mount the images.tar on tmpfs during boot?
I’m not really sure what you mean - most of the state I have is in containers - and those are tied to the image - re-pulling the image means recreating the container.
So solutions to your request may be specific to what you’re doing
I thought that if an image is missing when a container starts, then it is pulled from the repository. Are you saying that the container would just fail to start?
no, I’m not saying that - and now I’m even less clear what you’re asking about.
can you give us more information?
Lets say I have a host with plenty of ram but no writable disk storage. I could still boot the rancher.iso, do some configurations like setting static ip, hostname, dns etc. I could even start up some containers.
Now if I would like to preserve those kilobytes of configuration to a very small persistent disk storage? No, that just isn’t possible because, for some reason i can not understand, along with the kilobytes of configuration I have to store hundreds of megabytes of image files. Image files that don’t contain any system unique information and which could easily be restored from another persistent storage, that is the repository.
So I’m just asking, is there a way to preserve all host unique configuration between boots and let the redundant docker images stay in their repositories?
I wonder if what you really need, is a cloud-config.yml that contains the small amount of cfg info?
I there a way to pass a cloud-config when booting the rancher.iso?
I’ve tried to create a config-drive to pass cloud-config when booting rancheros.iso without persistence.
I created the config-drive by booting a Gparted iso and execute following:
mkfs.vfat -n config-2 -I /dev/sda mkdir -p /media/config-drive mount /dev/sda /media/config-drive mkdir -p /media/config-drive/openstack/latest cp cloud-config.yml /media/config-drive/openstack/latest/user_data umount /media/config-drive
The user_data file:
#cloud-config hostname: test
Then I modified the rancheros.iso (v0.7.1) kernel parameters in /boot/isolinux/isolinux.cfg:
default rancheros label rancheros kernel /boot/vmlinuz initrd /boot/initrd append quiet rancher.autologin=tty1 rancher.autologin=ttyS0 rancher.password=test rancher.cloud_init.datasources=[configdrive:/media/config-2]
But when I boot the modified rancheros.iso the hostname is still rancher and /media/config-2 is not mounted.
Have I done anything wrong or is the rancher.cloud_init.datasources kernel parameter simply not working with the rancheros.iso? Please help.
I’ve also tried to copy /openstack/latest/user_data to the iso and labeling it config-2 but the config wasn’t read then either.
There’s no need to modify the ISO for a config-drive. RancherOS will automatically use it if it’s detected during boot.
Our test script (https://github.com/rancher/os/blob/master/scripts/run#L163) is probably the best resource to look at how this is done. We don’t have documentation on this unfortunately. It is fully compatible with OpenStack config-drive so you could probably find docs on that elsewhere.
I’ve followed these instructions:
But as I said, the config-drive isn’t detected when booting rancher.iso.
Should I report it as a bug?
Nevermind, it works. It seems that the user_data file must not end with an empty line.
that doesn’t sound very friendly - would you be interested in filing a bug at https://github.com/rancher/os ?
Now I’m unable to reproduce the error. Guess it wasn’t the new line after all.
Using the boot iso as a config-drive works fine.
But using a fat partition as a config-drive does not work. During boot I get:
FAT-fs (sda): IO charset iso8859-1 not found
I’m able to mount the fat partition at the console by using the iocharset=utf8 mount option but how can I make it mount during boot?
If only rancheros.iso could read a fat formatted config-drive then I wouldn’t need to edit the iso at all. Changing RancherOS version on the server would be effortless. Should I file a bug?
This is already mentioned in issue #1217:
Seems kernel/fs/fat/vfat.ko, kernel/fs/fat/fat.ko, kernel/fs/fat/vfat.ko and kernel/fs/nls/nls_cp437.ko are missing in 4.4.19-rancher kernel
Until fat booting is fixed in RancherOS, this is my semi-persistent setup:
/openstack/latest/user_data on rancheros.iso (labeled config-2):
#!/bin/sh mkdir -p /home/rancher/conf mount -t ext4 /dev/disk/by-label/conf /home/rancher/conf chmod 7700 /home/rancher/conf touch /home/rancher/conf/cloud-config.yml chmod 7600 /home/rancher/conf/cloud-config.yml touch /home/rancher/conf/rc.local chmod 7700 /home/rancher/conf/rc.local touch /etc/rc.local mount -o bind /home/rancher/conf/rc.local /etc/rc.local mkdir -p /var/lib/rancher/state mount -o bind /home/rancher/conf/state /var/lib/rancher/state ros config merge < /home/rancher/conf/cloud-config.yml ros service restart network-pre /bin/sh -c "ros service create && ros service start" &
/home/rancher/conf/cloud-config.yml on conf disk:
#cloud-config hostname: rancherhost1 rancher: network: dns: nameservers: - <Add nameserver ip!> search: - <Add search address!> interfaces: eth0: address: <Add host ip or remove!> gateway: <Add gateway or remove!> dhcp: <Set false or true!> mtu: <Set mtu or remove!> services: rancher-agent1: command: http://<rancher-server:port>/v1/scripts<Add keys!> image: rancher/agent:latest environment: - CATTLE_HOST_LABELS=<Add label key!>=<Add label value!>&<Add label key!>=<Add label value!>&... privileged: true volumes: - /var/run/docker.sock:/var/run/docker.sock ssh: keys: <Add keys here!>
/home/rancher/conf/rc.local on conf disk:
#!/bin/sh echo 'rancher:<Add password!>' | chpasswd wait-for-docker
Observe that /home/rancher/conf/state must contain .docker_uuid, .physical_host_uuid and .registration_token. Copy those three files from a temporary, running rancher agent. Comments and improvements are welcome.