Use Hostname instead of IP to install k8s
[iec.git] / src / foundation / scripts / startup.sh
index b58a43b..3b8525b 100755 (executable)
@@ -1,4 +1,5 @@
 #!/bin/bash
 #!/bin/bash
+# shellcheck disable=SC1073,SC1072,SC1039,SC2059,SC2046
 #Install the k8s-master & k8s-worker node from Mgnt node
 #
 set -e
 #Install the k8s-master & k8s-worker node from Mgnt node
 #
 set -e
@@ -7,20 +8,63 @@ set -e
 # Displays the help menu.
 #
 display_help () {
 # Displays the help menu.
 #
 display_help () {
-  echo "Usage: $0 [master ip] [worker ip] [user] [password] "
+  echo "Usage:"
   echo " "
   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 "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 "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
 #
 deploy_k8s () {
   set -o xtrace
@@ -28,25 +72,46 @@ deploy_k8s () {
   INSTALL_SOFTWARE="sudo apt-get update && sudo apt-get install -y git &&\
            sudo rm -rf ~/.kube ~/iec &&\
            git clone ${REPO_URL} &&\
   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
 
   #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"
   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
 
   #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}
+
 }
 
 #
 }
 
 #
@@ -56,38 +121,71 @@ check_k8s_status(){
   set -o xtrace
 
   VERIFY_K8S="cd iec/src/foundation/scripts/ && source nginx.sh"
   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
 
 
 deploy_k8s
 
+sleep 20
+
 check_k8s_status
 check_k8s_status