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