cri-o/vendor/k8s.io/kubernetes/federation/deploy/deploy.sh

146 lines
4.7 KiB
Bash
Raw Normal View History

#!/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