blob: cc71522f127e378c5123370ecdfe53035e699206 [file] [log] [blame]
Michael O'Briena3eb4e12019-02-23 19:44:56 -05001#!/bin/bash
2#############################################################################
3# Copyright © 2019 Bell.
4#
5# Licensed under the Apache License, Version 2.0 (the "License");
6# you may not use this file except in compliance with the License.
7# You may obtain a copy of the License at
8# http://www.apache.org/licenses/LICENSE-2.0
9#
10# Unless required by applicable law or agreed to in writing, software
11# distributed under the License is distributed on an "AS IS" BASIS,
12# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13# See the License for the specific language governing permissions and
14# limitations under the License.
15#
16#############################################################################
17#
18# This installation is for an RKE install of kubernetes
19# after this run the standard oom install
20# this installation can be run on amy ubuntu 16.04 VM, RHEL 7.6 (root only), physical or cloud azure/aws host
21# https://wiki.onap.org/display/DW/OOM+RKE+Kubernetes+Deployment
22# source from https://jira.onap.org/browse/OOM-1598
23#
24# master/dublin
25# RKE 0.1.16 Kubernetes 1.11.6, kubectl 1.11.6, Helm 2.9.1, Docker 18.06
26# single node install, HA pending
27
28usage() {
29cat <<EOF
30Usage: $0 [PARAMs]
31example
32sudo ./rke_setup.sh -b dublin -s rke.onap.cloud -e onap -l amdocs -v true
33-u : Display usage
34-b [branch] : branch = master or dublin (required)
35-s [server] : server = IP or DNS name (required)
36-e [environment] : use the default (onap)
37-k [key] : ssh key name
38-l [username] : login username account (use ubuntu for example)
39EOF
40}
41
42install_onap() {
43 #constants
44 PORT=8880
45 if [ "$BRANCH" == "casablanca" ]; then
46 KUBERNETES_VERSION=
47 RKE_VERSION=0.1.15
48 KUBECTL_VERSION=1.11.3
49 HELM_VERSION=2.9.1
50 DOCKER_VERSION=17.03
51 else
52 KUBERNETES_VERSION=
53 RKE_VERSION=0.1.16
54 KUBECTL_VERSION=1.11.6
55 HELM_VERSION=2.9.1
56 DOCKER_VERSION=18.06
57 fi
58
59 # copy your private ssh key and cluster.yml file to the vm
60 # on your dev machine
61 #sudo cp ~/.ssh/onap_rsa .
62 #sudo chmod 777 onap_rsa
63 #scp onap_rsa ubuntu@192.168.241.132:~/
64 # on this vm
65 #sudo chmod 400 onap_rsa
66 #sudo cp onap_rsa ~/.ssh
67 # make sure public key is insetup correctly in
68 # sudo vi ~/.ssh/authorized_keys
69
70 echo "please supply your ssh key as provided by the -k keyname - it must be be chmod 400 and chown user:user in ~/.ssh/"
71 echo "The RKE version specific cluster.yaml is already integrated in this script for 0.1.15/0.1.16 no need for below generation..."
72 echo "rke config --name cluster.yml"
73 echo "specifically"
74 echo "address: $SERVER"
75 echo "user: $USERNAME"
76 echo "ssh_key_path: $SSHPATH_PREFIX/$SSHKEY"
77
78 RKETOOLS=
79 HYPERCUBE=
80 POD_INFRA_CONTAINER=
81 if [ "$RKE_VERSION" == "0.1.16" ]; then
82 RKETOOLS=0.1.15
83 HYPERCUBE=1.11.6-rancher1
84 POD_INFRA_CONTAINER=rancher/pause-amd64:3.1
85 else
86 # 0.1.15
87 RKETOOLS=0.1.14
88 HYPERCUBE=1.11.3-rancher1
89 POD_INFRA_CONTAINER=gcr.io.google_containers/pause-amd64:3.1
90 fi
91
92 cat > cluster.yml <<EOF
93# generated from rke_setup.sh
94nodes:
95- address: $SERVER
96 port: "22"
97 internal_address: ""
98 role:
99 - controlplane
100 - worker
101 - etcd
102 hostname_override: ""
103 user: $USERNAME
104 docker_socket: /var/run/docker.sock
105 ssh_key: ""
106 ssh_key_path: $SSHPATH_PREFIX/$SSHKEY
107 labels: {}
108services:
109 etcd:
110 image: ""
111 extra_args: {}
112 extra_binds: []
113 extra_env: []
114 external_urls: []
115 ca_cert: ""
116 cert: ""
117 key: ""
118 path: ""
119 snapshot: null
120 retention: ""
121 creation: ""
122 kube-api:
123 image: ""
124 extra_args: {}
125 extra_binds: []
126 extra_env: []
127 service_cluster_ip_range: 10.43.0.0/16
128 service_node_port_range: ""
129 pod_security_policy: false
130 kube-controller:
131 image: ""
132 extra_args: {}
133 extra_binds: []
134 extra_env: []
135 cluster_cidr: 10.42.0.0/16
136 service_cluster_ip_range: 10.43.0.0/16
137 scheduler:
138 image: ""
139 extra_args: {}
140 extra_binds: []
141 extra_env: []
142 kubelet:
143 image: ""
144 extra_args:
145 max-pods: 900
146 extra_binds: []
147 extra_env: []
148 cluster_domain: cluster.local
149 infra_container_image: ""
150 cluster_dns_server: 10.43.0.10
151 fail_swap_on: false
152 kubeproxy:
153 image: ""
154 extra_args: {}
155 extra_binds: []
156 extra_env: []
157network:
158 plugin: canal
159 options: {}
160authentication:
161 strategy: x509
162 options: {}
163 sans: []
164system_images:
165 etcd: rancher/coreos-etcd:v3.2.18
166 alpine: rancher/rke-tools:v$RKETOOLS
167 nginx_proxy: rancher/rke-tools:v$RKETOOLS
168 cert_downloader: rancher/rke-tools:v$RKETOOLS
169 kubernetes_services_sidecar: rancher/rke-tools:v$RKETOOLS
170 kubedns: rancher/k8s-dns-kube-dns-amd64:1.14.10
171 dnsmasq: rancher/k8s-dns-dnsmasq-nanny-amd64:1.14.10
172 kubedns_sidecar: rancher/k8s-dns-sidecar-amd64:1.14.10
173 kubedns_autoscaler: rancher/cluster-proportional-autoscaler-amd64:1.0.0
174 kubernetes: rancher/hyperkube:v$HYPERCUBE
175 flannel: rancher/coreos-flannel:v0.10.0
176 flannel_cni: rancher/coreos-flannel-cni:v0.3.0
177 calico_node: rancher/calico-node:v3.1.3
178 calico_cni: rancher/calico-cni:v3.1.3
179 calico_controllers: ""
180 calico_ctl: rancher/calico-ctl:v2.0.0
181 canal_node: rancher/calico-node:v3.1.3
182 canal_cni: rancher/calico-cni:v3.1.3
183 canal_flannel: rancher/coreos-flannel:v0.10.0
184 wave_node: weaveworks/weave-kube:2.1.2
185 weave_cni: weaveworks/weave-npc:2.1.2
186 pod_infra_container: $POD_INFRA_CONTAINER
187 ingress: rancher/nginx-ingress-controller:0.16.2-rancher1
188 ingress_backend: rancher/nginx-ingress-controller-defaultbackend:1.4
189 metrics_server: rancher/metrics-server-amd64:v0.2.1
190ssh_key_path: $SSHPATH
191ssh_agent_auth: false
192authorization:
193 mode: rbac
194 options: {}
195ignore_docker_version: false
196kubernetes_version: "$KUBERNETES_VERSION"
197private_registries: []
198ingress:
199 provider: ""
200 options: {}
201 node_selector: {}
202 extra_args: {}
203cluster_name: ""
204cloud_provider:
205 name: ""
206prefix_path: ""
207addon_job_timeout: 0
208bastion_host:
209 address: ""
210 port: ""
211 user: ""
212 ssh_key: ""
213 ssh_key_path: ""
214monitoring:
215 provider: ""
216 options: {}
217EOF
218
219
220
221 echo "Installing on ${SERVER} for ${BRANCH}: RKE: ${RKE_VERSION} Kubectl: ${KUBECTL_VERSION} Helm: ${HELM_VERSION} Docker: ${DOCKER_VERSION} username: ${USERNAME}"
222 sudo echo "127.0.0.1 ${SERVER}" >> /etc/hosts
223 echo "Install docker - If you must install as non-root - comment out the docker install below - run it separately, run the user mod, logout/login and continue this script"
224 curl https://releases.rancher.com/install-docker/$DOCKER_VERSION.sh | sh
225 sudo usermod -aG docker $USERNAME
226
227 echo "Install RKE"
228 sudo wget https://github.com/rancher/rke/releases/download/v$RKE_VERSION/rke_linux-amd64
229 mv rke_linux-amd64 rke
230 sudo chmod +x rke
231 sudo mv ./rke /usr/local/bin/rke
232
233 echo "Install make - required for beijing+ - installed via yum groupinstall Development Tools in RHEL"
234 # ubuntu specific
235 sudo apt-get install make -y
236
237 sudo curl -LO https://storage.googleapis.com/kubernetes-release/release/v$KUBECTL_VERSION/bin/linux/amd64/kubectl
238 sudo chmod +x ./kubectl
239 sudo mv ./kubectl /usr/local/bin/kubectl
240 sudo mkdir ~/.kube
241 wget http://storage.googleapis.com/kubernetes-helm/helm-v${HELM_VERSION}-linux-amd64.tar.gz
242 sudo tar -zxvf helm-v${HELM_VERSION}-linux-amd64.tar.gz
243 sudo mv linux-amd64/helm /usr/local/bin/helm
244
245 echo "Bringing RKE up - using supplied cluster.yml"
246 sudo rke up
247 echo "wait 2 extra min for the cluster"
248 sleep 60
249 echo "1 more min"
250 sleep 60
251 echo "copy kube_config_cluter.yaml generated - to ~/.kube/config"
252 sudo cp kube_config_cluster.yml ~/.kube/config
253 # avoid using sudo for kubectl
254 sudo chmod 777 ~/.kube/config
255 echo "Verify all pods up on the kubernetes system - will return localhost:8080 until a host is added"
256 echo "kubectl get pods --all-namespaces"
257 kubectl get pods --all-namespaces
258 echo "install tiller/helm"
259 kubectl -n kube-system create serviceaccount tiller
260 kubectl create clusterrolebinding tiller --clusterrole=cluster-admin --serviceaccount=kube-system:tiller
261 helm init --service-account tiller
262 kubectl -n kube-system rollout status deploy/tiller-deploy
263 echo "upgrade server side of helm in kubernetes"
264 if [ "$USERNAME" == "root" ]; then
265 helm version
266 else
267 sudo helm version
268 fi
269 echo "sleep 30"
270 sleep 30
271 if [ "$USERNAME" == "root" ]; then
272 helm init --upgrade
273 else
274 sudo helm init --upgrade
275 fi
276 echo "sleep 30"
277 sleep 30
278 echo "verify both versions are the same below"
279 if [ "$USERNAME" == "root" ]; then
280 helm version
281 else
282 sudo helm version
283 fi
284 echo "start helm server"
285 if [ "$USERNAME" == "root" ]; then
286 helm serve &
287 else
288 sudo helm serve &
289 fi
290 echo "sleep 30"
291 sleep 30
292 echo "add local helm repo"
293 if [ "$USERNAME" == "root" ]; then
294 helm repo add local http://127.0.0.1:8879
295 helm repo list
296 else
297 sudo helm repo add local http://127.0.0.1:8879
298 sudo helm repo list
299 fi
300 echo "To enable grafana dashboard - do this after running cd.sh which brings up onap - or you may get a 302xx port conflict"
301 echo "kubectl expose -n kube-system deployment monitoring-grafana --type=LoadBalancer --name monitoring-grafana-client"
302 echo "to get the nodeport for a specific VM running grafana"
303 echo "kubectl get services --all-namespaces | grep graf"
304 sudo docker version
305 helm version
306 kubectl version
307 kubectl get services --all-namespaces
308 kubectl get pods --all-namespaces
309 echo "finished!"
310}
311
312BRANCH=
313SERVER=
314ENVIRON=
315VALIDATE=false
316USERNAME=ubuntu
317SSHPATH_PREFIX=~/.ssh
318
319while getopts ":b:s:e:u:l:k:v" PARAM; do
320 case $PARAM in
321 u)
322 usage
323 exit 1
324 ;;
325 b)
326 BRANCH=${OPTARG}
327 ;;
328 e)
329 ENVIRON=${OPTARG}
330 ;;
331 s)
332 SERVER=${OPTARG}
333 ;;
334 l)
335 USERNAME=${OPTARG}
336 ;;
337 k)
338 SSHKEY=${OPTARG}
339 ;;
340 v)
341 VALIDATE=${OPTARG}
342 ;;
343 ?)
344 usage
345 exit
346 ;;
347 esac
348done
349
350if [[ -z $BRANCH ]]; then
351 usage
352 exit 1
353fi
354
355install_onap $BRANCH $SERVER $ENVIRON $USERNAME $SSHPATH_PREFIX $SSHKEY $VALIDATE