f9f137df5ae434258bb3543562e48cc71816cc0f
[iec.git] / src / foundation / scripts / startup.sh
1 #!/bin/bash
2 #Install the k8s-master & k8s-worker node from Mgnt node
3 #
4 set -e
5
6 #
7 # Displays the help menu.
8 #
9 display_help () {
10   echo "Usage:"
11   echo " "
12   echo "This script can help you to deploy a simple iec testing"
13   echo "environments."
14   echo "Firstly, the master node and worker node information must"
15   echo "be added into config file which will be used for deployment."
16   echo ""
17   echo "Secondly, there should be an user on each node which will be"
18   echo "used to install the corresponding software on master and"
19   echo "worker nodes. At the same time, this user should be enable to"
20   echo "run the sudo command without input password on the hosts."
21   echo ""
22   echo "In the end, some optional parameters could be directly passed"
23   echo "to startup.sh by shell for easy customizing your own IEC"
24   echo "environments:"
25   echo "-k|--kube:      ---- The version of k8s"
26   echo "-c|--cni-ver:   ---- Kubernetes-cni version"
27   echo "-C|--cni:       ---- CNI type: calico/flannel"
28   echo ""
29   echo "Example usages:"
30   echo "   ./startup.sh #Deploy with default parameters"
31   echo "    #Deploy the flannel with 1.15.2 K8s"
32   echo "   ./startup.sh -C flannel -k 1.15.2 -c 0.7.5"
33   exit
34 }
35
36
37
38 #
39 # Deploy k8s.
40 #
41 deploy_k8s () {
42   set -o xtrace
43
44   INSTALL_SOFTWARE="sudo apt-get update && sudo apt-get install -y git &&\
45            sudo rm -rf ~/.kube ~/iec &&\
46            git clone ${REPO_URL} &&\
47            cd iec/src/foundation/scripts/ && source k8s_common.sh $KUBE_VERSION $CNI_VERSION"
48
49   #Automatic deploy the K8s environments on Master node
50   SETUP_MASTER="cd iec/src/foundation/scripts/ && source k8s_master.sh ${K8S_MASTER_IP}"
51   sshpass -p ${K8S_MASTERPW} ssh -o StrictHostKeyChecking=no ${HOST_USER}@${K8S_MASTER_IP} ${INSTALL_SOFTWARE}
52   sshpass -p ${K8S_MASTERPW} ssh -o StrictHostKeyChecking=no ${HOST_USER}@${K8S_MASTER_IP} ${SETUP_MASTER} | tee ${LOG_FILE}
53
54   TOKEN=$(grep "\--token " ./${LOG_FILE})
55   TOKEN_ID=$(echo ${TOKEN#*"token "}|cut -f1 -d' ')
56
57   SH256=$(grep "\--discovery-token-ca-cert-hash " ./${LOG_FILE})
58   TOKEN_CA_SH256=${SH256#*"sha256:"}
59
60   KUBEADM_JOIN_CMD="kubeadm join ${K8S_MASTER_IP}:6443 --token ${TOKEN_ID} --discovery-token-ca-cert-hash sha256:${TOKEN_CA_SH256}"
61
62   #Automatic deploy the K8s environments on each worker-node
63   SETUP_WORKER="cd iec/src/foundation/scripts/ && source k8s_worker.sh"
64
65   for worker in "${K8S_WORKER_GROUP[@]}"
66   do
67     ip_addr="$(cut -d',' -f1 <<<${worker})"
68     passwd="$(cut -d',' -f2 <<<${worker})"
69     echo "Install & Deploy on ${ip_addr}. password:${passwd}"
70
71     sshpass -p ${passwd} ssh -o StrictHostKeyChecking=no ${HOST_USER}@${ip_addr} ${INSTALL_SOFTWARE}
72     sshpass -p ${passwd} ssh -o StrictHostKeyChecking=no ${HOST_USER}@${ip_addr} "echo \"sudo ${KUBEADM_JOIN_CMD}\" >> ./iec/src/foundation/scripts/k8s_worker.sh"
73     sleep 2
74     if [ -n "${CNI_TYPE}" ] && [ ${CNI_TYPE} == "contivpp" ] && [ -n "${DEV_NAME[$ip_addr]}" ]
75     then
76       CONTIVPP_CONFIG="cd iec/src/foundation/scripts/cni/contivpp && sudo ./contiv-update-config.sh ${DEV_NAME[$ip_addr]}"
77       sshpass -p ${passwd} ssh -o StrictHostKeyChecking=no ${HOST_USER}@${ip_addr} $CONTIVPP_CONFIG
78     fi
79
80     sshpass -p ${passwd} ssh -o StrictHostKeyChecking=no ${HOST_USER}@${ip_addr} ${SETUP_WORKER}
81     sshpass -p ${passwd} ssh -o StrictHostKeyChecking=no ${HOST_USER}@${ip_addr} "sudo swapon -a"
82   done
83
84
85   #Deploy etcd & CNI from master node
86   SETUP_CNI="cd iec/src/foundation/scripts && source setup-cni.sh $CLUSTER_IP $POD_NETWORK_CIDR $CNI_TYPE"
87   sshpass -p ${K8S_MASTERPW} ssh -o StrictHostKeyChecking=no ${HOST_USER}@${K8S_MASTER_IP} ${SETUP_CNI}
88   SETUP_HELM="cd iec/src/foundation/scripts && source helm.sh"
89   sshpass -p ${K8S_MASTERPW} ssh -o StrictHostKeyChecking=no ${HOST_USER}@${K8S_MASTER_IP} ${SETUP_HELM}
90
91 }
92
93 #
94 # Check the K8s environments
95 #
96 check_k8s_status(){
97   set -o xtrace
98
99   VERIFY_K8S="cd iec/src/foundation/scripts/ && source nginx.sh"
100   sshpass -p ${K8S_MASTERPW} ssh -o StrictHostKeyChecking=no ${HOST_USER}@${K8S_MASTER_IP} ${VERIFY_K8S}
101 }
102
103 #
104 # print environments
105 #
106 printOption(){
107   echo "K8S_MASTER_IP:${K8S_MASTER_IP}"
108   echo "HOST_USER:${HOST_USER}"
109   echo "REPO_URL:${REPO_URL}"
110
111   echo "The number of K8s-Workers:${#K8S_WORKER_GROUP[@]}"
112   for worker in "${K8S_WORKER_GROUP[@]}"
113   do
114     ip_addr="$(cut -d',' -f1 <<<${worker})"
115     passwd="$(cut -d',' -f2 <<<${worker})"
116     echo "Install & Deploy on ${ip_addr}. password:${passwd}"
117   done
118
119   echo "KUBE_VERSION: ${KUBE_VERSION}"
120   echo "CNI_TPYE: ${CNI_TYPE}"
121   echo "CLUSTER_IP: ${CLUSTER_IP}"
122   echo "POD_NETWORK_CIDR: ${POD_NETWORK_CIDR}"
123 }
124
125 # Read the configuration file
126 source config
127
128 rm -f "${LOG_FILE}"
129
130 ARGS=`getopt -a -o C:k:c:h -l cni:,kube:,cni-ver:,help -- "$@"`
131 eval set -- "${ARGS}"
132 while true
133 do
134         case "$1" in
135         -C|--cni)
136                 CNI_TYPE="$2"
137                 echo "CNI_TYPE=$2"
138                 shift
139                 ;;
140         -k|--kube)
141                 echo "This is config kube version:$2"
142                 KUBE_VERSION="$2"
143                 shift
144                 ;;
145         -c|--cni-ver)
146                 echo "This is config cni version:$2"
147                 CNI_VERSION="$2"
148                 shift
149                 ;;
150         -h|--help)
151                 echo "this is help case"
152                 display_help
153                 ;;
154         --)
155                 printOption
156                 shift
157                 break
158                 ;;
159         esac
160 shift
161 done
162
163 deploy_k8s
164
165 sleep 20
166
167 check_k8s_status