blob: 380eabf577ba3d932a476c4a7069d59c2fb35efb [file] [log] [blame]
Luca Pretec97ad882018-05-04 11:22:14 -07001#!/usr/bin/env bash
2#
3# Copyright 2017-present Open Networking Foundation
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#
9# http://www.apache.org/licenses/LICENSE-2.0
10#
11# Unless required by applicable law or agreed to in writing, software
12# distributed under the License is distributed on an "AS IS" BASIS,
13# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
14# See the License for the specific language governing permissions and
15# limitations under the License.
16
Luca Pretec97ad882018-05-04 11:22:14 -070017#
18# Installs Kubespray on remote target machines.
19#
Zack Williams11b2e5c2018-05-18 09:50:54 -070020
Zack Williams249ac7f2018-05-18 13:34:14 -070021set -e -u -o pipefail
Zack Williams11b2e5c2018-05-18 09:50:54 -070022
Luca Pretec97ad882018-05-04 11:22:14 -070023install_kubespray () {
24 # Cleanup Old Kubespray Installations
Zack Williams249ac7f2018-05-18 13:34:14 -070025 echo "Cleaning Up Old Kubespray Installation"
Luca Pretec97ad882018-05-04 11:22:14 -070026 rm -rf kubespray
27
28 # Download Kubespray
Zack Williams249ac7f2018-05-18 13:34:14 -070029 echo "Downloading Kubespray"
30 git clone https://github.com/kubernetes-incubator/kubespray.git -b "v2.4.0"
Luca Pretec97ad882018-05-04 11:22:14 -070031
32 # Generate inventory and var files
Zack Williams249ac7f2018-05-18 13:34:14 -070033 echo "Generating The Inventory File"
34 rm -rf "inventories/${DEPLOYMENT_NAME}"
35 cp -r kubespray/inventory "inventories/${DEPLOYMENT_NAME}"
36 CONFIG_FILE="inventories/${DEPLOYMENT_NAME}/inventory.cfg" python3 kubespray/contrib/inventory_builder/inventory.py "${NODES[@]}"
Luca Pretec97ad882018-05-04 11:22:14 -070037
Zack Williams249ac7f2018-05-18 13:34:14 -070038 # Add configuration to inventory
39 ansible-playbook k8s-configs.yaml --extra-vars "deployment_name=${DEPLOYMENT_NAME} k8s_nodes='${NODES[*]}' kubespray_remote_ssh_user='${REMOTE_SSH_USER}'"
Luca Pretec97ad882018-05-04 11:22:14 -070040
41 # Prepare Target Machines
Zack Williams249ac7f2018-05-18 13:34:14 -070042 echo "Installing Prerequisites On Remote Machines"
43 ansible-playbook -i "inventories/${DEPLOYMENT_NAME}/inventory.cfg" k8s-requirements.yaml
Luca Pretec97ad882018-05-04 11:22:14 -070044
45 # Install Kubespray
Zack Williams249ac7f2018-05-18 13:34:14 -070046 echo "Installing Kubespray"
47 ansible-playbook -i "inventories/${DEPLOYMENT_NAME}/inventory.cfg" kubespray/cluster.yml -b -v
Luca Pretec97ad882018-05-04 11:22:14 -070048
49 # Export the Kubespray Config Location
Zack Williams249ac7f2018-05-18 13:34:14 -070050 echo "Loading Kubespray Configuration"
Zack Williams11b2e5c2018-05-18 09:50:54 -070051 cp kubespray/artifacts/admin.conf "configs/${DEPLOYMENT_NAME}.conf"
Luca Pretec97ad882018-05-04 11:22:14 -070052}
53
54#
55# Exports the Kubespray Config Location
56#
57source_kubeconfig () {
58 export KUBECONFIG=${PWD}/configs/${DEPLOYMENT_NAME}.conf
59}
60
61#
62# Helm init
63#
64helm_init () {
Zack Williams249ac7f2018-05-18 13:34:14 -070065 echo "Initializing Helm"
66 source_kubeconfig "$DEPLOYMENT_NAME"
Luca Pretec97ad882018-05-04 11:22:14 -070067 helm init --upgrade
Zack Williams249ac7f2018-05-18 13:34:14 -070068 echo "Waiting a minute for Tiller to start"
69 sleep 60
Luca Pretec97ad882018-05-04 11:22:14 -070070}
71
72#
73# Deploy an insecure registry
74#
75deploy_insecure_registry () {
Zack Williams249ac7f2018-05-18 13:34:14 -070076 echo "Deploying insecure registry"
77 source_kubeconfig "$DEPLOYMENT_NAME"
Luca Pretec97ad882018-05-04 11:22:14 -070078 helm install stable/docker-registry --set service.nodePort=30500,service.type=NodePort -n docker-registry
79}
80
81#
82# Checks if an arbitrary pod name is given during specifc
83# operations.
84#
85check_pod_name () {
Zack Williams11b2e5c2018-05-18 09:50:54 -070086 if [ -z "$DEPLOYMENT_NAME" ]
Luca Pretec97ad882018-05-04 11:22:14 -070087 then
88 echo "Missing option: podname" >&2
89 echo " "
90 display_help
91 exit -1
92 fi
93}
94
95#
96# Displays the help menu.
97#
98display_help () {
99 echo "Usage: $0 {--install|--source|--help} [podname] [ip...] " >&2
100 echo " "
101 echo " -h, --help Display this help message."
102 echo " -i, --install Install Kubespray on <podname>"
103 echo " -s, --source Source the Kubectl config for <podname>"
104 echo " "
105 echo " podname An arbitrary name representing the pod"
106 echo " ip The IP address of a remote node"
107 echo " "
108 echo "Example usages:"
109 echo " ./setup.sh -i podname 192.168.10.100 192.168.10.101 192.168.10.102"
Zack Williams249ac7f2018-05-18 13:34:14 -0700110 echo " ./setup.sh -i podname (default is 10.90.0.101 10.90.0.102 10.90.0.103)"
Luca Pretec97ad882018-05-04 11:22:14 -0700111 echo " source setup.sh -s podname"
112}
113
114#
115# Init
116#
117CLI_OPT=$1
118DEPLOYMENT_NAME=$2
119shift 2
Zack Williams249ac7f2018-05-18 13:34:14 -0700120DEFAULT_NODES=(10.90.0.101 10.90.0.102 10.90.0.103)
121NODES=("${@:-${DEFAULT_NODES[@]}}")
122
123REMOTE_SSH_USER="${REMOTE_SSH_USER:-cord}"
Luca Pretec97ad882018-05-04 11:22:14 -0700124
125while :
126do
127 case $CLI_OPT in
128 -i | --install)
129 check_pod_name
Zack Williams249ac7f2018-05-18 13:34:14 -0700130 install_kubespray
131 helm_init
132 deploy_insecure_registry
Luca Pretec97ad882018-05-04 11:22:14 -0700133 exit 0
134 ;;
135 -h | --help)
136 display_help
137 exit 0
138 ;;
139 -s | --source)
140 check_pod_name
Zack Williams249ac7f2018-05-18 13:34:14 -0700141 source_kubeconfig
Luca Pretec97ad882018-05-04 11:22:14 -0700142 return 0
143 ;;
144 --) # End of all options
145 shift
146 break
147 ;;
148 *)
Zack Williams11b2e5c2018-05-18 09:50:54 -0700149 echo Error: Unknown option: "$CLI_OPT" >&2
Luca Pretec97ad882018-05-04 11:22:14 -0700150 echo " "
151 display_help
152 exit -1
153 ;;
154 esac
155done