diff --git a/Documentation/op-guide/container.md b/Documentation/op-guide/container.md index e66c4578f..a4e87ec23 100644 --- a/Documentation/op-guide/container.md +++ b/Documentation/op-guide/container.md @@ -2,6 +2,68 @@ The following guide shows how to run etcd with rkt and Docker using the [static bootstrap process](clustering.md#static). +## rkt + +### Running a single node etcd + +The following rkt run command will expose the etcd client API on port 2379 and expose the peer API on port 2380. + +Use the host IP address when configuring etcd. + +``` +export NODE1=192.168.1.21 +``` + +Trust the CoreOS [App Signing Key](https://coreos.com/security/app-signing-key/). + +``` +sudo rkt trust --prefix coreos.com/etcd +# gpg key fingerprint is: 18AD 5014 C99E F7E3 BA5F 6CE9 50BD D3E0 FC8A 365E +``` + +Run the `v3.0.6` version of etcd or specify another release version. + +``` +sudo rkt run --net=default:IP=${NODE1} coreos.com/etcd:v3.0.6 -- -name=node1 -advertise-client-urls=http://${NODE1}:2379 -initial-advertise-peer-urls=http://${NODE1}:2380 -listen-client-urls=http://0.0.0.0:2379 -listen-peer-urls=http://${NODE1}:2380 -initial-cluster=node1=http://${NODE1}:2380 +``` + +List the cluster member. + +``` +etcdctl --endpoints=http://192.168.1.21:2379 member list +``` + +### Running a 3 node etcd cluster + +Setup a 3 node cluster with rkt locally, using the `-initial-cluster` flag. + +```sh +export NODE1=172.16.28.21 +export NODE2=172.16.28.22 +export NODE3=172.16.28.23 +``` + +``` +# node 1 +sudo rkt run --net=default:IP=${NODE1} coreos.com/etcd:v3.0.6 -- -name=node1 -advertise-client-urls=http://${NODE1}:2379 -initial-advertise-peer-urls=http://${NODE1}:2380 -listen-client-urls=http://0.0.0.0:2379 -listen-peer-urls=http://${NODE1}:2380 -initial-cluster=node1=http://${NODE1}:2380,node2=http://${NODE2}:2380,node3=http://${NODE3}:2380 + +# node 2 +sudo rkt run --net=default:IP=${NODE2} coreos.com/etcd:v3.0.6 -- -name=node2 -advertise-client-urls=http://${NODE2}:2379 -initial-advertise-peer-urls=http://${NODE2}:2380 -listen-client-urls=http://0.0.0.0:2379 -listen-peer-urls=http://${NODE2}:2380 -initial-cluster=node1=http://${NODE1}:2380,node2=http://${NODE2}:2380,node3=http://${NODE3}:2380 + +# node 3 +sudo rkt run --net=default:IP=${NODE3} coreos.com/etcd:v3.0.6 -- -name=node3 -advertise-client-urls=http://${NODE3}:2379 -initial-advertise-peer-urls=http://${NODE3}:2380 -listen-client-urls=http://0.0.0.0:2379 -listen-peer-urls=http://${NODE3}:2380 -initial-cluster=node1=http://${NODE1}:2380,node2=http://${NODE2}:2380,node3=http://${NODE3}:2380 +``` + +Verify the cluster is healthy and can be reached. + +``` +ETCDCTL_API=3 etcdctl --endpoints=http://172.16.28.21:2379,http://172.16.28.22:2379,http://172.16.28.23:2379 endpoint-health +``` + +### DNS + +Production clusters which refer to peers by DNS name known to the local resolver must mount the [host's DNS configuration](https://coreos.com/kubernetes/docs/latest/kubelet-wrapper.html#customizing-rkt-options). + ## Docker In order to expose the etcd API to clients outside of Docker host, use the host IP address of the container. Please see [`docker inspect`](https://docs.docker.com/engine/reference/commandline/inspect) for more detail on how to get the IP address. Alternatively, specify `--net=host` flag to `docker run` command to skip placing the container inside of a separate network stack. @@ -59,3 +121,7 @@ To run `etcdctl` using API version 3: docker exec etcd /bin/sh -c "export ETCDCTL_API=3 && /usr/local/bin/etcdctl put foo bar" ``` +## Bare Metal + +To provision a 3 node etcd cluster on bare-metal, you might find the examples in the [baremetal repo](https://github.com/coreos/coreos-baremetal/tree/master/examples) useful. +