123039d4c77ed3219d7047f69e4b0e3234ea9b21
[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     sshpass -p ${passwd} ssh -o StrictHostKeyChecking=no ${HOST_USER}@${ip_addr} "swapon -a"
75     sshpass -p ${passwd} ssh -o StrictHostKeyChecking=no ${HOST_USER}@${ip_addr} ${SETUP_WORKER}
76
77   done
78
79
80   #Deploy etcd & CNI from master node
81   SETUP_CNI="cd iec/src/foundation/scripts && source setup-cni.sh $CLUSTER_IP $POD_NETWORK_CIDR $CNI_TYPE"
82   sshpass -p ${K8S_MASTERPW} ssh -o StrictHostKeyChecking=no ${HOST_USER}@${K8S_MASTER_IP} ${SETUP_CNI}
83   SETUP_HELM="cd iec/src/foundation/scripts && source helm.sh"
84   sshpass -p ${K8S_MASTERPW} ssh -o StrictHostKeyChecking=no ${HOST_USER}@${K8S_MASTER_IP} ${SETUP_HELM}
85
86 }
87
88 #
89 # Check the K8s environments
90 #
91 check_k8s_status(){
92   set -o xtrace
93
94   VERIFY_K8S="cd iec/src/foundation/scripts/ && source nginx.sh"
95   sshpass -p ${K8S_MASTERPW} ssh -o StrictHostKeyChecking=no ${HOST_USER}@${K8S_MASTER_IP} ${VERIFY_K8S}
96 }
97
98 #
99 # print environments
100 #
101 printOption(){
102   echo "K8S_MASTER_IP:${K8S_MASTER_IP}"
103   echo "HOST_USER:${HOST_USER}"
104   echo "REPO_URL:${REPO_URL}"
105
106   echo "The number of K8s-Workers:${#K8S_WORKER_GROUP[@]}"
107   for worker in "${K8S_WORKER_GROUP[@]}"
108   do
109     ip_addr="$(cut -d',' -f1 <<<${worker})"
110     passwd="$(cut -d',' -f2 <<<${worker})"
111     echo "Install & Deploy on ${ip_addr}. password:${passwd}"
112   done
113
114   echo "KUBE_VERSION: ${KUBE_VERSION}"
115   echo "CNI_TPYE: ${CNI_TYPE}"
116   echo "CLUSTER_IP: ${CLUSTER_IP}"
117   echo "POD_NETWORK_CIDR: ${POD_NETWORK_CIDR}"
118 }
119
120 # Read the configuration file
121 source config
122
123 rm -f "${LOG_FILE}"
124
125 ARGS=`getopt -a -o C:k:c:h -l cni:,kube:,cni-ver:,help -- "$@"`
126 eval set -- "${ARGS}"
127 while true
128 do
129         case "$1" in
130         -C|--cni)
131                 CNI_TYPE="$2"
132                 echo "CNI_TYPE=$2"
133                 shift
134                 ;;
135         -k|--kube)
136                 echo "This is config kube version:$2"
137                 KUBE_VERSION="$2"
138                 shift
139                 ;;
140         -c|--cni-ver)
141                 echo "This is config cni version:$2"
142                 CNI_VERSION="$2"
143                 shift
144                 ;;
145         -h|--help)
146                 echo "this is help case"
147                 display_help
148                 ;;
149         --)
150                 printOption
151                 shift
152                 break
153                 ;;
154         esac
155 shift
156 done
157
158 deploy_k8s
159
160 sleep 20
161
162 check_k8s_status