k8s-cloud-provider/devstack/plugin.sh

185 lines
5.9 KiB
Bash
Executable File

#!/bin/bash
#
# lib/dlm
#
# Functions to control the installation and configuration of kubernetes with the
# external OpenStack cloud provider enabled.
# Save trace setting
_XTRACE_K8S_PROVIDER=$(set +o | grep xtrace)
set -o xtrace
BASE_DIR=$(cd $(dirname $BASH_SOURCE)/.. && pwd)
# Defaults
# --------
export GOPATH=${BASE_DIR}/go
CONFORMANCE_REPO=${CONFORMANCE_REPO:-github.com/kubernetes/kubernetes}
K8S_SRC=${GOPATH}/src/k8s.io/kubernetes
ETCD_VERSION=v3.1.4
function install_prereqs {
# Install pre-reqs
$BASE_DIR/tools/install-distro-packages.sh
$BASE_DIR/tools/test-setup.sh
install_package nfs-common
}
function install_docker {
# Install docker if needed
if ! is_package_installed docker-engine; then
sudo apt-key adv --keyserver hkp://p80.pool.sks-keyservers.net:80 --recv-keys 58118E89F3A912897C070ADBF76221572C52609D
sudo apt-add-repository 'deb http://apt.dockerproject.org/repo ubuntu-xenial main'
sudo apt-get update
sudo apt-cache policy docker-engine
sudo apt-get install -y docker-engine=1.12.6-0~ubuntu-xenial
sudo cat /lib/systemd/system/docker.service
sudo sed -r -i "s|(ExecStart)=(.+)|\1=\2 --iptables=false|" /lib/systemd/system/docker.service
sudo cat /lib/systemd/system/docker.service
sudo systemctl daemon-reload
sudo systemctl restart docker
sudo systemctl status docker
sudo ifconfig -a
fi
docker --version
# Get the latest stable version of kubernetes
export K8S_VERSION=$(curl -sS https://storage.googleapis.com/kubernetes-release/release/stable.txt)
echo "K8S_VERSION : ${K8S_VERSION}"
echo "Starting docker service"
sudo systemctl enable docker.service
sudo systemctl start docker.service --ignore-dependencies
echo "Checking docker service"
sudo docker ps
}
function install_k8s_cloud_provider {
echo_summary "Installing Devstack Plugin for k8s-cloud-provider"
# upstream kubernetes has not moved to 1.8 yet, so use 1.7.5
sudo curl -sL -o ./gimme https://raw.githubusercontent.com/travis-ci/gimme/master/gimme
sudo chmod +x ./gimme
sudo ./gimme 1.7.5
env | grep HOME
source $HOME/.gimme/envs/go1.7.5.env
# golang env details
go env
go version
go get -u github.com/jteeuwen/go-bindata/go-bindata || true
go get -u github.com/cloudflare/cfssl/cmd/... || true
# Get Kubernetes from source
mkdir -p ${GOPATH}/src/k8s.io/
if [ ! -d "${K8S_SRC}" ]; then
git clone https://${CONFORMANCE_REPO} ${K8S_SRC}
pushd ${K8S_SRC} >/dev/null
git remote update
git fetch --all --tags --prune
#git checkout tags/v1.7.0-alpha.1
popd >/dev/null
fi
# Run the script that builds kubernetes from source and starts the processes
pushd ${K8S_SRC} >/dev/null
hack/install-etcd.sh
export PATH=${K8S_SRC}/third_party/etcd:$GOPATH/bin:${PATH}
# Seed the log files so devstack-gate can capture the logs
export LOG_DIR=${SCREEN_LOGDIR:-/opt/stack/logs}
sudo mkdir -p $LOG_DIR
sudo touch $LOG_DIR/kube-apiserver.log;sudo ln -s $LOG_DIR/kube-apiserver.log $LOG_DIR/screen-kube-apiserver.log
sudo touch $LOG_DIR/kube-controller-manager.log;sudo ln -s $LOG_DIR/kube-controller-manager.log $LOG_DIR/screen-kube-controller-manager.log
sudo touch $LOG_DIR/kube-proxy.log;sudo ln -s $LOG_DIR/kube-proxy.log $LOG_DIR/screen-kube-proxy.log
sudo touch $LOG_DIR/kube-scheduler.log;sudo ln -s $LOG_DIR/kube-scheduler.log $LOG_DIR/screen-kube-scheduler.log
sudo touch $LOG_DIR/kubelet.log;sudo ln -s $LOG_DIR/kubelet.log $LOG_DIR/screen-kubelet.log
# Turn on/off a few things in local-up-cluster.sh
export ALLOW_PRIVILEGED=true
export KUBE_ENABLE_CLUSTER_DNS=true
export KUBE_ENABLE_CLUSTER_DASHBOARD=true
export ALLOW_SECURITY_CONTEXT=true
export ALLOW_ANY_TOKEN=true
export ENABLE_HOSTPATH_PROVISIONER=true
# Use the docker0's ip address for kubedns to work
export API_HOST_IP="172.17.0.1"
export KUBELET_HOST="0.0.0.0"
export ENABLE_CRI=false
# echo "Stop Docker iptable rules that interfere with kubedns"
# sudo iptables -D FORWARD -j DOCKER-ISOLATION
# sudo iptables -A DOCKER-ISOLATION -j RETURN
# sudo iptables --flush DOCKER-ISOLATION
# sudo iptables -X DOCKER-ISOLATION
echo "Stopping firewall and allowing everything..."
sudo iptables -F
sudo iptables -X
sudo iptables -t nat -F
sudo iptables -t nat -X
sudo iptables -t mangle -F
sudo iptables -t mangle -X
sudo iptables -P INPUT ACCEPT
sudo iptables -P FORWARD ACCEPT
sudo iptables -P OUTPUT ACCEPT
run_process kubernetes "sudo -E PATH=$PATH hack/local-up-cluster.sh"
popd >/dev/null
}
# cleanup_k8s_cloud_provider() - Remove residual data files, anything left over from previous
# runs that a clean run would need to clean up
function cleanup_k8s_cloud_provider {
echo_summary "Cleaning up Devstack Plugin for k8s-cloud-provider"
sudo rm -rf "$K8S_SRC"
sudo rm -rf "$DEST/etcd"
}
function stop_k8s_cloud_provider {
echo_summary "Stop Devstack Plugin for k8s-cloud-provider"
stop_process kubernetes
stop_process etcd-server
}
# check for service enabled
if is_service_enabled k8s-cloud-provider; then
if [[ "$1" == "stack" && "$2" == "pre-install" ]]; then
# no-op
:
elif [[ "$1" == "stack" && "$2" == "install" ]]; then
install_docker
install_prereqs
elif [[ "$1" == "stack" && "$2" == "post-config" ]]; then
install_k8s_cloud_provider
elif [[ "$1" == "stack" && "$2" == "extra" ]]; then
# no-op
:
fi
if [[ "$1" == "unstack" ]]; then
stop_k8s_cloud_provider
fi
if [[ "$1" == "clean" ]]; then
cleanup_k8s_cloud_provider
fi
fi
# Restore xtrace
$_XTRACE_K8S_PROVIDER
# Tell emacs to use shell-script-mode
## Local variables:
## mode: shell-script
## End: