diff --git a/cluster/libvirt-coreos/.gitignore b/cluster/libvirt-coreos/.gitignore
index f26d8e4020a..3eb6823b0f2 100644
--- a/cluster/libvirt-coreos/.gitignore
+++ b/cluster/libvirt-coreos/.gitignore
@@ -1,2 +1,3 @@
/libvirt_storage_pool/
/coreos_production_qemu_image.img.bz2
+/etcd-v2.0.9-linux-amd64.tar.gz
diff --git a/cluster/libvirt-coreos/coreos.xml b/cluster/libvirt-coreos/coreos.xml
index 041f3a01510..a0490e2eadd 100644
--- a/cluster/libvirt-coreos/coreos.xml
+++ b/cluster/libvirt-coreos/coreos.xml
@@ -35,6 +35,11 @@
+
+
+
+
+
diff --git a/cluster/libvirt-coreos/user_data.yml b/cluster/libvirt-coreos/user_data.yml
index ae7a430e972..338df478961 100644
--- a/cluster/libvirt-coreos/user_data.yml
+++ b/cluster/libvirt-coreos/user_data.yml
@@ -17,11 +17,22 @@ coreos:
etcd:
name: ${name}
addr: ${public_ip}:4001
- bind-addr: 0.0.0.0
+ # bind-addr: 0.0.0.0
peer-addr: ${public_ip}:7001
# peers: {etcd_peers}
discovery: ${discovery}
units:
+ - name: etcd.service
+ drop-ins:
+ - name: opt-etcd2.conf
+ content: |
+ [Unit]
+ After=opt-etcd.mount
+ Requires=opt-etcd.mount
+
+ [Service]
+ ExecStart=
+ ExecStart=/opt/etcd/bin/etcd
- name: static.network
command: start
content: |
@@ -103,6 +114,17 @@ coreos:
Where=/opt/kubernetes
Options=ro,trans=virtio,version=9p2000.L
Type=9p
+ - name: opt-etcd.mount
+ command: start
+ content: |
+ [Unit]
+ ConditionVirtualization=|vm
+
+ [Mount]
+ What=etcd
+ Where=/opt/etcd
+ Options=ro,trans=virtio,version=9p2000.L
+ Type=9p
update:
group: ${COREOS_CHANNEL:-alpha}
reboot-strategy: off
diff --git a/cluster/libvirt-coreos/util.sh b/cluster/libvirt-coreos/util.sh
index e93798594a8..b05a6089165 100644
--- a/cluster/libvirt-coreos/util.sh
+++ b/cluster/libvirt-coreos/util.sh
@@ -25,6 +25,8 @@ export LIBVIRT_DEFAULT_URI=qemu:///system
readonly POOL=kubernetes
readonly POOL_PATH="$(cd $ROOT && pwd)/libvirt_storage_pool"
+ETCD_VERSION=${ETCD_VERSION:-v2.0.9}
+
# join
# Concatenates the list elements with the delimiter passed as first parameter
#
@@ -93,6 +95,9 @@ function destroy-pool {
virsh vol-delete $vol --pool $POOL
done
+ rm -rf "$POOL_PATH"/etcd/*
+ virsh vol-delete etcd --pool $POOL || true
+
[[ "$1" == 'keep_base_image' ]] && return
set +e
@@ -140,6 +145,18 @@ function initialize-pool {
render-template "$ROOT/skydns-rc.yaml" > "$POOL_PATH/kubernetes/addons/skydns-rc.yaml"
fi
+ mkdir -p "$POOL_PATH/etcd"
+ if [[ ! -f "$ROOT/etcd-${ETCD_VERSION}-linux-amd64.tar.gz" ]]; then
+ wget -P "$ROOT" https://github.com/coreos/etcd/releases/download/${ETCD_VERSION}/etcd-${ETCD_VERSION}-linux-amd64.tar.gz
+ fi
+ if [[ "$ROOT/etcd-${ETCD_VERSION}-linux-amd64.tar.gz" -nt "$POOL_PATH/etcd/etcd" ]]; then
+ tar -x -C "$POOL_PATH/etcd" -f "$ROOT/etcd-${ETCD_VERSION}-linux-amd64.tar.gz" etcd-${ETCD_VERSION}-linux-amd64
+ rm -rf "$POOL_PATH/etcd/bin/*"
+ mkdir -p "$POOL_PATH/etcd/bin"
+ mv "$POOL_PATH"/etcd/etcd-${ETCD_VERSION}-linux-amd64/{etcd,etcdctl} "$POOL_PATH/etcd/bin"
+ rm -rf "$POOL_PATH/etcd/etcd-${ETCD_VERSION}-linux-amd64"
+ fi
+
virsh pool-refresh $POOL
}
@@ -187,6 +204,7 @@ function kube-up {
readonly ssh_keys="$(cat ~/.ssh/id_*.pub | sed 's/^/ - /')"
readonly kubernetes_dir="$POOL_PATH/kubernetes"
+ readonly etcd_dir="$POOL_PATH/etcd"
readonly discovery=$(curl -s https://discovery.etcd.io/new)
readonly machines=$(join , "${KUBE_MINION_IP_ADDRESSES[@]}")