mirror of
				https://github.com/k3s-io/kubernetes.git
				synced 2025-10-31 13:50:01 +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
 |