AIO and MUNO mode upgrade for EG 1.5.0 version
[eliot.git] / scripts / setup.sh
1 #!/bin/bash -ex
2 ##############################################################################
3 # Copyright (c) 2019 Huawei Tech and others.
4 #
5 # All rights reserved. This program and the accompanying materials
6 # are made available under the terms of the Apache License, Version 2.0
7 # which accompanies this distribution, and is available at
8 # http://www.apache.org/licenses/LICENSE-2.0
9 ##############################################################################
10
11 ########################################################################################
12 #                                                                                      #
13 # The script is to setup the ELIOT Manager and ELIOT nodes.                            #
14 # It installs Docker in both ELIOT Manager and ELIOT node.                             #
15 # It installs Kubernetes. In the ELIOT Manager kubeadm, kubelet, kubectl is installed. #
16 # In ELIOT Edge Node it will install kubeadn, kubelet.                                 #
17 # Script is tested in Ubuntu 16.04 version.                                            #
18 # sshpass needs to be installed before executing this script.                          #
19 ########################################################################################
20
21 # constants
22
23 OSPLATFORM=$(awk -F= '/^NAME/{print $2}' /etc/os-release)
24 ELIOT_REPO="https://gerrit.akraino.org/r/eliot"
25
26 show_help()
27 {
28   echo "The script helps in setting up the ELIOT Toplogy Infrastrucutre"
29   echo "The setup installs Docker, K8S Master and K8S worker nodes in  "
30   echo "ELIOT Manager and ELIOT Workder Nodes respectively "
31   echo "After completion of script execution execute command: "
32   echo "kubectl get nodes to check whether the connection between "
33   echo "ELIOT Manager and ELIOT Nodes are established"
34   echo ""
35   echo "Nodelist file should have the details of Worker Nodes in the format of:"
36   echo "EliotNodeUserName|EliotNodeIP|EliotNodePasswor"
37   echo "Each line should have detail of one ELIOT Node only"
38 }
39
40 # Setting up ELIOT Manager Node.
41 # Installing Docker, K8S and Initializing K8S Master
42 setup_k8smaster()
43 {
44   #set -o xtrace
45   sudo rm -rf ~/.kube
46   source common.sh | tee eliotcommon.log
47   source k8smaster.sh | tee kubeadm.log
48   # Setup ELIOT Node
49   oscheck_edge
50 }
51
52 setup_k8sworkers()
53 {
54   set -o xtrace
55
56   # Install Docker on ELIOT Node
57   SETUP_WORKER_COMMON="sudo rm -rf ~/eliot &&\
58                        git clone ${ELIOT_REPO} &&\
59                        cd eliot/scripts/ && source common.sh"
60   #SETUP_WORKER_COMMON="cd eliot/scripts/ && source common.sh"
61   SETUP_WORKER="cd eliot/scripts/ && source k8sworker.sh"
62
63   KUBEADM_TOKEN=$(kubeadm token create --print-join-command)
64   KUBEADM_JOIN="sudo ${KUBEADM_TOKEN}"
65
66  # Read all the Worker Node details from nodelist file.
67  while read line
68  do
69      nodeinfo="${line}"
70      nodeusr=$(echo ${nodeinfo} | cut -d"|" -f1)
71      nodeip=$(echo ${nodeinfo} | cut -d"|" -f2)
72      nodepaswd=$(echo ${nodeinfo} | cut -d"|" -f3)
73      sshpass -p ${nodepaswd} ssh ${nodeusr}@${nodeip} ${SETUP_WORKER_COMMON} < /dev/null
74      sshpass -p ${nodepaswd} ssh ${nodeusr}@${nodeip} ${SETUP_WORKER} < /dev/null
75      sshpass -p ${nodepaswd} ssh ${nodeusr}@${nodeip} ${KUBEADM_JOIN} < /dev/null
76  done < nodelist > /dev/null 2>&1
77
78 }
79
80 setup_k8smaster_centos()
81 {
82   set -o xtrace
83   sudo rm -rf ~/.kube
84   source common_centos.sh | tee eliotcommon_centos.log
85   source k8smaster_centos.sh | tee kubeadm_centos.log
86
87   # Setup ELIOT Node
88   oscheck_edge
89 }
90
91
92 setup_k8sworkers_centos()
93 {
94   set -o xtrace
95   # Install Docker on ELIOT Node
96
97   SETUP_WORKER_COMMON_CENTOS="sudo rm -rf ~/eliot &&\
98                               git clone ${ELIOT_REPO} &&\
99                               cd eliot/scripts/ && source common_centos.sh"
100
101   # SETUP_WORKER_COMMON_CENTOS="cd /root/eliot/scripts/ && source common_centos.sh"
102
103   KUBEADM_TOKEN=$(sudo kubeadm token create --print-join-command)
104   KUBEADM_JOIN_CENTOS="sudo ${KUBEADM_TOKEN}"
105   # Read all the Worker Node details from nodelist file.
106   while read line
107   do
108       nodeinfo="${line}" < /dev/null 2>&1
109       nodeusr=$(echo ${nodeinfo} | cut -d"|" -f1) < /dev/null
110       nodeip=$(echo ${nodeinfo} | cut -d"|" -f2)  < /dev/null
111       nodepaswd=$(echo ${nodeinfo} | cut -d"|" -f3) < /dev/null
112       sudo sshpass -p ${nodepaswd} ssh ${nodeusr}@${nodeip} ${SETUP_WORKER_COMMON_CENTOS} < /dev/null
113       sudo sshpass -p ${nodepaswd} ssh ${nodeusr}@${nodeip} ${KUBEADM_JOIN_CENTOS} < /dev/null
114   done < nodelist > /dev/null 2>&1
115
116 }
117
118 # ELIOT edgenode os check and setup edge node
119 oscheck_edge()
120 {
121   while read line
122   do
123      nodeinfo="${line}"
124      nodeusr=$(echo ${nodeinfo} | cut -d"|" -f1)
125      nodeip=$(echo ${nodeinfo} | cut -d"|" -f2)
126      nodepaswd=$(echo ${nodeinfo} | cut -d"|" -f3)
127      if sshpass -p ${nodepaswd} ssh ${nodeusr}@${nodeip} [ $OSPLATFORM="*Ubuntu*" ]; then
128        setup_k8sworkers
129        elif sshpass -p ${nodepaswd} ssh ${nodeusr}@${nodeip} [ $OSPLATFORM="*CentOS*" ]; then
130          setup_k8sworkers_centos
131          kubectl apply -f cni/calico/rbac.yaml
132          kubectl apply -f cni/calico/calico.yaml
133      fi
134   done < nodelist > /dev/null 2>&1
135 }
136
137 # verify kubernetes setup by deploying nginx server.
138
139 verify_k8s_status(){
140   set -o xtrace
141   source verifyk8s.sh | tee verifyk8s.log
142 }
143
144
145 install_edgex(){
146  set -o xtrace
147  cd edgex && source edgexonk8s.sh
148 }
149
150 install_cadvisor_edge(){
151  set -o xtrace
152  SETUP_CADVISOR_ATEDGE="cd eliot/scripts/ && source cadvisorsetup.sh"
153  while read line
154  do
155      nodeinfo="${line}"
156      nodeusr=$(echo ${nodeinfo} | cut -d"|" -f1)
157      nodeip=$(echo ${nodeinfo} | cut -d"|" -f2)
158      nodepaswd=$(echo ${nodeinfo} | cut -d"|" -f3)
159      sshpass -p ${nodepaswd} ssh ${nodeusr}@${nodeip} ${SETUP_CADVISOR_ATEDGE} < /dev/null
160  done < nodelist > /dev/null 2>&1
161 }
162
163 install_prometheus(){
164 set -o xtrace
165 source prometheus.sh | tee install_prometheus.log
166 }
167
168 # Start
169 #
170
171 if [ $1 == "--help" ] || [ $1 == "-h" ];
172 then
173   show_help
174   exit 0
175 fi
176
177 if [[ $OSPLATFORM = *CentOS* ]]; then
178    setup_k8smaster_centos
179 else
180    setup_k8smaster
181 fi
182
183 sleep 20
184 verify_k8s_status
185 install_cadvisor_edge
186 sleep 10
187 install_prometheus
188 sleep 5
189 sudo docker ps | grep prometheus
190
191 install_edgex
192 sleep 20
193
194 # Removing the taint from master node
195 kubectl taint nodes --all node-role.kubernetes.io/master- || true
196
197 echo "ELIOT Setup execution is Completed..."
198