mirror of
				https://github.com/k3s-io/kubernetes.git
				synced 2025-11-04 07:49:35 +00:00 
			
		
		
		
	
		
			
				
	
	
		
			146 lines
		
	
	
		
			4.7 KiB
		
	
	
	
		
			Bash
		
	
	
		
			Executable File
		
	
	
	
	
			
		
		
	
	
			146 lines
		
	
	
		
			4.7 KiB
		
	
	
	
		
			Bash
		
	
	
		
			Executable File
		
	
	
	
	
#!/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
 |