146 lines
4.7 KiB
Bash
146 lines
4.7 KiB
Bash
|
#!/usr/bin/env bash
|
||
|
|
||
|
# Copyright 2016 The Kubernetes Authors.
|
||
|
#
|
||
|
# Licensed under the Apache License, Version 2.0 (the "License");
|
||
|
# you may not use this file except in compliance with the License.
|
||
|
# You may obtain a copy of the License at
|
||
|
#
|
||
|
# http://www.apache.org/licenses/LICENSE-2.0
|
||
|
#
|
||
|
# Unless required by applicable law or agreed to in writing, software
|
||
|
# distributed under the License is distributed on an "AS IS" BASIS,
|
||
|
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||
|
# See the License for the specific language governing permissions and
|
||
|
# limitations under the License.
|
||
|
|
||
|
# This script turns up/turns down Kubernetes clusters and federation
|
||
|
# components using the built hyperkube image.
|
||
|
# e.g. run as:
|
||
|
# FEDERATION_OUTPUT_ROOT="./_output" ./deploy.sh deploy_clusters
|
||
|
#
|
||
|
# will deploy the kubernetes clusters using the configuration specified
|
||
|
# in $FEDERATION_OUTPUT_ROOT/config.json.
|
||
|
#
|
||
|
# See config.json.sample for a config.json example.
|
||
|
|
||
|
set -o errexit
|
||
|
set -o nounset
|
||
|
set -o pipefail
|
||
|
|
||
|
KUBE_ROOT=$(dirname "${BASH_SOURCE}")/../..
|
||
|
|
||
|
# Provides the $KUBERNETES_PROVIDER variable and detect-project function
|
||
|
source "${KUBE_ROOT}/cluster/kube-util.sh"
|
||
|
# Provides logging facilities
|
||
|
source "${KUBE_ROOT}/cluster/lib/logging.sh"
|
||
|
|
||
|
readonly KUBE_ANYWHERE_FEDERATION_IMAGE="gcr.io/madhusudancs-containers/kubernetes-anywhere-federation"
|
||
|
readonly KUBE_ANYWHERE_FEDERATION_VERSION="v0.9.0"
|
||
|
readonly KUBE_ANYWHERE_FEDERATION_CHARTS_IMAGE="gcr.io/madhusudancs-containers/federation-charts"
|
||
|
readonly KUBE_ANYWHERE_FEDERATION_CHARTS_VERSION="v0.9.1"
|
||
|
|
||
|
readonly GOOGLE_APPLICATION_CREDENTIALS="${GOOGLE_APPLICATION_CREDENTIALS:-${HOME}/.config/gcloud/application_default_credentials.json}"
|
||
|
readonly KUBE_CONFIG_DIR="${KUBE_CONFIG_DIR:-${HOME}/.kube}"
|
||
|
readonly KUBE_CONFIG="${KUBE_CONFIG:-${HOME}/.kube/config}"
|
||
|
|
||
|
function pull_installer() {
|
||
|
kube::log::status "Pulling installer images"
|
||
|
docker pull "${KUBE_ANYWHERE_FEDERATION_IMAGE}:${KUBE_ANYWHERE_FEDERATION_VERSION}"
|
||
|
docker pull "${KUBE_ANYWHERE_FEDERATION_CHARTS_IMAGE}:${KUBE_ANYWHERE_FEDERATION_CHARTS_VERSION}"
|
||
|
}
|
||
|
|
||
|
function ensure_files() {
|
||
|
kube::log::status "Ensure provider is supported"
|
||
|
if [[ "${KUBERNETES_PROVIDER:-}" != "gce" && "${KUBERNETES_PROVIDER:-}" != "gke" ]]; then
|
||
|
echo "Supported providers: \"gce\", \"gke\""
|
||
|
exit 1
|
||
|
fi
|
||
|
|
||
|
kube::log::status "Ensure credential files exist"
|
||
|
if [[ ! -f "${GOOGLE_APPLICATION_CREDENTIALS}" ]]; then
|
||
|
echo "Please ensure Google credentials file \""${GOOGLE_APPLICATION_CREDENTIALS}"\" exists."
|
||
|
exit 1
|
||
|
fi
|
||
|
|
||
|
if [[ ! -f "${KUBE_CONFIG}" ]]; then
|
||
|
echo "Please ensure kubeconfig file \""${KUBE_CONFIG}"\" exists."
|
||
|
exit 1
|
||
|
fi
|
||
|
}
|
||
|
|
||
|
function kube_action() {
|
||
|
: "${FEDERATION_OUTPUT_ROOT:?must be set}"
|
||
|
|
||
|
local -r action="${1:-}"
|
||
|
kube::log::status "Action: ${action} clusters"
|
||
|
docker run \
|
||
|
--user="$(id -u):$(id -g)" \
|
||
|
-m 12G \
|
||
|
-v "${GOOGLE_APPLICATION_CREDENTIALS}:/.config/gcloud/application_default_credentials.json:ro" \
|
||
|
-v "${KUBE_CONFIG_DIR}:/.kube" \
|
||
|
-v "${FEDERATION_OUTPUT_ROOT}:/_output" \
|
||
|
"${KUBE_ANYWHERE_FEDERATION_IMAGE}:${KUBE_ANYWHERE_FEDERATION_VERSION}" \
|
||
|
"${action}"
|
||
|
}
|
||
|
|
||
|
function federation_action() {
|
||
|
: "${FEDERATION_OUTPUT_ROOT:?must be set}"
|
||
|
|
||
|
local -r action="${1:-}"
|
||
|
kube::log::status "Action: ${action} federation components"
|
||
|
# For non-GKE clusters just mounting kubeconfig is sufficient. But we
|
||
|
# need gcloud credentials for GKE clusters, so we pass both kubeconfig
|
||
|
# and gcloud credentials
|
||
|
docker run \
|
||
|
-m 12G \
|
||
|
-v "${GOOGLE_APPLICATION_CREDENTIALS}:/root/.config/gcloud/application_default_credentials.json:ro" \
|
||
|
-v "${KUBE_CONFIG}:/root/.kube/config" \
|
||
|
-v "${FEDERATION_OUTPUT_ROOT}:/_output" \
|
||
|
"${KUBE_ANYWHERE_FEDERATION_CHARTS_IMAGE}:${KUBE_ANYWHERE_FEDERATION_CHARTS_VERSION}" \
|
||
|
"${action}"
|
||
|
}
|
||
|
|
||
|
function redeploy_federation() {
|
||
|
: "${FEDERATION_OUTPUT_ROOT:?must be set}"
|
||
|
|
||
|
local -r action="${1:-}"
|
||
|
kube::log::status "${action} federation components"
|
||
|
docker run \
|
||
|
-m 12G \
|
||
|
-v "${KUBE_CONFIG}:/root/.kube/config:ro" \
|
||
|
-v "${FEDERATION_OUTPUT_ROOT}:/_output" \
|
||
|
"${KUBE_ANYWHERE_FEDERATION_CHARTS_IMAGE}:${KUBE_ANYWHERE_FEDERATION_CHARTS_VERSION}" \
|
||
|
"${action}"
|
||
|
}
|
||
|
|
||
|
readonly ACTION="${1:-}"
|
||
|
case "${ACTION}" in
|
||
|
"")
|
||
|
echo 'Action must be one of [init, deploy_clusters, deploy_federation, \
|
||
|
destroy_federation, destroy_clusters, redeploy_federation], \
|
||
|
got: '"${ACTION}"
|
||
|
exit 1
|
||
|
;;
|
||
|
"init")
|
||
|
pull_installer
|
||
|
;;
|
||
|
"deploy_clusters")
|
||
|
ensure_files
|
||
|
kube_action deploy
|
||
|
;;
|
||
|
"deploy_federation")
|
||
|
ensure_files
|
||
|
federation_action deploy
|
||
|
;;
|
||
|
"destroy_federation")
|
||
|
federation_action destroy
|
||
|
;;
|
||
|
"destroy_clusters")
|
||
|
kube_action destroy
|
||
|
;;
|
||
|
"redeploy_federation")
|
||
|
redeploy_federation
|
||
|
;;
|
||
|
esac
|