175 lines
5.5 KiB
Bash
Executable File
175 lines
5.5 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 || true
|
|
sudo apt-key adv --keyserver hkp://pgp.mit.edu:80 --recv-keys 58118E89F3A912897C070ADBF76221572C52609D || true
|
|
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"
|
|
|
|
# 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
|
|
|
|
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 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
|
|
export HOSTNAME_OVERRIDE=$(ip route get 1.1.1.1 | awk '{print $7}')
|
|
export LOG_LEVEL=10
|
|
|
|
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:
|