KubeADM-AIO: Update Image to support Multinode Operation Natively

This PS also pins the remaining components of the kubelet, moves
the K8s version to 1.6.4 and restores CentOS 7 operation.

Change-Id: Ia32c9e02dbf9451c13addce436f6e36f5a0a622f
This commit is contained in:
Pete Birley 2017-06-04 11:49:17 -05:00
parent c1e008643d
commit 1ca8efa3a6
9 changed files with 84 additions and 54 deletions

View File

@ -56,11 +56,16 @@ function kubeadm_aio_reqs_install {
sudo yum install -y \ sudo yum install -y \
epel-release epel-release
sudo yum install -y \ sudo yum install -y \
docker \ docker-latest \
nfs-utils \ nfs-utils \
jq jq
sudo cp -f /usr/lib/systemd/system/docker.service /etc/systemd/system/docker.service sudo cp -f /usr/lib/systemd/system/docker-latest.service /etc/systemd/system/docker.service
sudo sed -i "s|/var/lib/docker-latest|/var/lib/docker|g" /etc/systemd/system/docker.service
sudo sed -i 's/^OPTIONS/#OPTIONS/g' /etc/sysconfig/docker-latest
sudo sed -i "s|^MountFlags=slave|MountFlags=share|g" /etc/systemd/system/docker.service sudo sed -i "s|^MountFlags=slave|MountFlags=share|g" /etc/systemd/system/docker.service
sudo sed -i "/--seccomp-profile/,+1 d" /etc/systemd/system/docker.service
echo "DOCKER_STORAGE_OPTIONS=--storage-driver=overlay" | sudo tee /etc/sysconfig/docker-latest-storage
sudo setenforce 0 || true
sudo systemctl daemon-reload sudo systemctl daemon-reload
sudo systemctl restart docker sudo systemctl restart docker
elif [ "x$HOST_OS" == "xfedora" ]; then elif [ "x$HOST_OS" == "xfedora" ]; then
@ -71,6 +76,7 @@ function kubeadm_aio_reqs_install {
sudo cp -f /usr/lib/systemd/system/docker-latest.service /etc/systemd/system/docker.service sudo cp -f /usr/lib/systemd/system/docker-latest.service /etc/systemd/system/docker.service
sudo sed -i "s|/var/lib/docker-latest|/var/lib/docker|g" /etc/systemd/system/docker.service sudo sed -i "s|/var/lib/docker-latest|/var/lib/docker|g" /etc/systemd/system/docker.service
echo "DOCKER_STORAGE_OPTIONS=--storage-driver=overlay2" | sudo tee /etc/sysconfig/docker-latest-storage echo "DOCKER_STORAGE_OPTIONS=--storage-driver=overlay2" | sudo tee /etc/sysconfig/docker-latest-storage
sudo setenforce 0 || true
sudo systemctl daemon-reload sudo systemctl daemon-reload
sudo systemctl restart docker sudo systemctl restart docker
fi fi
@ -87,11 +93,6 @@ function kubeadm_aio_build {
} }
function kubeadm_aio_launch { function kubeadm_aio_launch {
if [ "x$HOST_OS" == "xcentos" ]; then
sudo setenforce 0 || true
elif [ "x$HOST_OS" == "xfedora" ]; then
sudo setenforce 0 || true
fi
${WORK_DIR}/tools/kubeadm-aio/kubeadm-aio-launcher.sh ${WORK_DIR}/tools/kubeadm-aio/kubeadm-aio-launcher.sh
mkdir -p ${HOME}/.kube mkdir -p ${HOME}/.kube
cat ${KUBECONFIG} > ${HOME}/.kube/config cat ${KUBECONFIG} > ${HOME}/.kube/config

View File

@ -17,6 +17,6 @@ source ${WORK_DIR}/tools/gate/funcs/network.sh
source ${WORK_DIR}/tools/gate/funcs/kube.sh source ${WORK_DIR}/tools/gate/funcs/kube.sh
kubeadm_aio_reqs_install kubeadm_aio_reqs_install
#kubeadm_aio_build sudo docker pull ${KUBEADM_IMAGE} || kubeadm_aio_build
kubeadm_aio_launch kubeadm_aio_launch
net_resolv_kube net_resolv_kube

View File

@ -14,9 +14,9 @@
set -ex set -ex
export HELM_VERSION=${2:-v2.3.0} export HELM_VERSION=${2:-v2.3.0}
export KUBE_VERSION=${3:-v1.6.2} export KUBE_VERSION=${3:-v1.6.4}
export KUBECONFIG=${HOME}/.kubeadm-aio/admin.conf export KUBECONFIG=${HOME}/.kubeadm-aio/admin.conf
export KUBEADM_IMAGE=openstackhelm/kubeadm-aio:v1.6 export KUBEADM_IMAGE=openstackhelm/kubeadm-aio:${KUBE_VERSION}
export WORK_DIR=$(pwd) export WORK_DIR=$(pwd)
source /etc/os-release source /etc/os-release

View File

@ -1,14 +1,15 @@
FROM ubuntu:16.04 FROM ubuntu:16.04
MAINTAINER pete.birley@att.com MAINTAINER pete.birley@att.com
ARG HELM_VERSION=v2.3.0 ENV HELM_VERSION=v2.3.0 \
ARG KUBE_VERSION=v1.6.2 KUBE_VERSION=v1.6.4 \
CNI_VERSION=v0.5.2 \
ENV container="docker" \ container="docker" \
DEBIAN_FRONTEND="noninteractive" DEBIAN_FRONTEND="noninteractive"
RUN set -x \ RUN set -x \
&& cd /tmp \ && TMP_DIR=$(mktemp --directory) \
&& cd ${TMP_DIR} \
&& apt-get update \ && apt-get update \
&& apt-get install -y \ && apt-get install -y \
apt-transport-https \ apt-transport-https \
@ -31,19 +32,29 @@ RUN set -x \
&& dpkg --configure kubeadm \ && dpkg --configure kubeadm \
&& apt-get install -yf kubeadm \ && apt-get install -yf kubeadm \
&& mkdir -p /etc/kubernetes/manifests \ && mkdir -p /etc/kubernetes/manifests \
# Install kubectl:
&& curl -sSL https://dl.k8s.io/${KUBE_VERSION}/kubernetes-client-linux-amd64.tar.gz | tar -zxv --strip-components=1 \
&& mv ${TMP_DIR}/client/bin/kubectl /usr/bin/kubectl \
&& chmod +x /usr/bin/kubectl \
# Install kubelet & kubeadm binaries: # Install kubelet & kubeadm binaries:
# (portdirect) We do things in this weird way to let us use the deps and systemd # (portdirect) We do things in this weird way to let us use the deps and systemd
# units from the packages in the .deb repo. # units from the packages in the .deb repo.
&& curl -sSL https://dl.k8s.io/${KUBE_VERSION}/kubernetes-server-linux-amd64.tar.gz | tar -zxv --strip-components=1 \ && curl -sSL https://dl.k8s.io/${KUBE_VERSION}/kubernetes-server-linux-amd64.tar.gz | tar -zxv --strip-components=1 \
&& mv /tmp/server/bin/kubelet /usr/bin/kubelet \ && mv ${TMP_DIR}/server/bin/kubelet /usr/bin/kubelet \
&& chmod +x /usr/bin/kubelet \ && chmod +x /usr/bin/kubelet \
&& mv /tmp/server/bin/kubeadm /usr/bin/kubeadm \ && mv ${TMP_DIR}/server/bin/kubeadm /usr/bin/kubeadm \
&& chmod +x /usr/bin/kubeadm \ && chmod +x /usr/bin/kubeadm \
# Install CNI:
&& CNI_BIN_DIR=/opt/cni/bin \
&& mkdir -p ${CNI_BIN_DIR} \
&& cd ${CNI_BIN_DIR} \
&& curl -sSL https://github.com/containernetworking/cni/releases/download/$CNI_VERSION/cni-amd64-$CNI_VERSION.tgz | tar -zxv --strip-components=1 \
&& cd ${TMP_DIR} \
# Move kubelet binary as we will run containerised # Move kubelet binary as we will run containerised
&& mv /usr/bin/kubelet /usr/bin/kubelet-real \ && mv /usr/bin/kubelet /usr/bin/kubelet-real \
# Install helm binary # Install helm binary
&& curl -sSL https://storage.googleapis.com/kubernetes-helm/helm-${HELM_VERSION}-linux-amd64.tar.gz | tar -zxv --strip-components=1 \ && curl -sSL https://storage.googleapis.com/kubernetes-helm/helm-${HELM_VERSION}-linux-amd64.tar.gz | tar -zxv --strip-components=1 \
&& mv /tmp/helm /usr/bin/helm \ && mv ${TMP_DIR}/helm /usr/bin/helm \
# Install openstack-helm dev utils # Install openstack-helm dev utils
&& apt-get install -y \ && apt-get install -y \
make \ make \
@ -64,7 +75,7 @@ RUN set -x \
&& rm -rf /var/lib/apt/lists/* \ && rm -rf /var/lib/apt/lists/* \
# Clean up tmp dir # Clean up tmp dir
&& cd / \ && cd / \
&& rm -rf /tmp/* && rm -rf ${TMP_DIR}
# Load assets into place, setup startup target & units # Load assets into place, setup startup target & units
COPY ./assets/ / COPY ./assets/ /

View File

@ -31,7 +31,7 @@ You should install the ``kubectl`` and ``helm`` binaries:
.. code:: bash .. code:: bash
KUBE_VERSION=v1.6.0 KUBE_VERSION=v1.6.4
HELM_VERSION=v2.3.0 HELM_VERSION=v2.3.0
TMP_DIR=$(mktemp -d) TMP_DIR=$(mktemp -d)
@ -57,7 +57,7 @@ repo run:
.. code:: bash .. code:: bash
export KUBEADM_IMAGE=openstackhelm/kubeadm-aio:v1.6 export KUBEADM_IMAGE=openstackhelm/kubeadm-aio:v1.6.4
sudo docker build --pull -t ${KUBEADM_IMAGE} tools/kubeadm-aio sudo docker build --pull -t ${KUBEADM_IMAGE} tools/kubeadm-aio
Deploy the AIO environment Deploy the AIO environment
@ -67,8 +67,8 @@ To launch the environment then run:
.. code:: bash .. code:: bash
export KUBEADM_IMAGE=openstackhelm/kubeadm-aio:v1.6 export KUBEADM_IMAGE=openstackhelm/kubeadm-aio:v1.6.4
export KUBE_VERSION=v1.6.2 export KUBE_VERSION=v1.6.4
./tools/kubeadm-aio/kubeadm-aio-launcher.sh ./tools/kubeadm-aio/kubeadm-aio-launcher.sh
export KUBECONFIG=${HOME}/.kubeadm-aio/admin.conf export KUBECONFIG=${HOME}/.kubeadm-aio/admin.conf

View File

@ -0,0 +1,3 @@
# If KUBE_ROLE is set 'master' kubeadm-aio will set this node up to be a master
# node, otherwise if 'worker', will join an existing cluster.
KUBE_ROLE=master

View File

@ -0,0 +1 @@
KUBEADM_JOIN_ARGS="no_command_supplied"

View File

@ -25,7 +25,7 @@ echo 'Setting up K8s version to deploy'
: ${KUBE_VERSION:="default"} : ${KUBE_VERSION:="default"}
sed -i "s|KUBE_VERSION=.*|KUBE_VERSION=${KUBE_VERSION}|g" /etc/kube-version sed -i "s|KUBE_VERSION=.*|KUBE_VERSION=${KUBE_VERSION}|g" /etc/kube-version
echo 'Setting up device image to use for kube-api' echo 'Setting up device to use for kube-api'
: ${KUBE_BIND_DEV:="autodetect"} : ${KUBE_BIND_DEV:="autodetect"}
sed -i "s|KUBE_BIND_DEV=.*|KUBE_BIND_DEV=${KUBE_BIND_DEV}|g" /etc/kubeapi-device sed -i "s|KUBE_BIND_DEV=.*|KUBE_BIND_DEV=${KUBE_BIND_DEV}|g" /etc/kubeapi-device
@ -33,5 +33,13 @@ echo 'Setting up container image to use for kubelet'
: ${KUBELET_CONTAINER:="this_one"} : ${KUBELET_CONTAINER:="this_one"}
sed -i "s|KUBELET_CONTAINER=.*|KUBELET_CONTAINER=${KUBELET_CONTAINER}|g" /etc/kubelet-container sed -i "s|KUBELET_CONTAINER=.*|KUBELET_CONTAINER=${KUBELET_CONTAINER}|g" /etc/kubelet-container
echo 'Setting whether this node is a master, or slave, K8s node'
: ${KUBE_ROLE:="master"}
sed -i "s|KUBE_ROLE=.*|KUBE_ROLE=${KUBE_ROLE}|g" /etc/kube-role
echo 'Setting any kubeadm join commands'
: ${KUBEADM_JOIN_ARGS:="no_command_supplied"}
sed -i "s|KUBEADM_JOIN_ARGS=.*|KUBEADM_JOIN_ARGS=\"${KUBEADM_JOIN_ARGS}\"|g" /etc/kubeadm-join-command-args
echo 'Starting Systemd' echo 'Starting Systemd'
exec /bin/systemd --system exec /bin/systemd --system

View File

@ -15,6 +15,8 @@
# under the License. # under the License.
set -xe set -xe
source /etc/kube-role
if [[ "${KUBE_ROLE}" == "master" ]]; then
# Define k8s version # Define k8s version
source /etc/kube-version source /etc/kube-version
if [[ "${KUBE_VERSION}" == "default" ]]; then if [[ "${KUBE_VERSION}" == "default" ]]; then
@ -46,3 +48,7 @@ kubectl apply -f /opt/cni-manifests/calico.yaml
echo 'Setting Up Cluser for OpenStack-Helm dev use' echo 'Setting Up Cluser for OpenStack-Helm dev use'
/usr/bin/openstack-helm-dev-prep /usr/bin/openstack-helm-dev-prep
elif [[ "${KUBE_ROLE}" == "worker" ]]; then
source /etc/kubeadm-join-command-args
kubeadm join --skip-preflight-checks ${KUBEADM_JOIN_ARGS}
fi