Skip to content
This repository has been archived by the owner on May 22, 2020. It is now read-only.

Commit

Permalink
Use CNI plugin
Browse files Browse the repository at this point in the history
  • Loading branch information
Lukasz Zajaczkowski authored and Lukasz Zajaczkowski committed Jun 17, 2016
1 parent 2eb76c6 commit 5248147
Show file tree
Hide file tree
Showing 3 changed files with 41 additions and 108 deletions.
141 changes: 37 additions & 104 deletions docker-multinode/common.sh
Original file line number Diff line number Diff line change
Expand Up @@ -18,7 +18,7 @@

kube::multinode::main(){
LATEST_STABLE_K8S_VERSION=$(kube::helpers::curl "https://storage.googleapis.com/kubernetes-release/release/stable.txt")
K8S_VERSION=${K8S_VERSION:-${LATEST_STABLE_K8S_VERSION}}
K8S_VERSION=v1.3.0-beta.1

ETCD_VERSION=${ETCD_VERSION:-"2.2.5"}

Expand All @@ -45,6 +45,8 @@ kube::multinode::main(){
-v /var/run:/var/run:rw \
-v /var/lib/docker:/var/lib/docker:rw \
-v /var/lib/kubelet:/var/lib/kubelet:shared \
-v /etc/cni/net.d:/etc/cni/net.d:rw \
-v /opt/cni/bin:/opt/cni/bin:rw \
-v /var/log/containers:/var/log/containers:rw"

# Paths
Expand Down Expand Up @@ -123,40 +125,12 @@ kube::multinode::detect_lsb() {
kube::log::status "Detected OS: ${lsb_dist}"
}

# Start a docker bootstrap for running etcd and flannel
kube::multinode::bootstrap_daemon() {

kube::log::status "Launching docker bootstrap..."

docker daemon \
-H ${BOOTSTRAP_DOCKER_SOCK} \
-p /var/run/docker-bootstrap.pid \
--iptables=false \
--ip-masq=false \
--bridge=none \
--graph=/var/lib/docker-bootstrap \
--exec-root=/var/run/docker-bootstrap \
2> /var/log/docker-bootstrap.log \
1> /dev/null &

# Wait for docker bootstrap to start by "docker ps"-ing every second
local SECONDS=0
while [[ $(docker -H ${BOOTSTRAP_DOCKER_SOCK} ps 2>&1 1>/dev/null; echo $?) != 0 ]]; do
((SECONDS++))
if [[ ${SECONDS} == ${TIMEOUT_FOR_SERVICES} ]]; then
kube::log::error "docker bootstrap failed to start. Exiting..."
exit
fi
sleep 1
done
}

# Start etcd on the master node
kube::multinode::start_etcd() {

kube::log::status "Launching etcd..."

docker -H ${BOOTSTRAP_DOCKER_SOCK} run -d \
docker run -d \
--restart=${RESTART_POLICY} \
--net=host \
gcr.io/google_containers/etcd-${ARCH}:${ETCD_VERSION} \
Expand All @@ -169,7 +143,7 @@ kube::multinode::start_etcd() {
sleep 5

# Set flannel net config
docker -H ${BOOTSTRAP_DOCKER_SOCK} run \
docker run \
--net=host \
gcr.io/google_containers/etcd-${ARCH}:${ETCD_VERSION} \
etcdctl \
Expand All @@ -184,7 +158,7 @@ kube::multinode::start_flannel() {

kube::log::status "Launching flannel..."

docker -H ${BOOTSTRAP_DOCKER_SOCK} run -d \
docker run -d \
--restart=${RESTART_POLICY} \
--net=host \
--privileged \
Expand All @@ -207,8 +181,6 @@ kube::multinode::start_flannel() {
sleep 1
done

source ${FLANNEL_SUBNET_TMPDIR}/subnet.env

kube::log::status "FLANNEL_SUBNET is set to: ${FLANNEL_SUBNET}"
kube::log::status "FLANNEL_MTU is set to: ${FLANNEL_MTU}"
}
Expand All @@ -219,62 +191,27 @@ kube::multinode::restart_docker(){
case "${lsb_dist}" in
amzn)
DOCKER_CONF="/etc/sysconfig/docker"

if ! kube::helpers::command_exists ifconfig; then
yum -y -q install net-tools
fi
if ! kube::helpers::command_exists brctl; then
yum -y -q install bridge-utils
fi

kube::helpers::file_replace_line ${DOCKER_CONF} \ # Replace content in this file
"--bip" \ # Find a line with this content...
"OPTIONS=\"\$OPTIONS --mtu=${FLANNEL_MTU} --bip=${FLANNEL_SUBNET}\"" # ...and replace the found line with this line

ifconfig docker0 down

brctl delbr docker0
sed -i.bak 's/^\(MountFlags=\).*/\1shared/' $DOCKER_CONF
service docker restart
;;
centos)
if ! kube::helpers::command_exists ifconfig; then
yum -y -q install net-tools
fi
if ! kube::helpers::command_exists brctl; then
yum -y -q install bridge-utils
fi

# Newer centos releases uses systemd. Handle that
if kube::helpers::command_exists systemctl; then
kube::multinode::restart_docker_systemd
else
DOCKER_CONF="/etc/sysconfig/docker"

kube::helpers::file_replace_line ${DOCKER_CONF} \ # Replace content in this file
"--bip" \ # Find a line with this content...
"OPTIONS=\"\$OPTIONS --mtu=${FLANNEL_MTU} --bip=${FLANNEL_SUBNET}\"" # ...and replace the found line with this line
ifconfig docker0 down
brctl delbr docker0
sed -i.bak 's/^\(MountFlags=\).*/\1shared/' $DOCKER_CONF
systemctl restart docker
fi
;;
ubuntu|debian)
if ! kube::helpers::command_exists brctl; then
apt-get install -y bridge-utils
fi

# Newer ubuntu and debian releases uses systemd. Handle that
if kube::helpers::command_exists systemctl; then
kube::multinode::restart_docker_systemd
else
DOCKER_CONF="/etc/default/docker"

kube::helpers::file_replace_line ${DOCKER_CONF} \ # Replace content in this file
"--bip" \ # Find a line with this content...
"OPTIONS=\"\$OPTIONS --mtu=${FLANNEL_MTU} --bip=${FLANNEL_SUBNET}\"" # ...and replace the found line with this line

ifconfig docker0 down
brctl delbr docker0
sed -i.bak 's/^\(MountFlags=\).*/\1shared/' $DOCKER_CONF
service docker stop
while [[ $(ps aux | grep /usr/bin/docker | grep -v grep | wc -l) -gt 0 ]]; do
kube::log::status "Waiting for docker to terminate"
Expand All @@ -296,21 +233,6 @@ kube::multinode::restart_docker_systemd(){

DOCKER_CONF=$(systemctl cat docker | head -1 | awk '{print $2}')

# This expression checks if the "--mtu" and "--bip" options are there
# If they aren't, they are inserted at the end of the docker command
if [[ -z $(grep -- "--mtu=" $DOCKER_CONF) ]]; then
sed -e "s@$(grep "/usr/bin/docker" $DOCKER_CONF)@$(grep "/usr/bin/docker" $DOCKER_CONF) --mtu=${FLANNEL_MTU}@g" -i $DOCKER_CONF
fi
if [[ -z $(grep -- "--bip=" $DOCKER_CONF) ]]; then
sed -e "s@$(grep "/usr/bin/docker" $DOCKER_CONF)@$(grep "/usr/bin/docker" $DOCKER_CONF) --bip=${FLANNEL_SUBNET}@g" -i $DOCKER_CONF
fi

ifconfig docker0 down
brctl delbr docker0

# Finds "--mtu=????" and replaces with "--mtu=${FLANNEL_MTU}"
# Also finds "--bip=??.??.??.??" and replaces with "--bip=${FLANNEL_SUBNET}"
sed -e "s@$(grep -o -- "--mtu=[[:graph:]]*" $DOCKER_CONF)@--mtu=${FLANNEL_MTU}@g;s@$(grep -o -- "--bip=[[:graph:]]*" $DOCKER_CONF)@--bip=${FLANNEL_SUBNET}@g" -i $DOCKER_CONF
sed -i.bak 's/^\(MountFlags=\).*/\1shared/' $DOCKER_CONF
systemctl daemon-reload
systemctl restart docker
Expand Down Expand Up @@ -338,7 +260,7 @@ kube::multinode::start_k8s_master() {
--cluster-dns=${DNS_SERVER_IP} \
--cluster-domain=${DNS_DOMAIN} \
--hostname-override=$(ip -o -4 addr list ${NET_INTERFACE} | awk '{print $4}' | cut -d/ -f1) \
--v=2
--v=2 --network-plugin=cni --network-plugin-dir=/etc/cni/net.d
}

# Start kubelet in a container, for a worker node
Expand All @@ -363,7 +285,7 @@ kube::multinode::start_k8s_worker() {
--cluster-dns=${DNS_SERVER_IP} \
--cluster-domain=${DNS_DOMAIN} \
--hostname-override=$(ip -o -4 addr list ${NET_INTERFACE} | awk '{print $4}' | cut -d/ -f1) \
--v=2
--v=2 --network-plugin=cni --network-plugin-dir=/etc/cni/net.d
}

# Start kube-proxy in a container, for a worker node
Expand All @@ -385,21 +307,6 @@ kube::multinode::start_k8s_worker_proxy() {
# Turndown the local cluster
kube::multinode::turndown(){

# Check if docker bootstrap is running
if [[ $(kube::helpers::is_running ${BOOTSTRAP_DOCKER_SOCK}) == "true" ]]; then

kube::log::status "Killing docker bootstrap..."

# Kill all docker bootstrap's containers
if [[ $(docker -H ${BOOTSTRAP_DOCKER_SOCK} ps -q | wc -l) != 0 ]]; then
docker -H ${BOOTSTRAP_DOCKER_SOCK} rm -f $(docker -H ${BOOTSTRAP_DOCKER_SOCK} ps -q)
fi

# Kill bootstrap docker
kill $(ps aux | grep ${BOOTSTRAP_DOCKER_SOCK} | grep -v grep | awk '{print $2}')

fi

if [[ $(kube::helpers::is_running /hyperkube) == "true" ]]; then

kube::log::status "Killing hyperkube containers..."
Expand Down Expand Up @@ -598,3 +505,29 @@ kube::log::error() {
echo " $message" >&2
done
}

# Configure cni plugins
kube::multinode::start_configure_cni() {
mkdir -p /opt/cni/bin
mkdir -p /etc/cni/net.d
mkdir -p /var/run/flannel

curl -L https://github.com/containernetworking/cni/releases/download/v0.3.0/cni-v0.3.0.txz -O
xz -d < cni-v0.3.0.txz | tar xvf - -C /opt/cni/bin
rm cni-v0.3.0.txz

cp ${FLANNEL_SUBNET_TMPDIR}/subnet.env /var/run/flannel/subnet.env

tee /etc/cni/net.d/10-containernet.conf <<-'EOF'
{
"name": "containernet",
"type": "flannel",
"subnetFile": "/var/run/flannel/subnet.env",
"delegate": {
"bridge": "mynet0",
"mtu": 1450,
"isDefaultGateway": true
}
}
EOF
}
4 changes: 2 additions & 2 deletions docker-multinode/master.sh
Original file line number Diff line number Diff line change
Expand Up @@ -30,13 +30,13 @@ kube::multinode::detect_lsb

kube::multinode::turndown

kube::multinode::bootstrap_daemon
kube::multinode::restart_docker

kube::multinode::start_etcd

kube::multinode::start_flannel

kube::multinode::restart_docker
kube::multinode::start_configure_cni

kube::multinode::start_k8s_master

Expand Down
4 changes: 2 additions & 2 deletions docker-multinode/worker.sh
Original file line number Diff line number Diff line change
Expand Up @@ -31,11 +31,11 @@ kube::multinode::detect_lsb

kube::multinode::turndown

kube::multinode::bootstrap_daemon
kube::multinode::restart_docker

kube::multinode::start_flannel

kube::multinode::restart_docker
kube::multinode::start_configure_cni

kube::multinode::start_k8s_worker

Expand Down

0 comments on commit 5248147

Please sign in to comment.