stackube/install/deploy_kubernetes.sh

158 lines
4.8 KiB
Bash

#!/bin/bash
# Copyright (c) 2017 OpenStack Foundation.
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
# You may obtain a copy of the License at
#
# http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License.
programDir=`dirname $0`
programDir=$(readlink -f $programDir)
parentDir="$(dirname $programDir)"
programDirBaseName=$(basename $programDir)
set -o errexit
set -o nounset
set -o pipefail
set -x
source $(readlink -f $1)
[ "${CONTROL_NODE_PUBLIC_IP}" ]
[ "${CONTROL_NODE_PRIVATE_IP}" ]
[ "${NETWORK_NODES_PRIVATE_IP}" ]
[ "${COMPUTE_NODES_PRIVATE_IP}" ]
# TODO(harry): how to merge this with devstack/settings
export KUBERNETES_API_PUBLIC_IP="${CONTROL_NODE_PUBLIC_IP}"
export KUBERNETES_API_PRIVATE_IP="${CONTROL_NODE_PRIVATE_IP}"
export KEYSTONE_URL="https://${CONTROL_NODE_PRIVATE_IP}:5001/v2.0"
export KEYSTONE_ADMIN_URL="https://${CONTROL_NODE_PRIVATE_IP}:35358/v2.0"
export CLUSTER_CIDR="10.244.0.0/16"
export CLUSTER_GATEWAY="10.244.0.1"
export CONTAINER_CIDR="10.244.1.0/24"
export FRAKTI_VERSION="v1.1.1"
# Default release of Kubernetes is latest stable
KUBE_RELEASE=${KUBE_RELEASE:-"stable-1.8"}
# Get stable version from release URL
version=`curl -sSL dl.k8s.io/release/${KUBE_RELEASE}.txt`
# Change v1.8.2 to 1.8.2
export KUBE_VERSION=${version#"v"}
########## control & compute nodes ##########
allIpList=`echo "
${CONTROL_NODE_PRIVATE_IP}
${COMPUTE_NODES_PRIVATE_IP}" | sed -e 's/,/\n/g' | sort | uniq `
# hyperd frakti
for IP in ${allIpList}; do
ssh root@${IP} 'mkdir -p /tmp/stackube_install'
scp ${programDir}/kubernetes/deploy_hyperd_frakti.sh root@${IP}:/tmp/stackube_install/
ssh root@${IP} "export FRAKTI_VERSION='${FRAKTI_VERSION}'
export STREAMING_SERVER_ADDR='${IP}'
/bin/bash /tmp/stackube_install/deploy_hyperd_frakti.sh"
done
# kubeadm kubectl kubelet
for IP in ${allIpList}; do
ssh root@${IP} 'mkdir -p /tmp/stackube_install'
scp ${programDir}/kubernetes/deploy_kubeadm_kubectl_kubelet.sh root@${IP}:/tmp/stackube_install/
ssh root@${IP} "/bin/bash /tmp/stackube_install/deploy_kubeadm_kubectl_kubelet.sh"
done
########## control node ##########
# kubernetes master
sed -i "s|__KEYSTONE_URL__|${KEYSTONE_URL}|g" ${programDir}/kubernetes/kubeadm.yaml
sed -i "s|__POD_NET_CIDR__|${CLUSTER_CIDR}|g" ${programDir}/kubernetes/kubeadm.yaml
sed -i "s/__KUBERNETES_API_PUBLIC_IP__/${KUBERNETES_API_PUBLIC_IP}/g" ${programDir}/kubernetes/kubeadm.yaml
sed -i "s/__KUBERNETES_API_PRIVATE_IP__/${KUBERNETES_API_PRIVATE_IP}/g" ${programDir}/kubernetes/kubeadm.yaml
/bin/bash ${programDir}/kubernetes/deploy_kubernetes_init_master.sh
sleep 3
export KUBECONFIG=/etc/kubernetes/admin.conf
# install stackube addons
/bin/bash ${programDir}/kubernetes/deploy_kubernetes_install_stackube_addons.sh
sleep 10
# add nodes
KUBEADM_TOKEN=`kubeadm token list | grep 'kubeadm init' | head -1 | awk '{print $1}'`
allIpList=`echo "
${COMPUTE_NODES_PRIVATE_IP}" | sed -e 's/,/\n/g' | sort | uniq | grep -v "${CONTROL_NODE_PRIVATE_IP}"`
for IP in ${allIpList}; do
ssh root@${IP} "kubeadm join --token ${KUBEADM_TOKEN} ${CONTROL_NODE_PRIVATE_IP}:6443"
done
# Enable schedule pods on the master (control node) if it's also designated as a compute node
set +e
check=`echo "
${COMPUTE_NODES_PRIVATE_IP}" | sed -e 's/,/\n/g' | sort | uniq | grep "${CONTROL_NODE_PRIVATE_IP}" `
if [ "${check}" ]; then
kubectl taint nodes $(hostname) node-role.kubernetes.io/master-
fi
set -e
# certificate approve
sleep 5
/bin/bash ${programDir}/kubernetes/deploy_kubernetes_certificate_approve.sh
## check
sleep 3
kubectl get nodes
kubectl get csr --all-namespaces
########## control (k8s master) & compute nodes ###########
allIpList=`echo "
${CONTROL_NODE_PRIVATE_IP}
${COMPUTE_NODES_PRIVATE_IP}" | sed -e 's/,/\n/g' | sort | uniq `
# install ovs for cni
for IP in ${allIpList}; do
ssh root@${IP} "yum install centos-release-openstack-ocata.noarch -y"
ssh root@${IP} "yum install openvswitch -y"
done
# install ceph for kubelet
for IP in ${allIpList}; do
ssh root@${IP} "yum install centos-release-openstack-ocata.noarch -y"
ssh root@${IP} "yum install ceph -y"
ssh root@${IP} "systemctl disable ceph.target ceph-mds.target ceph-mon.target ceph-osd.target"
scp -r /var/lib/stackube/ceph/ceph_mon_config/* root@${IP}:/etc/ceph/
ssh root@${IP} "ceph -s"
ssh root@${IP} "rbd -p cinder --id cinder --keyring=/etc/ceph/ceph.client.cinder.keyring ls"
done
exit 0