KVM+libvirt な仮想化ホストに、ブリッジ I/F で固定IPな Docker ホストを RancherOS で作るメモ。
# RancherOS の ISO をダウンロード wget https://releases.rancher.com/os/latest/rancheros.iso # SSH鍵をダウンロード curl -s https://github.com/ngyuki.keys -o authorized_keys # ConfigDrive のディレクトリを準備 mkdir -p configdrive/openstack/latest # ConfigDrive の user_data を作成 vim configdrive/openstack/latest/user_data
#cloud-config ssh_authorized_keys: $(sed 's/^/ - /' authorized_keys) rancher: network: dns: nameservers: - 192.168.0.1 interfaces: eth0: address: 192.168.0.100/24 gateway: 192.168.0.1 dhcp: false state: formatzero: true autoformat: - /dev/vda
# ConfigDrive の ISO を作成 mkisofs -R -V config-2 -o configdrive.iso configdrive # 永続データのディスクイメージを作成 echo -n "boot2docker, please format-me" > data.img truncate -s 1G data.img # ゲストを作成 virt-install \ --import \ --name rancheros \ --hvm \ --virt-type kvm \ --ram 2048 \ --vcpus 1 \ --arch x86_64 \ --os-type linux \ --boot cdrom \ --disk "$PWD/data.img,device=disk,bus=virtio,cache=writeback" \ --disk "$PWD/rancheros.iso,device=cdrom" \ --disk "$PWD/configdrive.iso,device=cdrom" \ --network network=front,model=virtio \ --graphics none \ --serial pty \ --console pty
動作確認します。
ssh docker@192.168.0.100 docker run --rm hello-world ssh docker@192.168.0.100 docker run -d -p 80:80 nginx curl http://192.168.0.100/
補足とか
cloud-init
RancherOS は cloud-init で初期設定が可能なのですが、cloud-init がそのまま使用されているわけではなく、独自のこれ https://github.com/rancher/os/tree/master/config/cloudinit が使用されているようです(CoreOS からのフォーク?)。
なので DataSources も一部しかサポートしていません。NoCloud がダメっぽかったので ConfigDrive で初期設定しています。
autoformat
user_data で下記の通りにしておくと /dev/vda
が永続データ用の領域として自動でフォーマットされるのですが、そのディスクの先頭に boot2docker, please format-me
が記述されている必要があります。
rancher: state: formatzero: true autoformat: - /dev/vda
なお、この方法でフォーマットすると /dev/vda
にはパーティションテーブル無しで直接ファイルシステムが作成されます。
パーティションが切られてたほうが良いなら、次のようにあらかじめディスクイメージにパーティションを作成しておけば OK です。
truncate -s 1G data.img virt-format --format=raw --partition=gpt --filesystem=ext4 --label=B2D_STATE -a data.img