Use Hostname instead of IP to install k8s
[iec.git] / src / foundation / scripts / startup.sh
index d660f4e..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,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} &&\
   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
 
   #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
 
 deploy_k8s
+
+sleep 20
+
+check_k8s_status