X-Git-Url: https://gerrit.akraino.org/r/gitweb?a=blobdiff_plain;f=src%2Ffoundation%2Fscripts%2Fstartup.sh;h=3b8525b274b06156f33618d5892f975aeba97f76;hb=55fbf4451a30337c7db112433126c07c091dbc07;hp=d660f4ede3e0955cc5892759c51582976aa3bbce;hpb=38539411e0db414bd281be6313e080cbff7bab13;p=iec.git diff --git a/src/foundation/scripts/startup.sh b/src/foundation/scripts/startup.sh index d660f4e..3b8525b 100755 --- a/src/foundation/scripts/startup.sh +++ b/src/foundation/scripts/startup.sh @@ -1,4 +1,5 @@ #!/bin/bash +# shellcheck disable=SC1073,SC1072,SC1039,SC2059,SC2046 #Install the k8s-master & k8s-worker node from Mgnt node # set -e @@ -7,20 +8,63 @@ 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 + ;; + ovn-kubernetes) + OVN_KUBERNETES_PRECONFIG="cd iec/src/foundation/scripts/cni/ovn-kubernetes && ./clean_old_ovs.sh" + sshpass -p ${passwd} ssh -o StrictHostKeyChecking=no ${HOST_USER}@${ip_addr} $OVN_KUBERNETES_PRECONFIG + ;; + *) + ;; +esac +} # -# Deploy k8s with calico. +# Deploy k8s. # deploy_k8s () { set -o xtrace @@ -28,52 +72,120 @@ deploy_k8s () { INSTALL_SOFTWARE="sudo apt-get update && sudo apt-get install -y git &&\ sudo rm -rf ~/.kube ~/iec &&\ git clone ${REPO_URL} &&\ - cd iec/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/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} - KUBEADM_JOIN_CMD=$(grep "kubeadm join " ./kubeadm.log) + TOKEN=$(grep "\--token " ./${LOG_FILE}) + TOKEN_ID=$(echo ${TOKEN#*"token "}|cut -f1 -d' ') - #Automatic deploy the K8s environments on Worker node - SETUP_WORKER="cd iec/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/scripts/k8s_worker.sh" - sshpass -p ${K8S_WORKERPW} ssh ${HOST_USER}@${K8S_WORKER01_IP} ${SETUP_WORKER} + SH256=$(grep "\--discovery-token-ca-cert-hash " ./${LOG_FILE}) + TOKEN_CA_SH256=${SH256#*"sha256:"} - #Deploy etcd & CNI from master node - #There may be more options in future. e.g: Calico, Contiv-vpp, Ovn-k8s ... - SETUP_CNI="cd iec/scripts && source setup-cni.sh" - sshpass -p ${K8S_MASTERPW} ssh ${HOST_USER}@${K8S_MASTER_IP} ${SETUP_CNI} -} + 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" -PASSWD=${4:-"123456"} -HOST_USER=${3:-"iec"} + 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}" -K8S_MASTER_IP=${1:-"10.169.40.171"} -K8S_MASTERPW=${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 -K8S_WORKER01_IP=${2:-"10.169.41.172"} -K8S_WORKERPW=${PASSWD} + 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 -REPO_URL="https://gerrit.akraino.org/r/iec" -LOG_FILE="kubeadm.log" -if [ -f "./${LOG_FILE}" ]; then - rm "${LOG_FILE}" -fi + #Deploy etcd & CNI from master node + 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} + +} # -# Init +# Check the K8s environments # -if [ $# -lt 4 ] -then - display_help - exit 0 -fi +check_k8s_status(){ + set -o xtrace + VERIFY_K8S="cd iec/src/foundation/scripts/ && source nginx.sh" + sshpass -p ${K8S_MASTERPW} ssh -o StrictHostKeyChecking=no ${HOST_USER}@${K8S_MASTER_IP} ${VERIFY_K8S} +} + +# +# print environments +# +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