Integrate cilium CNI into IEC
[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 # Setup system configuration before invoke setup-cni.sh
38 #
39 k8s_worker_preconfigure() {
40 case ${CNI_TYPE} in
41   contivpp)
42     if [ -n "${DEV_NAME[$ip_addr]}" ]
43     then
44       CONTIVPP_CONFIG="cd iec/src/foundation/scripts/cni/contivpp && sudo ./contiv-update-config.sh ${DEV_NAME[$ip_addr]}"
45       sshpass -p ${passwd} ssh -o StrictHostKeyChecking=no ${HOST_USER}@${ip_addr} $CONTIVPP_CONFIG
46     fi
47     ;;
48   danm)
49     DANM_CONFIG="cd iec/src/foundation/scripts/cni/danm && sudo ./danm_install.sh"
50     sshpass -p ${passwd} ssh -o StrictHostKeyChecking=no ${HOST_USER}@${ip_addr} $DANM_CONFIG
51     ;;
52   cilium)
53     CILIUM_CONFIG="cd iec/src/foundation/scripts/cni/cilium && sudo ./cilium_install.sh"
54     sshpass -p ${passwd} ssh -o StrictHostKeyChecking=no ${HOST_USER}@${ip_addr} $CILIUM_CONFIG
55     ;;
56   *)
57     ;;
58 esac
59 }
60
61 #
62 # Deploy k8s.
63 #
64 deploy_k8s () {
65   set -o xtrace
66
67   INSTALL_SOFTWARE="sudo apt-get update && sudo apt-get install -y git &&\
68            sudo rm -rf ~/.kube ~/iec &&\
69            git clone ${REPO_URL} &&\
70            cd iec/src/foundation/scripts/ && source k8s_common.sh $KUBE_VERSION $CNI_VERSION"
71
72   #Automatic deploy the K8s environments on Master node
73   SETUP_MASTER="cd iec/src/foundation/scripts/ && source k8s_master.sh ${K8S_MASTER_IP} ${POD_NETWORK_CIDR} ${SVC_CIDR}"
74   sshpass -p ${K8S_MASTERPW} ssh -o StrictHostKeyChecking=no ${HOST_USER}@${K8S_MASTER_IP} ${INSTALL_SOFTWARE}
75   sshpass -p ${K8S_MASTERPW} ssh -o StrictHostKeyChecking=no ${HOST_USER}@${K8S_MASTER_IP} ${SETUP_MASTER} | tee ${LOG_FILE}
76
77   TOKEN=$(grep "\--token " ./${LOG_FILE})
78   TOKEN_ID=$(echo ${TOKEN#*"token "}|cut -f1 -d' ')
79
80   SH256=$(grep "\--discovery-token-ca-cert-hash " ./${LOG_FILE})
81   TOKEN_CA_SH256=${SH256#*"sha256:"}
82
83   KUBEADM_JOIN_CMD="kubeadm join ${K8S_MASTER_IP}:6443 --token ${TOKEN_ID} --discovery-token-ca-cert-hash sha256:${TOKEN_CA_SH256}"
84
85   #Automatic deploy the K8s environments on each worker-node
86   SETUP_WORKER="cd iec/src/foundation/scripts/ && source k8s_worker.sh"
87
88   for worker in "${K8S_WORKER_GROUP[@]}"
89   do
90     ip_addr="$(cut -d',' -f1 <<<${worker})"
91     passwd="$(cut -d',' -f2 <<<${worker})"
92     echo "Install & Deploy on ${ip_addr}. password:${passwd}"
93
94     sshpass -p ${passwd} ssh -o StrictHostKeyChecking=no ${HOST_USER}@${ip_addr} ${INSTALL_SOFTWARE}
95     sshpass -p ${passwd} ssh -o StrictHostKeyChecking=no ${HOST_USER}@${ip_addr} "echo \"sudo ${KUBEADM_JOIN_CMD}\" >> ./iec/src/foundation/scripts/k8s_worker.sh"
96     sleep 2
97     k8s_worker_preconfigure
98
99     sshpass -p ${passwd} ssh -o StrictHostKeyChecking=no ${HOST_USER}@${ip_addr} ${SETUP_WORKER}
100     sshpass -p ${passwd} ssh -o StrictHostKeyChecking=no ${HOST_USER}@${ip_addr} "sudo swapon -a"
101   done
102
103
104   #Deploy etcd & CNI from master node
105   SETUP_CNI="cd iec/src/foundation/scripts && source setup-cni.sh $CNI_TYPE $POD_NETWORK_CIDR $CLUSTER_IP $K8S_MASTER_IP $SVC_CIDR"
106   sshpass -p ${K8S_MASTERPW} ssh -o StrictHostKeyChecking=no ${HOST_USER}@${K8S_MASTER_IP} ${SETUP_CNI}
107   SETUP_HELM="cd iec/src/foundation/scripts && source helm.sh"
108   sshpass -p ${K8S_MASTERPW} ssh -o StrictHostKeyChecking=no ${HOST_USER}@${K8S_MASTER_IP} ${SETUP_HELM}
109
110 }
111
112 #
113 # Check the K8s environments
114 #
115 check_k8s_status(){
116   set -o xtrace
117
118   VERIFY_K8S="cd iec/src/foundation/scripts/ && source nginx.sh"
119   sshpass -p ${K8S_MASTERPW} ssh -o StrictHostKeyChecking=no ${HOST_USER}@${K8S_MASTER_IP} ${VERIFY_K8S}
120 }
121
122 #
123 # print environments
124 #
125 printOption(){
126   echo "K8S_MASTER_IP:${K8S_MASTER_IP}"
127   echo "HOST_USER:${HOST_USER}"
128   echo "REPO_URL:${REPO_URL}"
129
130   echo "The number of K8s-Workers:${#K8S_WORKER_GROUP[@]}"
131   for worker in "${K8S_WORKER_GROUP[@]}"
132   do
133     ip_addr="$(cut -d',' -f1 <<<${worker})"
134     passwd="$(cut -d',' -f2 <<<${worker})"
135     echo "Install & Deploy on ${ip_addr}. password:${passwd}"
136   done
137
138   echo "KUBE_VERSION: ${KUBE_VERSION}"
139   echo "CNI_TPYE: ${CNI_TYPE}"
140   echo "CLUSTER_IP: ${CLUSTER_IP}"
141   echo "POD_NETWORK_CIDR: ${POD_NETWORK_CIDR}"
142 }
143
144 # Read the configuration file
145 source config
146
147 rm -f "${LOG_FILE}"
148
149 ARGS=`getopt -a -o C:k:c:h -l cni:,kube:,cni-ver:,help -- "$@"`
150 eval set -- "${ARGS}"
151 while true
152 do
153         case "$1" in
154         -C|--cni)
155                 CNI_TYPE="$2"
156                 echo "CNI_TYPE=$2"
157                 shift
158                 ;;
159         -k|--kube)
160                 echo "This is config kube version:$2"
161                 KUBE_VERSION="$2"
162                 shift
163                 ;;
164         -c|--cni-ver)
165                 echo "This is config cni version:$2"
166                 CNI_VERSION="$2"
167                 shift
168                 ;;
169         -h|--help)
170                 echo "this is help case"
171                 display_help
172                 ;;
173         --)
174                 printOption
175                 shift
176                 break
177                 ;;
178         esac
179 shift
180 done
181
182 deploy_k8s
183
184 sleep 20
185
186 check_k8s_status