4.1 KiB
Getting Started with Docker
In this tutorial, we'll run bootcfg on your Linux machine, with Docker, to network boot and provision a cluster of CoreOS machines. You'll be able to create Kubernetes clustes, etcd clusters, or just install CoreOS and test network setups locally.
If you're ready to try rkt, see Getting Started with rkt.
Requirements
Install the dependencies and start the Docker daemon.
# Fedora
sudo dnf install docker virt-install virt-manager
sudo systemctl start docker
# Debian/Ubuntu
# check Docker's docs to install Docker 1.8+ on Debian/Ubuntu
sudo apt-get install virt-manager virtinst qemu-kvm
Clone the coreos-baremetal source which contains the examples and scripts.
git clone https://github.com/coreos/coreos-baremetal.git
cd coreos-baremetal
Download the CoreOS PXE image assets to assets/coreos. The examples instruct machines to load these from bootcfg.
./scripts/get-coreos
./scripts/get-coreos channel version
Containers
Latest
Run the latest Docker image from quay.io/coreos/bootcfg. The container should receive the IP address 172.17.0.2 on the docker0 bridge.
sudo docker run -p 8080:8080 --rm -v $PWD/examples:/etc/bootcfg:Z -v $PWD/assets:/var/bootcfg:Z quay.io/coreos/bootcfg:latest -address=0.0.0.0:8080 -log-level=debug -config /etc/bootcfg/etcd-docker.yaml
Release
Alternately, run a recent tagged release.
sudo docker run -p 8080:8080 --rm -v $PWD/examples:/data:Z -v $PWD/assets:/assets:Z quay.io/coreos/bootcfg:v0.2.0 -address=0.0.0.0:8080 -log-level=debug -config /data/etcd-docker.yaml
Take a look at etcd-docker.yaml to get an idea of how machines are matched to profiles. Explore some endpoints port mapped to localhost:8080.
Network
Since the virtual network has no network boot services, use the dnsmasq image to create an iPXE network boot environment which runs DHCP, DNS, and TFTP.
sudo docker run --rm --cap-add=NET_ADMIN quay.io/coreos/dnsmasq -d -q --dhcp-range=172.17.0.43,172.17.0.99 --enable-tftp --tftp-root=/var/lib/tftpboot --dhcp-userclass=set:ipxe,iPXE --dhcp-boot=tag:#ipxe,undionly.kpxe --dhcp-boot=tag:ipxe,http://bootcfg.foo:8080/boot.ipxe --log-queries --log-dhcp --dhcp-option=3,172.17.0.1 --address=/bootcfg.foo/172.17.0.2
In this case, dnsmasq runs a DHCP server allocating IPs to VMs between 172.17.0.43 and 172.17.0.99, resolves bootcfg.foo to 172.17.0.2 (the IP where bootcfg runs), and points iPXE clients to http://bootcfg.foo:8080/boot.ipxe.
Client VMs
Create VM nodes which have known hardware attributes. The nodes will be attached to the docker0 bridge where Docker's containers run.
sudo ./scripts/libvirt create-docker
sudo virt-manager
You can use virt-manager to watch the console and reboot VM machines with
sudo ./scripts/libvirt poweroff
sudo ./scripts/libvirt start
Verify
The VMs should network boot and provision themselves into a three node etcd cluster, with other nodes behaving as etcd proxies.
The example profile added autologin so you can verify that etcd works between nodes.
systemctl status etcd2
etcdctl set /message hello
etcdctl get /message
Clean up the VM machines.
sudo ./scripts/libvirt poweroff
sudo ./scripts/libvirt destroy
sudo ./scripts/libvirt delete-disks
Going Further
Explore the examples. Try the k8s-docker.yaml example to produce a TLS-authenticated Kubernetes cluster you can access locally with kubectl.
Learn more about bootcfg, enable OpenPGP signing, or adapt an example for your own physical hardware and network.