blob: 7571adb57059bd1d64b1e5b1d04d4188fadb82ca [file] [log] [blame]
#!/bin/bash
# Licensed to the Apache Software Foundation (ASF) under one or more contributor
# license agreements; and to You under the Apache License, Version 2.0.
# NOTE: This script is not currently being used.
# Will remove after a couple of weeks experience with
# kubeadm-dind-cluster on TravisCI
# This script assumes Docker is already installed
set -x
#check_or_build_nsenter derived from https://github.com/bitnami/kubernetes-travis/blob/master/scripts/cluster-up-minikube.sh (Apache 2.0 License)
check_or_build_nsenter() {
which nsenter >/dev/null && return 0
echo "INFO: Building 'nsenter' ..."
cat <<-EOF | docker run -i --rm -v "$(pwd):/build" ubuntu:14.04 >& nsenter.build.log
apt-get update
apt-get install -qy git bison build-essential autopoint libtool automake autoconf gettext pkg-config
git clone --depth 1 git://git.kernel.org/pub/scm/utils/util-linux/util-linux.git /tmp/util-linux
cd /tmp/util-linux
./autogen.sh
./configure --without-python --disable-all-programs --enable-nsenter
make nsenter
cp -pfv nsenter /build
EOF
if [ ! -f ./nsenter ]; then
echo "ERROR: nsenter build failed, log:"
cat nsenter.build.log
return 1
fi
echo "INFO: nsenter build OK, installing ..."
sudo install -v nsenter /usr/local/bin
}
# Download and install misc packages and utilities
pushd /tmp
# helm on minikube's vm-driver=none requires nsenter, which is not present by default on ubuntu 14.04
check_or_build_nsenter
# Need socat for helm to forward connections to tiller on ubuntu 16.04
sudo apt update
sudo apt install -y socat
# download and install the wsk cli
wget -q https://github.com/apache/incubator-openwhisk-cli/releases/download/latest/OpenWhisk_CLI-latest-linux-amd64.tgz
tar xzf OpenWhisk_CLI-latest-linux-amd64.tgz
sudo cp wsk /usr/local/bin/wsk
# Download and install kubectl and minikube following the recipe in the minikube
# project README.md for using minikube for Linux Continuous Integration with VM Support
curl -Lo kubectl https://storage.googleapis.com/kubernetes-release/release/$TRAVIS_KUBE_VERSION/bin/linux/amd64/kubectl && chmod +x kubectl && sudo mv kubectl /usr/local/bin
curl -Lo minikube https://storage.googleapis.com/minikube/releases/$TRAVIS_MINIKUBE_VERSION/minikube-linux-amd64 && chmod +x minikube && sudo mv minikube /usr/local/bin
# Download and install helm
curl https://raw.githubusercontent.com/kubernetes/helm/master/scripts/get > get_helm.sh && chmod +x get_helm.sh && ./get_helm.sh
popd
# set docker0 to promiscuous mode
sudo ip link set docker0 promisc on
export MINIKUBE_WANTUPDATENOTIFICATION=false
export MINIKUBE_WANTREPORTERRORPROMPT=false
export MINIKUBE_HOME=$HOME
export CHANGE_MINIKUBE_NONE_USER=true
mkdir $HOME/.kube || true
touch $HOME/.kube/config
export KUBECONFIG=$HOME/.kube/config
if [ "$TRAVIS_MINIKUBE_VERSION" == "v0.25.2" ]; then
# bootstrap with localkube -- restricts choice of kube version
sudo -E /usr/local/bin/minikube start --vm-driver=none --bootstrapper=localkube --extra-config=apiserver.Authorization.Mode=RBAC --kubernetes-version=$TRAVIS_KUBE_VERSION
else
# bootstrap with kubeadm (preferred).
sudo -E /usr/local/bin/minikube start --vm-driver=none --bootstrapper=kubeadm --extra-config=apiserver.authorization-mode=RBAC --kubernetes-version=$TRAVIS_KUBE_VERSION
fi
# Wait until we have a ready node in minikube
TIMEOUT=0
TIMEOUT_COUNT=60
until [ $TIMEOUT -eq $TIMEOUT_COUNT ]; do
if [ -n "$(/usr/local/bin/kubectl get nodes | grep Ready)" ]; then
break
fi
echo "minikube is not up yet"
let TIMEOUT=TIMEOUT+1
sleep 5
done
if [ $TIMEOUT -eq $TIMEOUT_COUNT ]; then
echo "Failed to start minikube"
exit 1
fi
minikube update-context
echo "minikube is deployed and reachable"
/usr/local/bin/kubectl describe nodes
# Pods running in kube-system namespace should have cluster-admin role
kubectl create clusterrolebinding add-on-cluster-admin --clusterrole=cluster-admin --serviceaccount=kube-system:default
# Install tiller into the minikube cluster
/usr/local/bin/helm init --service-account default
# Wait for tiller to be ready
TIMEOUT=0
TIMEOUT_COUNT=60
until [ $TIMEOUT -eq $TIMEOUT_COUNT ]; do
TILLER_STATUS=$(/usr/local/bin/kubectl -n kube-system get pods -o wide | grep tiller-deploy | awk '{print $3}')
TILLER_READY_COUNT=$(/usr/local/bin/kubectl -n kube-system get pods -o wide | grep tiller-deploy | awk '{print $2}')
if [[ "$TILLER_STATUS" == "Running" ]] && [[ "$TILLER_READY_COUNT" == "1/1" ]]; then
break
fi
echo "Waiting for tiller to be ready"
/usr/local/bin/kubectl -n kube-system get pods -o wide
let TIMEOUT=TIMEOUT+1
sleep 5
done
if [ $TIMEOUT -eq $TIMEOUT_COUNT ]; then
echo "Failed to install tiller"
# Dump lowlevel logs to help diagnose failure to start tiller
minikube logs
kubectl -n kube-system describe pods
exit 1
fi