#!/bin/bash
+# shellcheck disable=SC1073,SC1072,SC1039,SC2059,SC2046
#Install the k8s-master & k8s-worker node from Mgnt node
#
set -e
# Displays the help menu.
#
display_help () {
- echo "Usage: $0 [master ip] [worker ip] [user] [password] "
+ echo "Usage:"
echo " "
- echo "There should be an user which will be used to install the "
- echo "corresponding software on master & worker node. This user can "
+ echo "This script can help you to deploy a simple iec testing"
+ echo "environments."
+ echo "Firstly, the master node and worker node information must"
+ echo "be added into config file which will be used for deployment."
+ echo ""
+ echo "Secondly, there should be an user on each node which will be"
+ echo "used to install the corresponding software on master and"
+ echo "worker nodes. At the same time, this user should be enable to"
echo "run the sudo command without input password on the hosts."
- echo " "
+ echo ""
+ echo "In the end, some optional parameters could be directly passed"
+ echo "to startup.sh by shell for easy customizing your own IEC"
+ echo "environments:"
+ echo "-k|--kube: ---- The version of k8s"
+ echo "-c|--cni-ver: ---- Kubernetes-cni version"
+ echo "-C|--cni: ---- CNI type: calico/flannel"
+ echo ""
echo "Example usages:"
- echo " ./startup.sh 10.169.40.171 10.169.41.172 iec 123456"
+ echo " ./startup.sh #Deploy with default parameters"
+ echo " #Deploy the flannel with 1.15.2 K8s"
+ echo " ./startup.sh -C flannel -k 1.15.2 -c 0.7.5"
+ exit
}
-
+#
+# Setup system configuration before invoke setup-cni.sh
+#
+k8s_worker_preconfigure() {
+case ${CNI_TYPE} in
+ contivpp)
+ if [ -n "${DEV_NAME[$ip_addr]}" ]
+ then
+ CONTIVPP_CONFIG="cd iec/src/foundation/scripts/cni/contivpp && sudo ./contiv-update-config.sh ${DEV_NAME[$ip_addr]}"
+ sshpass -p ${passwd} ssh -o StrictHostKeyChecking=no ${HOST_USER}@${ip_addr} $CONTIVPP_CONFIG
+ fi
+ ;;
+ danm)
+ DANM_CONFIG="cd iec/src/foundation/scripts/cni/danm && sudo ./danm_install.sh"
+ sshpass -p ${passwd} ssh -o StrictHostKeyChecking=no ${HOST_USER}@${ip_addr} $DANM_CONFIG
+ ;;
+ cilium)
+ CILIUM_CONFIG="cd iec/src/foundation/scripts/cni/cilium && sudo ./cilium_install.sh"
+ sshpass -p ${passwd} ssh -o StrictHostKeyChecking=no ${HOST_USER}@${ip_addr} $CILIUM_CONFIG
+ ;;
+ *)
+ ;;
+esac
+}
#
-# Deploy k8s with calico.
+# Deploy k8s.
#
deploy_k8s () {
set -o xtrace
INSTALL_SOFTWARE="sudo apt-get update && sudo apt-get install -y git &&\
sudo rm -rf ~/.kube ~/iec &&\
git clone ${REPO_URL} &&\
- cd iec/src/foundation/scripts/ && source k8s_common.sh"
+ cd iec/src/foundation/scripts/ && source k8s_common.sh $KUBE_VERSION $CNI_VERSION"
#Automatic deploy the K8s environments on Master node
- SETUP_MASTER="cd iec/src/foundation/scripts/ && source k8s_master.sh ${K8S_MASTER_IP}"
- sshpass -p ${K8S_MASTERPW} ssh ${HOST_USER}@${K8S_MASTER_IP} ${INSTALL_SOFTWARE}
- sshpass -p ${K8S_MASTERPW} ssh ${HOST_USER}@${K8S_MASTER_IP} ${SETUP_MASTER} | tee kubeadm.log
+ SETUP_MASTER="cd iec/src/foundation/scripts/ && source k8s_master.sh ${K8S_MASTER_IP} ${POD_NETWORK_CIDR} ${SVC_CIDR}"
+ sshpass -p ${K8S_MASTERPW} ssh -o StrictHostKeyChecking=no ${HOST_USER}@${K8S_MASTER_IP} ${INSTALL_SOFTWARE}
+ sshpass -p ${K8S_MASTERPW} ssh -o StrictHostKeyChecking=no ${HOST_USER}@${K8S_MASTER_IP} ${SETUP_MASTER} | tee ${LOG_FILE}
+
+ TOKEN=$(grep "\--token " ./${LOG_FILE})
+ TOKEN_ID=$(echo ${TOKEN#*"token "}|cut -f1 -d' ')
- KUBEADM_JOIN_CMD=$(grep "kubeadm join " ./kubeadm.log)
+ SH256=$(grep "\--discovery-token-ca-cert-hash " ./${LOG_FILE})
+ TOKEN_CA_SH256=${SH256#*"sha256:"}
- #Automatic deploy the K8s environments on Worker node
+ KUBEADM_JOIN_CMD="kubeadm join ${K8S_MASTER_IP}:6443 --token ${TOKEN_ID} --discovery-token-ca-cert-hash sha256:${TOKEN_CA_SH256}"
+
+ #Automatic deploy the K8s environments on each worker-node
SETUP_WORKER="cd iec/src/foundation/scripts/ && source k8s_worker.sh"
- sshpass -p ${K8S_WORKERPW} ssh ${HOST_USER}@${K8S_WORKER01_IP} ${INSTALL_SOFTWARE}
- sshpass -p ${K8S_WORKERPW} ssh ${HOST_USER}@${K8S_WORKER01_IP} "echo \"sudo ${KUBEADM_JOIN_CMD}\" >> ./iec/src/foundation/scripts/k8s_worker.sh"
- sshpass -p ${K8S_WORKERPW} ssh ${HOST_USER}@${K8S_WORKER01_IP} ${SETUP_WORKER}
+
+ for worker in "${K8S_WORKER_GROUP[@]}"
+ do
+ ip_addr="$(cut -d',' -f1 <<<${worker})"
+ passwd="$(cut -d',' -f2 <<<${worker})"
+ echo "Install & Deploy on ${ip_addr}. password:${passwd}"
+
+ sshpass -p ${passwd} ssh -o StrictHostKeyChecking=no ${HOST_USER}@${ip_addr} ${INSTALL_SOFTWARE}
+ sshpass -p ${passwd} ssh -o StrictHostKeyChecking=no ${HOST_USER}@${ip_addr} "echo \"sudo ${KUBEADM_JOIN_CMD}\" >> ./iec/src/foundation/scripts/k8s_worker.sh"
+ sleep 2
+ k8s_worker_preconfigure
+
+ sshpass -p ${passwd} ssh -o StrictHostKeyChecking=no ${HOST_USER}@${ip_addr} ${SETUP_WORKER}
+ sshpass -p ${passwd} ssh -o StrictHostKeyChecking=no ${HOST_USER}@${ip_addr} "sudo swapon -a"
+ done
+
#Deploy etcd & CNI from master node
- #There may be more options in future. e.g: Calico, Contiv-vpp, Ovn-k8s ...
- SETUP_CNI="cd iec/src/foundation/scripts && source setup-cni.sh"
- sshpass -p ${K8S_MASTERPW} ssh ${HOST_USER}@${K8S_MASTER_IP} ${SETUP_CNI}
+ SETUP_CNI="cd iec/src/foundation/scripts && source setup-cni.sh $CNI_TYPE $POD_NETWORK_CIDR $K8S_MASTER_IP $SVC_CIDR $CLUSTER_IP"
+ sshpass -p ${K8S_MASTERPW} ssh -o StrictHostKeyChecking=no ${HOST_USER}@${K8S_MASTER_IP} ${SETUP_CNI}
+ SETUP_HELM="cd iec/src/foundation/scripts && source helm.sh"
+ sshpass -p ${K8S_MASTERPW} ssh -o StrictHostKeyChecking=no ${HOST_USER}@${K8S_MASTER_IP} ${SETUP_HELM}
+
}
#
set -o xtrace
VERIFY_K8S="cd iec/src/foundation/scripts/ && source nginx.sh"
- sshpass -p ${K8S_MASTERPW} ssh ${HOST_USER}@${K8S_MASTER_IP} ${VERIFY_K8S}
-
- sleep 30
+ sshpass -p ${K8S_MASTERPW} ssh -o StrictHostKeyChecking=no ${HOST_USER}@${K8S_MASTER_IP} ${VERIFY_K8S}
}
-
-PASSWD=${4:-"123456"}
-HOST_USER=${3:-"iec"}
-
-K8S_MASTER_IP=${1:-"10.169.40.171"}
-K8S_MASTERPW=${PASSWD}
-
-K8S_WORKER01_IP=${2:-"10.169.41.172"}
-K8S_WORKERPW=${PASSWD}
-
-REPO_URL="https://gerrit.akraino.org/r/iec"
-LOG_FILE="kubeadm.log"
-
-if [ -f "./${LOG_FILE}" ]; then
- rm "${LOG_FILE}"
-fi
-
#
-# Init
+# print environments
#
-if [ $# -lt 4 ]
-then
- display_help
- exit 0
-fi
+printOption(){
+ echo "K8S_MASTER_IP:${K8S_MASTER_IP}"
+ echo "HOST_USER:${HOST_USER}"
+ echo "REPO_URL:${REPO_URL}"
+
+ echo "The number of K8s-Workers:${#K8S_WORKER_GROUP[@]}"
+ for worker in "${K8S_WORKER_GROUP[@]}"
+ do
+ ip_addr="$(cut -d',' -f1 <<<${worker})"
+ passwd="$(cut -d',' -f2 <<<${worker})"
+ echo "Install & Deploy on ${ip_addr}. password:${passwd}"
+ done
+
+ echo "KUBE_VERSION: ${KUBE_VERSION}"
+ echo "CNI_TPYE: ${CNI_TYPE}"
+ echo "CLUSTER_IP: ${CLUSTER_IP}"
+ echo "POD_NETWORK_CIDR: ${POD_NETWORK_CIDR}"
+}
+# Read the configuration file
+source config
+
+rm -f "${LOG_FILE}"
+
+ARGS=`getopt -a -o C:k:c:h -l cni:,kube:,cni-ver:,help -- "$@"`
+eval set -- "${ARGS}"
+while true
+do
+ case "$1" in
+ -C|--cni)
+ CNI_TYPE="$2"
+ echo "CNI_TYPE=$2"
+ shift
+ ;;
+ -k|--kube)
+ echo "This is config kube version:$2"
+ KUBE_VERSION="$2"
+ shift
+ ;;
+ -c|--cni-ver)
+ echo "This is config cni version:$2"
+ CNI_VERSION="$2"
+ shift
+ ;;
+ -h|--help)
+ echo "this is help case"
+ display_help
+ ;;
+ --)
+ printOption
+ shift
+ break
+ ;;
+ esac
+shift
+done
deploy_k8s
+sleep 20
+
check_k8s_status