mirror of
				https://github.com/k3s-io/kubernetes.git
				synced 2025-11-03 23:40:03 +00:00 
			
		
		
		
	AWS: Kill bash deployment
c.f. #38772, #42194 and https://k8s-testgrid.appspot.com/google-aws#aws cluster/kube-up.sh with KUBERNETES_PROVIDER=aws has been broken on 1.6 for a couple of months now. No one is supporting it. Nuke.
This commit is contained in:
		@@ -1,49 +0,0 @@
 | 
			
		||||
#!/bin/bash
 | 
			
		||||
 | 
			
		||||
# Copyright 2015 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.
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
# A library of common helper functions for Ubuntus & Debians.
 | 
			
		||||
 | 
			
		||||
function detect-minion-image() {
 | 
			
		||||
  if [[ -z "${KUBE_NODE_IMAGE=-}" ]]; then
 | 
			
		||||
    detect-image
 | 
			
		||||
    KUBE_NODE_IMAGE=$AWS_IMAGE
 | 
			
		||||
  fi
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
function generate-minion-user-data {
 | 
			
		||||
  # We pipe this to the ami as a startup script in the user-data field.  Requires a compatible ami
 | 
			
		||||
  echo "#! /bin/bash"
 | 
			
		||||
  echo "SALT_MASTER='${MASTER_INTERNAL_IP}'"
 | 
			
		||||
  echo "DOCKER_OPTS='${EXTRA_DOCKER_OPTS:-}'"
 | 
			
		||||
  echo "readonly NON_MASQUERADE_CIDR='${NON_MASQUERADE_CIDR:-}'"
 | 
			
		||||
  echo "readonly DOCKER_STORAGE='${DOCKER_STORAGE:-}'"
 | 
			
		||||
  grep -v "^#" "${KUBE_ROOT}/cluster/aws/templates/common.sh"
 | 
			
		||||
  grep -v "^#" "${KUBE_ROOT}/cluster/aws/templates/format-disks.sh"
 | 
			
		||||
  grep -v "^#" "${KUBE_ROOT}/cluster/aws/templates/salt-minion.sh"
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
function check-minion() {
 | 
			
		||||
  local minion_ip=$1
 | 
			
		||||
 | 
			
		||||
  local output=$(ssh -oStrictHostKeyChecking=no -i "${AWS_SSH_KEY}" ${SSH_USER}@$minion_ip sudo docker ps -a 2>/dev/null)
 | 
			
		||||
  if [[ -z "${output}" ]]; then
 | 
			
		||||
    ssh -oStrictHostKeyChecking=no -i "${AWS_SSH_KEY}" ${SSH_USER}@$minion_ip sudo service docker start > $LOG 2>&1
 | 
			
		||||
    echo "not working yet"
 | 
			
		||||
  else
 | 
			
		||||
    echo "working"
 | 
			
		||||
  fi
 | 
			
		||||
}
 | 
			
		||||
@@ -1,167 +0,0 @@
 | 
			
		||||
#!/bin/bash
 | 
			
		||||
 | 
			
		||||
# Copyright 2014 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.
 | 
			
		||||
 | 
			
		||||
ZONE=${KUBE_AWS_ZONE:-us-west-2a}
 | 
			
		||||
MASTER_SIZE=${MASTER_SIZE:-}
 | 
			
		||||
NODE_SIZE=${NODE_SIZE:-}
 | 
			
		||||
NUM_NODES=${NUM_NODES:-4}
 | 
			
		||||
 | 
			
		||||
# Dynamically set node sizes so that Heapster has enough space to run
 | 
			
		||||
if [[ -z ${NODE_SIZE} ]]; then
 | 
			
		||||
  if (( ${NUM_NODES} < 50 )); then
 | 
			
		||||
    NODE_SIZE="t2.micro"
 | 
			
		||||
  elif (( ${NUM_NODES} < 150 )); then
 | 
			
		||||
    NODE_SIZE="t2.small"
 | 
			
		||||
  else
 | 
			
		||||
    NODE_SIZE="t2.medium"
 | 
			
		||||
  fi
 | 
			
		||||
fi
 | 
			
		||||
 | 
			
		||||
# Dynamically set the master size by the number of nodes, these are guesses
 | 
			
		||||
if [[ -z ${MASTER_SIZE} ]]; then
 | 
			
		||||
  MASTER_SIZE="m3.medium"
 | 
			
		||||
  if [[ "${NUM_NODES}" -gt "5" ]]; then
 | 
			
		||||
    suggested_master_size="m3.large"
 | 
			
		||||
  fi
 | 
			
		||||
  if [[ "${NUM_NODES}" -gt "10" ]]; then
 | 
			
		||||
    suggested_master_size="m3.xlarge"
 | 
			
		||||
  fi
 | 
			
		||||
  if [[ "${NUM_NODES}" -gt "100" ]]; then
 | 
			
		||||
    suggested_master_size="m3.2xlarge"
 | 
			
		||||
  fi
 | 
			
		||||
  if [[ "${NUM_NODES}" -gt "250" ]]; then
 | 
			
		||||
    suggested_master_size="c4.4xlarge"
 | 
			
		||||
  fi
 | 
			
		||||
  if [[ "${NUM_NODES}" -gt "500" ]]; then
 | 
			
		||||
    suggested_master_size="c4.8xlarge"
 | 
			
		||||
  fi
 | 
			
		||||
fi
 | 
			
		||||
 | 
			
		||||
# Optional: Set AWS_S3_BUCKET to the name of an S3 bucket to use for uploading binaries
 | 
			
		||||
# (otherwise a unique bucket name will be generated for you)
 | 
			
		||||
#  AWS_S3_BUCKET=kubernetes-artifacts
 | 
			
		||||
 | 
			
		||||
# Because regions are globally named, we want to create in a single region; default to us-east-1
 | 
			
		||||
AWS_S3_REGION=${AWS_S3_REGION:-us-east-1}
 | 
			
		||||
 | 
			
		||||
# Which docker storage mechanism to use.
 | 
			
		||||
DOCKER_STORAGE=${DOCKER_STORAGE:-aufs}
 | 
			
		||||
 | 
			
		||||
# Extra docker options for nodes.
 | 
			
		||||
EXTRA_DOCKER_OPTS="${EXTRA_DOCKER_OPTS:-}"
 | 
			
		||||
 | 
			
		||||
INSTANCE_PREFIX="${KUBE_AWS_INSTANCE_PREFIX:-kubernetes}"
 | 
			
		||||
CLUSTER_ID=${INSTANCE_PREFIX}
 | 
			
		||||
VPC_NAME=${VPC_NAME:-kubernetes-vpc}
 | 
			
		||||
AWS_SSH_KEY=${AWS_SSH_KEY:-$HOME/.ssh/kube_aws_rsa}
 | 
			
		||||
CONFIG_CONTEXT="${KUBE_CONFIG_CONTEXT:-aws_${INSTANCE_PREFIX}}"
 | 
			
		||||
 | 
			
		||||
LOG="/dev/null"
 | 
			
		||||
 | 
			
		||||
MASTER_DISK_TYPE="${MASTER_DISK_TYPE:-gp2}"
 | 
			
		||||
MASTER_DISK_SIZE=${MASTER_DISK_SIZE:-20}
 | 
			
		||||
# The master root EBS volume size (typically does not need to be very large)
 | 
			
		||||
MASTER_ROOT_DISK_TYPE="${MASTER_ROOT_DISK_TYPE:-gp2}"
 | 
			
		||||
MASTER_ROOT_DISK_SIZE=${MASTER_ROOT_DISK_SIZE:-8}
 | 
			
		||||
# The minions root EBS volume size (used to house Docker images)
 | 
			
		||||
NODE_ROOT_DISK_TYPE="${NODE_ROOT_DISK_TYPE:-gp2}"
 | 
			
		||||
NODE_ROOT_DISK_SIZE=${NODE_ROOT_DISK_SIZE:-32}
 | 
			
		||||
 | 
			
		||||
MASTER_NAME="${INSTANCE_PREFIX}-master"
 | 
			
		||||
MASTER_TAG="${INSTANCE_PREFIX}-master"
 | 
			
		||||
NODE_TAG="${INSTANCE_PREFIX}-minion"
 | 
			
		||||
NODE_SCOPES=""
 | 
			
		||||
NON_MASQUERADE_CIDR="${NON_MASQUERADE_CIDR:-10.0.0.0/8}" # Traffic to IPs outside this range will use IP masquerade
 | 
			
		||||
SERVICE_CLUSTER_IP_RANGE="${SERVICE_CLUSTER_IP_RANGE:-10.0.0.0/16}"  # formerly PORTAL_NET
 | 
			
		||||
CLUSTER_IP_RANGE="${CLUSTER_IP_RANGE:-10.244.0.0/16}"
 | 
			
		||||
MASTER_IP_RANGE="${MASTER_IP_RANGE:-10.246.0.0/24}"
 | 
			
		||||
SSH_CIDR="${SSH_CIDR:-0.0.0.0/0}" # IP to restrict ssh access to nodes/master
 | 
			
		||||
HTTP_API_CIDR="${HTTP_API_CIDR:-0.0.0.0/0}" # IP to restrict HTTP API access
 | 
			
		||||
# If set to an Elastic IP address, the master instance will be associated with this IP.
 | 
			
		||||
# Otherwise a new Elastic IP will be acquired
 | 
			
		||||
# (We used to accept 'auto' to mean 'allocate elastic ip', but that is now the default)
 | 
			
		||||
MASTER_RESERVED_IP="${MASTER_RESERVED_IP:-}"
 | 
			
		||||
 | 
			
		||||
# Runtime config
 | 
			
		||||
RUNTIME_CONFIG="${KUBE_RUNTIME_CONFIG:-}"
 | 
			
		||||
 | 
			
		||||
# Optional: Cluster monitoring to setup as part of the cluster bring up:
 | 
			
		||||
#   none     - No cluster monitoring setup
 | 
			
		||||
#   influxdb - Heapster, InfluxDB, and Grafana
 | 
			
		||||
ENABLE_CLUSTER_MONITORING="${KUBE_ENABLE_CLUSTER_MONITORING:-influxdb}"
 | 
			
		||||
 | 
			
		||||
# Optional: Enable node logging.
 | 
			
		||||
ENABLE_NODE_LOGGING="${KUBE_ENABLE_NODE_LOGGING:-true}"
 | 
			
		||||
LOGGING_DESTINATION="${KUBE_LOGGING_DESTINATION:-elasticsearch}" # options: elasticsearch, gcp
 | 
			
		||||
 | 
			
		||||
# Optional: When set to true, Elasticsearch and Kibana will be setup as part of the cluster bring up.
 | 
			
		||||
ENABLE_CLUSTER_LOGGING="${KUBE_ENABLE_CLUSTER_LOGGING:-true}"
 | 
			
		||||
ELASTICSEARCH_LOGGING_REPLICAS=1
 | 
			
		||||
 | 
			
		||||
# Optional: Don't require https for registries in our local RFC1918 network
 | 
			
		||||
if [[ ${KUBE_ENABLE_INSECURE_REGISTRY:-false} == "true" ]]; then
 | 
			
		||||
  EXTRA_DOCKER_OPTS="${EXTRA_DOCKER_OPTS} --insecure-registry ${NON_MASQUERADE_CIDR}"
 | 
			
		||||
fi
 | 
			
		||||
 | 
			
		||||
# Optional: Install cluster DNS.
 | 
			
		||||
ENABLE_CLUSTER_DNS="${KUBE_ENABLE_CLUSTER_DNS:-true}"
 | 
			
		||||
DNS_SERVER_IP="${DNS_SERVER_IP:-10.0.0.10}"
 | 
			
		||||
DNS_DOMAIN="cluster.local"
 | 
			
		||||
 | 
			
		||||
# Optional: Enable DNS horizontal autoscaler
 | 
			
		||||
ENABLE_DNS_HORIZONTAL_AUTOSCALER="${KUBE_ENABLE_DNS_HORIZONTAL_AUTOSCALER:-false}"
 | 
			
		||||
 | 
			
		||||
# Optional: Install Kubernetes UI
 | 
			
		||||
ENABLE_CLUSTER_UI="${KUBE_ENABLE_CLUSTER_UI:-true}"
 | 
			
		||||
 | 
			
		||||
# Optional: Create autoscaler for cluster's nodes.
 | 
			
		||||
ENABLE_CLUSTER_AUTOSCALER="${KUBE_ENABLE_CLUSTER_AUTOSCALER:-false}"
 | 
			
		||||
if [[ "${ENABLE_CLUSTER_AUTOSCALER}" == "true" ]]; then
 | 
			
		||||
  # TODO: actually configure ASG or similar
 | 
			
		||||
  AUTOSCALER_MIN_NODES="${KUBE_AUTOSCALER_MIN_NODES:-1}"
 | 
			
		||||
  AUTOSCALER_MAX_NODES="${KUBE_AUTOSCALER_MAX_NODES:-${NUM_NODES}}"
 | 
			
		||||
  TARGET_NODE_UTILIZATION="${KUBE_TARGET_NODE_UTILIZATION:-0.7}"
 | 
			
		||||
fi
 | 
			
		||||
 | 
			
		||||
# Admission Controllers to invoke prior to persisting objects in cluster
 | 
			
		||||
# If we included ResourceQuota, we should keep it at the end of the list to prevent incrementing quota usage prematurely.
 | 
			
		||||
ADMISSION_CONTROL=NamespaceLifecycle,LimitRanger,ServiceAccount,PersistentVolumeLabel,DefaultStorageClass,ResourceQuota,DefaultTolerationSeconds
 | 
			
		||||
 | 
			
		||||
# Optional: Enable/disable public IP assignment for minions.
 | 
			
		||||
# Important Note: disable only if you have setup a NAT instance for internet access and configured appropriate routes!
 | 
			
		||||
ENABLE_NODE_PUBLIC_IP=${KUBE_ENABLE_NODE_PUBLIC_IP:-true}
 | 
			
		||||
 | 
			
		||||
# OS options for minions
 | 
			
		||||
KUBE_OS_DISTRIBUTION="${KUBE_OS_DISTRIBUTION:-jessie}"
 | 
			
		||||
MASTER_OS_DISTRIBUTION="${KUBE_OS_DISTRIBUTION}"
 | 
			
		||||
NODE_OS_DISTRIBUTION="${KUBE_OS_DISTRIBUTION}"
 | 
			
		||||
KUBE_NODE_IMAGE="${KUBE_NODE_IMAGE:-}"
 | 
			
		||||
COREOS_CHANNEL="${COREOS_CHANNEL:-alpha}"
 | 
			
		||||
CONTAINER_RUNTIME="${KUBE_CONTAINER_RUNTIME:-docker}"
 | 
			
		||||
RKT_VERSION="${KUBE_RKT_VERSION:-1.23.0}"
 | 
			
		||||
 | 
			
		||||
NETWORK_PROVIDER="${NETWORK_PROVIDER:-kubenet}" # kubenet, opencontrail, flannel
 | 
			
		||||
 | 
			
		||||
# OpenContrail networking plugin specific settings
 | 
			
		||||
OPENCONTRAIL_TAG="${OPENCONTRAIL_TAG:-R2.20}"
 | 
			
		||||
OPENCONTRAIL_KUBERNETES_TAG="${OPENCONTRAIL_KUBERNETES_TAG:-master}"
 | 
			
		||||
OPENCONTRAIL_PUBLIC_SUBNET="${OPENCONTRAIL_PUBLIC_SUBNET:-10.1.0.0/16}"
 | 
			
		||||
 | 
			
		||||
# Optional: if set to true, kube-up will configure the cluster to run e2e tests.
 | 
			
		||||
E2E_STORAGE_TEST_ENVIRONMENT=${KUBE_E2E_STORAGE_TEST_ENVIRONMENT:-false}
 | 
			
		||||
 | 
			
		||||
# Optional: install a default StorageClass
 | 
			
		||||
ENABLE_DEFAULT_STORAGE_CLASS="${ENABLE_DEFAULT_STORAGE_CLASS:-true}"
 | 
			
		||||
@@ -1,153 +0,0 @@
 | 
			
		||||
#!/bin/bash
 | 
			
		||||
 | 
			
		||||
# Copyright 2014 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.
 | 
			
		||||
 | 
			
		||||
ZONE=${KUBE_AWS_ZONE:-us-west-2a}
 | 
			
		||||
 | 
			
		||||
MASTER_SIZE=${MASTER_SIZE:-}
 | 
			
		||||
NODE_SIZE=${NODE_SIZE:-}
 | 
			
		||||
NUM_NODES=${NUM_NODES:-2}
 | 
			
		||||
 | 
			
		||||
# Dynamically set node sizes so that Heapster has enough space to run
 | 
			
		||||
if [[ -z ${NODE_SIZE} ]]; then
 | 
			
		||||
  if (( ${NUM_NODES} < 50 )); then
 | 
			
		||||
    NODE_SIZE="t2.micro"
 | 
			
		||||
  elif (( ${NUM_NODES} < 150 )); then
 | 
			
		||||
    NODE_SIZE="t2.small"
 | 
			
		||||
  else
 | 
			
		||||
    NODE_SIZE="t2.medium"
 | 
			
		||||
  fi
 | 
			
		||||
fi
 | 
			
		||||
 | 
			
		||||
# Dynamically set the master size by the number of nodes, these are guesses
 | 
			
		||||
# TODO: gather some data
 | 
			
		||||
if [[ -z ${MASTER_SIZE} ]]; then
 | 
			
		||||
  if (( ${NUM_NODES} < 150 )); then
 | 
			
		||||
    MASTER_SIZE="m3.medium"
 | 
			
		||||
  else
 | 
			
		||||
    MASTER_SIZE="m3.large"
 | 
			
		||||
  fi
 | 
			
		||||
fi
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
# Because regions are globally named, we want to create in a single region; default to us-east-1
 | 
			
		||||
AWS_S3_REGION=${AWS_S3_REGION:-us-east-1}
 | 
			
		||||
 | 
			
		||||
# Which docker storage mechanism to use.
 | 
			
		||||
DOCKER_STORAGE=${DOCKER_STORAGE:-aufs}
 | 
			
		||||
 | 
			
		||||
# Extra docker options for nodes.
 | 
			
		||||
EXTRA_DOCKER_OPTS="${EXTRA_DOCKER_OPTS:-}"
 | 
			
		||||
 | 
			
		||||
INSTANCE_PREFIX="${KUBE_AWS_INSTANCE_PREFIX:-e2e-test-${USER}}"
 | 
			
		||||
CONFIG_CONTEXT="${KUBE_CONFIG_CONTEXT:-aws_${INSTANCE_PREFIX}}"
 | 
			
		||||
CLUSTER_ID=${INSTANCE_PREFIX}
 | 
			
		||||
VPC_NAME=${VPC_NAME:-kubernetes-vpc}
 | 
			
		||||
AWS_SSH_KEY=${AWS_SSH_KEY:-$HOME/.ssh/kube_aws_rsa}
 | 
			
		||||
 | 
			
		||||
LOG="/dev/null"
 | 
			
		||||
 | 
			
		||||
MASTER_DISK_TYPE="${MASTER_DISK_TYPE:-gp2}"
 | 
			
		||||
MASTER_DISK_SIZE=${MASTER_DISK_SIZE:-20}
 | 
			
		||||
# The master root EBS volume size (typically does not need to be very large)
 | 
			
		||||
MASTER_ROOT_DISK_TYPE="${MASTER_ROOT_DISK_TYPE:-gp2}"
 | 
			
		||||
MASTER_ROOT_DISK_SIZE=${MASTER_ROOT_DISK_SIZE:-8}
 | 
			
		||||
# The minions root EBS volume size (used to house Docker images)
 | 
			
		||||
NODE_ROOT_DISK_TYPE="${NODE_ROOT_DISK_TYPE:-gp2}"
 | 
			
		||||
NODE_ROOT_DISK_SIZE=${NODE_ROOT_DISK_SIZE:-32}
 | 
			
		||||
 | 
			
		||||
MASTER_NAME="${INSTANCE_PREFIX}-master"
 | 
			
		||||
MASTER_TAG="${INSTANCE_PREFIX}-master"
 | 
			
		||||
NODE_TAG="${INSTANCE_PREFIX}-minion"
 | 
			
		||||
NODE_SCOPES=""
 | 
			
		||||
NON_MASQUERADE_CIDR="${NON_MASQUERADE_CIDR:-10.0.0.0/8}" # Traffic to IPs outside this range will use IP masquerade
 | 
			
		||||
SERVICE_CLUSTER_IP_RANGE="${SERVICE_CLUSTER_IP_RANGE:-10.0.0.0/16}"  # formerly PORTAL_NET
 | 
			
		||||
CLUSTER_IP_RANGE="${CLUSTER_IP_RANGE:-10.245.0.0/16}"
 | 
			
		||||
MASTER_IP_RANGE="${MASTER_IP_RANGE:-10.246.0.0/24}"
 | 
			
		||||
SSH_CIDR="${SSH_CIDR:-0.0.0.0/0}" # IP to restrict ssh access to nodes/master
 | 
			
		||||
HTTP_API_CIDR="${HTTP_API_CIDR:-0.0.0.0/0}" # IP to restrict HTTP API access
 | 
			
		||||
# If set to an Elastic IP address, the master instance will be associated with this IP.
 | 
			
		||||
# Otherwise a new Elastic IP will be acquired
 | 
			
		||||
# (We used to accept 'auto' to mean 'allocate elastic ip', but that is now the default)
 | 
			
		||||
MASTER_RESERVED_IP="${MASTER_RESERVED_IP:-}"
 | 
			
		||||
RUNTIME_CONFIG="${KUBE_RUNTIME_CONFIG:-}"
 | 
			
		||||
 | 
			
		||||
# Optional: Cluster monitoring to setup as part of the cluster bring up:
 | 
			
		||||
#   none     - No cluster monitoring setup
 | 
			
		||||
#   influxdb - Heapster, InfluxDB, and Grafana
 | 
			
		||||
ENABLE_CLUSTER_MONITORING="${KUBE_ENABLE_CLUSTER_MONITORING:-none}"
 | 
			
		||||
 | 
			
		||||
# Optional: Enable node logging.
 | 
			
		||||
ENABLE_NODE_LOGGING="${KUBE_ENABLE_NODE_LOGGING:-true}"
 | 
			
		||||
LOGGING_DESTINATION="${KUBE_LOGGING_DESTINATION:-elasticsearch}" # options: elasticsearch, gcp
 | 
			
		||||
 | 
			
		||||
# Optional: When set to true, Elasticsearch and Kibana will be setup as part of the cluster bring up.
 | 
			
		||||
ENABLE_CLUSTER_LOGGING="${KUBE_ENABLE_CLUSTER_LOGGING:-false}"
 | 
			
		||||
ELASTICSEARCH_LOGGING_REPLICAS=1
 | 
			
		||||
 | 
			
		||||
# Optional: Don't require https for registries in our local RFC1918 network
 | 
			
		||||
if [[ ${KUBE_ENABLE_INSECURE_REGISTRY:-false} == "true" ]]; then
 | 
			
		||||
  EXTRA_DOCKER_OPTS="${EXTRA_DOCKER_OPTS} --insecure-registry ${NON_MASQUERADE_CIDR}"
 | 
			
		||||
fi
 | 
			
		||||
 | 
			
		||||
# Optional: Install cluster DNS.
 | 
			
		||||
ENABLE_CLUSTER_DNS="${KUBE_ENABLE_CLUSTER_DNS:-true}"
 | 
			
		||||
DNS_SERVER_IP="${DNS_SERVER_IP:-10.0.0.10}"
 | 
			
		||||
DNS_DOMAIN="cluster.local"
 | 
			
		||||
 | 
			
		||||
# Optional: Enable DNS horizontal autoscaler
 | 
			
		||||
ENABLE_DNS_HORIZONTAL_AUTOSCALER="${KUBE_ENABLE_DNS_HORIZONTAL_AUTOSCALER:-false}"
 | 
			
		||||
 | 
			
		||||
# Optional: Install Kubernetes UI
 | 
			
		||||
ENABLE_CLUSTER_UI="${KUBE_ENABLE_CLUSTER_UI:-true}"
 | 
			
		||||
 | 
			
		||||
# Optional: Create autoscaler for cluster's nodes.
 | 
			
		||||
ENABLE_CLUSTER_AUTOSCALER="${KUBE_ENABLE_CLUSTER_AUTOSCALER:-false}"
 | 
			
		||||
if [[ "${ENABLE_CLUSTER_AUTOSCALER}" == "true" ]]; then
 | 
			
		||||
  # TODO: actually configure ASG or similar
 | 
			
		||||
  AUTOSCALER_MIN_NODES="${KUBE_AUTOSCALER_MIN_NODES:-1}"
 | 
			
		||||
  AUTOSCALER_MAX_NODES="${KUBE_AUTOSCALER_MAX_NODES:-${NUM_NODES}}"
 | 
			
		||||
  TARGET_NODE_UTILIZATION="${KUBE_TARGET_NODE_UTILIZATION:-0.7}"
 | 
			
		||||
fi
 | 
			
		||||
 | 
			
		||||
# Admission Controllers to invoke prior to persisting objects in cluster
 | 
			
		||||
# If we included ResourceQuota, we should keep it at the end of the list to prevent incrementing quota usage prematurely.
 | 
			
		||||
ADMISSION_CONTROL=NamespaceLifecycle,LimitRanger,ServiceAccount,PersistentVolumeLabel,DefaultStorageClass,ResourceQuota,DefaultTolerationSeconds
 | 
			
		||||
 | 
			
		||||
# Optional: Enable/disable public IP assignment for minions.
 | 
			
		||||
# Important Note: disable only if you have setup a NAT instance for internet access and configured appropriate routes!
 | 
			
		||||
ENABLE_NODE_PUBLIC_IP=${KUBE_ENABLE_NODE_PUBLIC_IP:-true}
 | 
			
		||||
 | 
			
		||||
# OS options for minions
 | 
			
		||||
KUBE_OS_DISTRIBUTION="${KUBE_OS_DISTRIBUTION:-jessie}"
 | 
			
		||||
MASTER_OS_DISTRIBUTION="${KUBE_OS_DISTRIBUTION}"
 | 
			
		||||
NODE_OS_DISTRIBUTION="${KUBE_OS_DISTRIBUTION}"
 | 
			
		||||
KUBE_NODE_IMAGE="${KUBE_NODE_IMAGE:-}"
 | 
			
		||||
COREOS_CHANNEL="${COREOS_CHANNEL:-alpha}"
 | 
			
		||||
CONTAINER_RUNTIME="${KUBE_CONTAINER_RUNTIME:-docker}"
 | 
			
		||||
RKT_VERSION="${KUBE_RKT_VERSION:-1.23.0}"
 | 
			
		||||
 | 
			
		||||
NETWORK_PROVIDER="${NETWORK_PROVIDER:-kubenet}" # kubenet, opencontrail, flannel
 | 
			
		||||
 | 
			
		||||
# OpenContrail networking plugin specific settings
 | 
			
		||||
OPENCONTRAIL_TAG="${OPENCONTRAIL_TAG:-R2.20}"
 | 
			
		||||
OPENCONTRAIL_KUBERNETES_TAG="${OPENCONTRAIL_KUBERNETES_TAG:-master}"
 | 
			
		||||
OPENCONTRAIL_PUBLIC_SUBNET="${OPENCONTRAIL_PUBLIC_SUBNET:-10.1.0.0/16}"
 | 
			
		||||
 | 
			
		||||
# Optional: if set to true, kube-up will configure the cluster to run e2e tests.
 | 
			
		||||
E2E_STORAGE_TEST_ENVIRONMENT=${KUBE_E2E_STORAGE_TEST_ENVIRONMENT:-false}
 | 
			
		||||
 | 
			
		||||
# Optional: install a default StorageClass
 | 
			
		||||
ENABLE_DEFAULT_STORAGE_CLASS="${ENABLE_DEFAULT_STORAGE_CLASS:-true}"
 | 
			
		||||
@@ -1,46 +0,0 @@
 | 
			
		||||
#!/bin/bash
 | 
			
		||||
 | 
			
		||||
# Copyright 2015 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.
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
# A library of helper functions for Jessie.
 | 
			
		||||
 | 
			
		||||
source "${KUBE_ROOT}/cluster/aws/common/common.sh"
 | 
			
		||||
 | 
			
		||||
SSH_USER=admin
 | 
			
		||||
 | 
			
		||||
# Detects the AMI to use for jessie (considering the region)
 | 
			
		||||
#
 | 
			
		||||
# Vars set:
 | 
			
		||||
#   AWS_IMAGE
 | 
			
		||||
function detect-jessie-image () {
 | 
			
		||||
  if [[ -z "${AWS_IMAGE-}" ]]; then
 | 
			
		||||
    # These images are built using the imagebuilder tool, in the kube-deploy github repo
 | 
			
		||||
    # https://github.com/kubernetes/kube-deploy/tree/master/imagebuilder
 | 
			
		||||
 | 
			
		||||
    # 282335181503: images published by kope.io
 | 
			
		||||
    aws_account="282335181503"
 | 
			
		||||
    # TODO: we could use a tag for the latest image, instead of bumping it every time
 | 
			
		||||
    # e.g. family = k8s-1.3-debian-jessie-amd64-hvm-ebs latest/1.3=true
 | 
			
		||||
    if [[ -z "${AWS_IMAGE_NAME:-}" ]]; then
 | 
			
		||||
      AWS_IMAGE_NAME="k8s-1.3-debian-jessie-amd64-hvm-ebs-2016-06-18"
 | 
			
		||||
    fi
 | 
			
		||||
    AWS_IMAGE=`aws ec2 describe-images --owner ${aws_account} --filters Name=name,Values=${AWS_IMAGE_NAME} --query Images[].ImageId --output text`
 | 
			
		||||
    if [[ -z "${AWS_IMAGE-}" ]]; then
 | 
			
		||||
      echo "Please specify AWS_IMAGE directly (image ${AWS_IMAGE_NAME} not found in region ${AWS_REGION})"
 | 
			
		||||
      exit 1
 | 
			
		||||
    fi
 | 
			
		||||
  fi
 | 
			
		||||
}
 | 
			
		||||
@@ -1,157 +0,0 @@
 | 
			
		||||
# AWS specific configuration options
 | 
			
		||||
 | 
			
		||||
These options can be set as environment variables to customize how your cluster is created.  Only options
 | 
			
		||||
specific to AWS are documented here, for cross-provider options see [this document](../options.md).
 | 
			
		||||
 | 
			
		||||
This is a work-in-progress; not all options are documented yet!
 | 
			
		||||
 | 
			
		||||
**KUBE_AWS_ZONE**
 | 
			
		||||
 | 
			
		||||
The AWS availability zone to deploy to.  Defaults to us-west-2a.
 | 
			
		||||
 | 
			
		||||
**AWS_IMAGE**
 | 
			
		||||
 | 
			
		||||
The AMI to use.  If not specified, the image will be selected based on the AWS region.
 | 
			
		||||
 | 
			
		||||
**AWS_S3_BUCKET**, **AWS_S3_REGION**
 | 
			
		||||
 | 
			
		||||
The bucket name to use, and the region where the bucket should be created, or where the bucket is located if it exists already.
 | 
			
		||||
 | 
			
		||||
If not specified, defaults to AWS_S3_REGION us-east-1, because buckets are globally named and you probably
 | 
			
		||||
want to share a bucket across all regions; us-east-1 is a sensible (relatively arbitrary) default.
 | 
			
		||||
 | 
			
		||||
AWS_S3_BUCKET will default to a uniquely generated name, so you won't collide with other kubernetes users.
 | 
			
		||||
(Currently this uses the hash of your AWS Access key to produce a per-user unique value).
 | 
			
		||||
 | 
			
		||||
It is not a bad idea to set AWS_S3_BUCKET to something more human friendly.
 | 
			
		||||
 | 
			
		||||
AWS_S3_REGION is useful for people that want to control their data location, because of regulatory restrictions for example.
 | 
			
		||||
 | 
			
		||||
**MASTER_SIZE**, **NODE_SIZE**
 | 
			
		||||
 | 
			
		||||
The instance type to use for creating the master/minion.  Defaults to auto-sizing based on the number of nodes (see below).
 | 
			
		||||
 | 
			
		||||
For production usage, we recommend bigger instances, for example:
 | 
			
		||||
 | 
			
		||||
```
 | 
			
		||||
export MASTER_SIZE=c4.large
 | 
			
		||||
export NODE_SIZE=r3.large
 | 
			
		||||
```
 | 
			
		||||
 | 
			
		||||
If you don't specify master and minion sizes, the scripts will attempt to guess the correct size of the master and worker
 | 
			
		||||
nodes based on `${NUM_NODES}`. See [Getting started on AWS EC2](../../docs/getting-started-guides/aws.md) for details.
 | 
			
		||||
 | 
			
		||||
Please note: `kube-up` utilizes ephemeral storage available on instances for docker storage. EBS-only instance types do not
 | 
			
		||||
support ephemeral storage and will default to docker storage on the root disk which is usually only 8GB.
 | 
			
		||||
EBS-only instance types include `t2`, `c4`, and `m4`.
 | 
			
		||||
 | 
			
		||||
**KUBE_ENABLE_NODE_PUBLIC_IP**
 | 
			
		||||
 | 
			
		||||
Should a public IP automatically assigned to the minions? "true" or "false"  
 | 
			
		||||
Defaults to: "true"
 | 
			
		||||
 | 
			
		||||
Please note: Do not set this to "false" unless you...
 | 
			
		||||
 | 
			
		||||
- ... already configured a NAT instance in the kubernetes VPC that will enable internet access for the new minions
 | 
			
		||||
- ... already configured a route for "0.0.0.0/0" to this NAT instance
 | 
			
		||||
- ... already configured a route for "YOUR_IP/32" to an AWS internet gateway (for the master instance to reach your
 | 
			
		||||
  client directly during setup)
 | 
			
		||||
 | 
			
		||||
**DOCKER_STORAGE**
 | 
			
		||||
 | 
			
		||||
Choose the docker storage driver to use.  This is an advanced option; most people should leave it as the default aufs
 | 
			
		||||
for parity with GCE.
 | 
			
		||||
 | 
			
		||||
Supported values: btrfs, aufs, devicemapper, aufs-nolvm
 | 
			
		||||
 | 
			
		||||
This will also configure your ephemeral storage in a compatible way, and your Docker containers
 | 
			
		||||
will run on this storage if available, as typically the root disk is comparatively small.
 | 
			
		||||
 | 
			
		||||
* `btrfs` will combine your ephemeral disks into a btrfs volume.  This is a good option if you have a recent kernel
 | 
			
		||||
  with a reliable btrfs.
 | 
			
		||||
* `aufs` uses the aufs driver, but also installs LVM to combine your disks. `aufs-nolvm` will not use LVM,
 | 
			
		||||
 meaning that only your first ephemeral disk will be used.
 | 
			
		||||
* `devicemapper` sets up LVM across all your ephemeral disks and sets Docker to drive it directly.  This is a
 | 
			
		||||
  similar option to btrfs, but without relying on the btrfs filesystem.  Sadly, it does not work with most
 | 
			
		||||
  configurations - see [this docker bug](https://github.com/docker/docker/issues/4036)
 | 
			
		||||
 | 
			
		||||
If your machines don't have any ephemeral disks, this will default to the aufs driver on your root disk (with no LVM).
 | 
			
		||||
 | 
			
		||||
**KUBE_OS_DISTRIBUTION**
 | 
			
		||||
 | 
			
		||||
The distribution to use.  Defaults to `jessie`
 | 
			
		||||
 | 
			
		||||
Supported options:
 | 
			
		||||
 | 
			
		||||
* `jessie`: Debian Jessie, running a custom kubernetes-optimized image.  Should
 | 
			
		||||
  be supported until 2018 by the debian-security team, and until 2020 by the
 | 
			
		||||
  debian-LTS team.
 | 
			
		||||
* `wily`: Ubuntu Wily.  Wily is not an LTS release, and OS support is due to
 | 
			
		||||
  end in July 2016.
 | 
			
		||||
 | 
			
		||||
No longer supported as of 1.3:
 | 
			
		||||
 | 
			
		||||
* `vivid`: Ubuntu Vivid.  Vivid OS support ended in early February 2016.
 | 
			
		||||
  Docker no longer provides packages for vivid.
 | 
			
		||||
 | 
			
		||||
Given the support situation, we recommend using Debian Jessie.  In Kubernetes
 | 
			
		||||
1.3 Ubuntu should have their next LTS release out, so we should be able to
 | 
			
		||||
recommend Ubuntu again at that time.
 | 
			
		||||
 | 
			
		||||
Using kube-up with other operating systems is neither supported nor
 | 
			
		||||
recommended.  But we would welcome increased OS support for kube-up, so please
 | 
			
		||||
contribute!
 | 
			
		||||
 | 
			
		||||
**NON_MASQUERADE_CIDR**
 | 
			
		||||
 | 
			
		||||
The 'internal' IP range which Kubernetes will use, which will therefore not
 | 
			
		||||
use IP masquerade.  By default kubernetes runs an internal network for traffic
 | 
			
		||||
between pods (and between pods and services), and by default this uses the
 | 
			
		||||
`10.0.0.0/8` range.  However, this sometimes overlaps with a range that you may
 | 
			
		||||
want to use; in particular the range cannot be used with EC2 ClassicLink.  You
 | 
			
		||||
may also want to run kubernetes in an existing VPC where you have chosen a CIDR
 | 
			
		||||
in the `10.0.0.0/8` range.
 | 
			
		||||
 | 
			
		||||
Setting this flag allows you to change this internal network CIDR.  Note that
 | 
			
		||||
you must set other values consistently within the CIDR that you choose.
 | 
			
		||||
 | 
			
		||||
For example, you might choose `172.16.0.0/14`; and you could then choose to
 | 
			
		||||
configure like this:
 | 
			
		||||
 | 
			
		||||
```
 | 
			
		||||
export NON_MASQUERADE_CIDR="172.16.0.0/14"
 | 
			
		||||
export SERVICE_CLUSTER_IP_RANGE="172.16.0.0/16"
 | 
			
		||||
export DNS_SERVER_IP="172.16.0.10"
 | 
			
		||||
export MASTER_IP_RANGE="172.17.0.0/24"
 | 
			
		||||
export CLUSTER_IP_RANGE="172.18.0.0/16"
 | 
			
		||||
```
 | 
			
		||||
 | 
			
		||||
When choosing a CIDR in the 172.20/12 reserved range you should be careful not
 | 
			
		||||
to choose a CIDR that overlaps your VPC CIDR (the kube-up script sets the VPC
 | 
			
		||||
CIDR to 172.20.0.0/16 by default, so you should not overlap that).  If you want
 | 
			
		||||
to allow inter-VPC traffic you should be careful to avoid your other VPCs as
 | 
			
		||||
well.
 | 
			
		||||
 | 
			
		||||
There is also a 100.64/10 address block which is reserved for "Carrier Grade
 | 
			
		||||
NAT", and which some users have reported success using.  While we haven't seen
 | 
			
		||||
any problems, or conflicts with any AWS networks, we can't guarantee it.  If you
 | 
			
		||||
decide you are comfortable using 100.64, you might use:
 | 
			
		||||
 | 
			
		||||
```
 | 
			
		||||
export NON_MASQUERADE_CIDR="100.64.0.0/10"
 | 
			
		||||
export SERVICE_CLUSTER_IP_RANGE="100.64.0.0/16"
 | 
			
		||||
export DNS_SERVER_IP="100.64.0.10"
 | 
			
		||||
export MASTER_IP_RANGE="100.65.0.0/24"
 | 
			
		||||
export CLUSTER_IP_RANGE="100.66.0.0/16"
 | 
			
		||||
```
 | 
			
		||||
 | 
			
		||||
**KUBE_VPC_CIDR_BASE**
 | 
			
		||||
 | 
			
		||||
By default `kube-up.sh` will create a VPC with CIDR 172.20.0.0/16. `KUBE_VPC_CIDR_BASE` allows to configure
 | 
			
		||||
this CIDR. For example you may choose to use `172.21.0.0/16`:
 | 
			
		||||
 | 
			
		||||
```
 | 
			
		||||
export KUBE_VPC_CIDR_BASE=172.21
 | 
			
		||||
```
 | 
			
		||||
 | 
			
		||||
[]()
 | 
			
		||||
@@ -1,132 +0,0 @@
 | 
			
		||||
#!/bin/bash
 | 
			
		||||
 | 
			
		||||
# Copyright 2015 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.
 | 
			
		||||
 | 
			
		||||
# Note: these functions override functions in the GCE configure-vm script
 | 
			
		||||
# We include the GCE script first, and this one second.
 | 
			
		||||
 | 
			
		||||
ensure-basic-networking() {
 | 
			
		||||
  :
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
ensure-packages() {
 | 
			
		||||
  apt-get-install curl
 | 
			
		||||
  # For reading kube_env.yaml
 | 
			
		||||
  apt-get-install python-yaml
 | 
			
		||||
 | 
			
		||||
  # TODO: Where to get safe_format_and_mount?
 | 
			
		||||
  mkdir -p /usr/share/google
 | 
			
		||||
  cd /usr/share/google
 | 
			
		||||
  download-or-bust "dc96f40fdc9a0815f099a51738587ef5a976f1da" https://raw.githubusercontent.com/GoogleCloudPlatform/compute-image-packages/82b75f314528b90485d5239ab5d5495cc22d775f/google-startup-scripts/usr/share/google/safe_format_and_mount
 | 
			
		||||
  chmod +x safe_format_and_mount
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
set-kube-env() {
 | 
			
		||||
  local kube_env_yaml="/etc/kubernetes/kube_env.yaml"
 | 
			
		||||
 | 
			
		||||
  # kube-env has all the environment variables we care about, in a flat yaml format
 | 
			
		||||
  eval "$(python -c '
 | 
			
		||||
import pipes,sys,yaml
 | 
			
		||||
 | 
			
		||||
for k,v in yaml.load(sys.stdin).iteritems():
 | 
			
		||||
  print("""readonly {var}={value}""".format(var = k, value = pipes.quote(str(v))))
 | 
			
		||||
  print("""export {var}""".format(var = k))
 | 
			
		||||
  ' < """${kube_env_yaml}""")"
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
remove-docker-artifacts() {
 | 
			
		||||
  :
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
# Finds the master PD device
 | 
			
		||||
find-master-pd() {
 | 
			
		||||
  if ( grep "/mnt/master-pd" /proc/mounts ); then
 | 
			
		||||
    echo "Master PD already mounted; won't remount"
 | 
			
		||||
    MASTER_PD_DEVICE=""
 | 
			
		||||
    return
 | 
			
		||||
  fi
 | 
			
		||||
  echo "Waiting for master pd to be attached"
 | 
			
		||||
  attempt=0
 | 
			
		||||
  while true; do
 | 
			
		||||
    echo Attempt "$(($attempt+1))" to check for /dev/xvdb
 | 
			
		||||
    if [[ -e /dev/xvdb ]]; then
 | 
			
		||||
      echo "Found /dev/xvdb"
 | 
			
		||||
      MASTER_PD_DEVICE="/dev/xvdb"
 | 
			
		||||
      break
 | 
			
		||||
    fi
 | 
			
		||||
    attempt=$(($attempt+1))
 | 
			
		||||
    sleep 1
 | 
			
		||||
  done
 | 
			
		||||
 | 
			
		||||
  # Mount the master PD as early as possible
 | 
			
		||||
  echo "/dev/xvdb /mnt/master-pd ext4 noatime 0 0" >> /etc/fstab
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
fix-apt-sources() {
 | 
			
		||||
  :
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
salt-master-role() {
 | 
			
		||||
  cat <<EOF >/etc/salt/minion.d/grains.conf
 | 
			
		||||
grains:
 | 
			
		||||
  roles:
 | 
			
		||||
    - kubernetes-master
 | 
			
		||||
  cloud: aws
 | 
			
		||||
EOF
 | 
			
		||||
 | 
			
		||||
  # If the kubelet on the master is enabled, give it the same CIDR range
 | 
			
		||||
  # as a generic node.
 | 
			
		||||
  if [[ ! -z "${KUBELET_APISERVER:-}" ]] && [[ ! -z "${KUBELET_CERT:-}" ]] && [[ ! -z "${KUBELET_KEY:-}" ]]; then
 | 
			
		||||
    cat <<EOF >>/etc/salt/minion.d/grains.conf
 | 
			
		||||
  kubelet_api_servers: '${KUBELET_APISERVER}'
 | 
			
		||||
EOF
 | 
			
		||||
  else
 | 
			
		||||
    # If the kubelet is running disconnected from a master, give it a fixed
 | 
			
		||||
    # CIDR range.
 | 
			
		||||
    cat <<EOF >>/etc/salt/minion.d/grains.conf
 | 
			
		||||
  cbr-cidr: ${MASTER_IP_RANGE}
 | 
			
		||||
EOF
 | 
			
		||||
  fi
 | 
			
		||||
 | 
			
		||||
  env-to-grains "runtime_config"
 | 
			
		||||
  env-to-grains "kube_user"
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
salt-node-role() {
 | 
			
		||||
  cat <<EOF >/etc/salt/minion.d/grains.conf
 | 
			
		||||
grains:
 | 
			
		||||
  roles:
 | 
			
		||||
    - kubernetes-pool
 | 
			
		||||
  cloud: aws
 | 
			
		||||
  api_servers: '${API_SERVERS}'
 | 
			
		||||
EOF
 | 
			
		||||
 | 
			
		||||
  # We set the hostname_override to the full EC2 private dns name
 | 
			
		||||
  # we'd like to use EC2 instance-id, but currently the kubelet health-check assumes the name
 | 
			
		||||
  # is resolvable, although that check should be going away entirely (#7092)
 | 
			
		||||
  if [[ -z "${HOSTNAME_OVERRIDE:-}" ]]; then
 | 
			
		||||
    HOSTNAME_OVERRIDE=`curl --silent curl http://169.254.169.254/2007-01-19/meta-data/local-hostname`
 | 
			
		||||
  fi
 | 
			
		||||
 | 
			
		||||
  env-to-grains "hostname_override"
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
function run-user-script() {
 | 
			
		||||
  # TODO(justinsb): Support user scripts on AWS
 | 
			
		||||
  # AWS doesn't have as rich a metadata service as GCE does
 | 
			
		||||
  # Maybe specify an env var that is the path to a script?
 | 
			
		||||
  :
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
@@ -1,226 +0,0 @@
 | 
			
		||||
#!/bin/bash
 | 
			
		||||
 | 
			
		||||
# Copyright 2015 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.
 | 
			
		||||
 | 
			
		||||
# Discover all the ephemeral disks
 | 
			
		||||
 | 
			
		||||
function ensure-local-disks() {
 | 
			
		||||
 | 
			
		||||
# Skip if already mounted (a reboot)
 | 
			
		||||
if ( grep "/mnt/ephemeral" /proc/mounts ); then
 | 
			
		||||
  echo "Found /mnt/ephemeral in /proc/mounts; skipping local disk initialization"
 | 
			
		||||
  return
 | 
			
		||||
fi
 | 
			
		||||
 | 
			
		||||
block_devices=()
 | 
			
		||||
 | 
			
		||||
ephemeral_devices=$( (curl --silent http://169.254.169.254/2014-11-05/meta-data/block-device-mapping/ | grep ephemeral) || true )
 | 
			
		||||
for ephemeral_device in $ephemeral_devices; do
 | 
			
		||||
  echo "Checking ephemeral device: ${ephemeral_device}"
 | 
			
		||||
  aws_device=$(curl --silent http://169.254.169.254/2014-11-05/meta-data/block-device-mapping/${ephemeral_device})
 | 
			
		||||
 | 
			
		||||
  device_path=""
 | 
			
		||||
  if [ -b /dev/$aws_device ]; then
 | 
			
		||||
    device_path="/dev/$aws_device"
 | 
			
		||||
  else
 | 
			
		||||
    # Check for the xvd-style name
 | 
			
		||||
    xvd_style=$(echo $aws_device | sed "s/sd/xvd/")
 | 
			
		||||
    if [ -b /dev/$xvd_style ]; then
 | 
			
		||||
      device_path="/dev/$xvd_style"
 | 
			
		||||
    fi
 | 
			
		||||
  fi
 | 
			
		||||
 | 
			
		||||
  if [[ -z ${device_path} ]]; then
 | 
			
		||||
    echo "  Could not find disk: ${ephemeral_device}@${aws_device}"
 | 
			
		||||
  else
 | 
			
		||||
    echo "  Detected ephemeral disk: ${ephemeral_device}@${device_path}"
 | 
			
		||||
    block_devices+=(${device_path})
 | 
			
		||||
  fi
 | 
			
		||||
done
 | 
			
		||||
 | 
			
		||||
# These are set if we should move where docker/kubelet store data
 | 
			
		||||
# Note this gets set to the parent directory
 | 
			
		||||
move_docker=""
 | 
			
		||||
move_kubelet=""
 | 
			
		||||
 | 
			
		||||
docker_storage=${DOCKER_STORAGE:-aufs}
 | 
			
		||||
 | 
			
		||||
# Format the ephemeral disks
 | 
			
		||||
if [[ ${#block_devices[@]} == 0 ]]; then
 | 
			
		||||
  echo "No ephemeral block devices found; will use aufs on root"
 | 
			
		||||
  docker_storage="aufs"
 | 
			
		||||
else
 | 
			
		||||
  echo "Block devices: ${block_devices[@]}"
 | 
			
		||||
 | 
			
		||||
  # Remove any existing mounts
 | 
			
		||||
  for block_device in ${block_devices}; do
 | 
			
		||||
    echo "Unmounting ${block_device}"
 | 
			
		||||
    /bin/umount ${block_device} || echo "Ignoring failure umounting ${block_device}"
 | 
			
		||||
    sed -i -e "\|^${block_device}|d" /etc/fstab
 | 
			
		||||
  done
 | 
			
		||||
 | 
			
		||||
  # Remove any existing /mnt/ephemeral entry in /etc/fstab
 | 
			
		||||
  sed -i -e "\|/mnt/ephemeral|d" /etc/fstab
 | 
			
		||||
 | 
			
		||||
  # Mount the storage
 | 
			
		||||
  if [[ ${docker_storage} == "btrfs" ]]; then
 | 
			
		||||
    apt-get-install btrfs-tools
 | 
			
		||||
 | 
			
		||||
    if [[ ${#block_devices[@]} == 1 ]]; then
 | 
			
		||||
      echo "One ephemeral block device found; formatting with btrfs"
 | 
			
		||||
      mkfs.btrfs -f ${block_devices[0]}
 | 
			
		||||
    else
 | 
			
		||||
      echo "Found multiple ephemeral block devices, formatting with btrfs as RAID-0"
 | 
			
		||||
      mkfs.btrfs -f --data raid0 ${block_devices[@]}
 | 
			
		||||
    fi
 | 
			
		||||
    echo "${block_devices[0]}  /mnt/ephemeral  btrfs  noatime,nofail  0 0" >> /etc/fstab
 | 
			
		||||
    mkdir -p /mnt/ephemeral
 | 
			
		||||
    mount /mnt/ephemeral
 | 
			
		||||
 | 
			
		||||
    mkdir -p /mnt/ephemeral/kubernetes
 | 
			
		||||
 | 
			
		||||
    move_docker="/mnt/ephemeral"
 | 
			
		||||
    move_kubelet="/mnt/ephemeral/kubernetes"
 | 
			
		||||
  elif [[ ${docker_storage} == "aufs-nolvm" ]]; then
 | 
			
		||||
    if [[ ${#block_devices[@]} != 1 ]]; then
 | 
			
		||||
      echo "aufs-nolvm selected, but multiple ephemeral devices were found; only the first will be available"
 | 
			
		||||
    fi
 | 
			
		||||
 | 
			
		||||
    mkfs -t ext4 ${block_devices[0]}
 | 
			
		||||
    echo "${block_devices[0]}  /mnt/ephemeral  ext4     noatime,nofail  0 0" >> /etc/fstab
 | 
			
		||||
    mkdir -p /mnt/ephemeral
 | 
			
		||||
    mount /mnt/ephemeral
 | 
			
		||||
 | 
			
		||||
    mkdir -p /mnt/ephemeral/kubernetes
 | 
			
		||||
 | 
			
		||||
    move_docker="/mnt/ephemeral"
 | 
			
		||||
    move_kubelet="/mnt/ephemeral/kubernetes"
 | 
			
		||||
  elif [[ ${docker_storage} == "devicemapper" || ${docker_storage} == "aufs" ]]; then
 | 
			
		||||
    # We always use LVM, even with one device
 | 
			
		||||
    # In devicemapper mode, Docker can use LVM directly
 | 
			
		||||
    # Also, fewer code paths are good
 | 
			
		||||
    echo "Using LVM2 and ext4"
 | 
			
		||||
    apt-get-install lvm2
 | 
			
		||||
 | 
			
		||||
    # Don't output spurious "File descriptor X leaked on vgcreate invocation."
 | 
			
		||||
    # Known bug: e.g. Ubuntu #591823
 | 
			
		||||
    export LVM_SUPPRESS_FD_WARNINGS=1
 | 
			
		||||
 | 
			
		||||
    for block_device in ${block_devices}; do
 | 
			
		||||
      pvcreate ${block_device}
 | 
			
		||||
    done
 | 
			
		||||
    vgcreate vg-ephemeral ${block_devices[@]}
 | 
			
		||||
 | 
			
		||||
    if [[ ${docker_storage} == "devicemapper" ]]; then
 | 
			
		||||
      # devicemapper thin provisioning, managed by docker
 | 
			
		||||
      # This is the best option, but it is sadly broken on most distros
 | 
			
		||||
      # Bug: https://github.com/docker/docker/issues/4036
 | 
			
		||||
 | 
			
		||||
      # 80% goes to the docker thin-pool; we want to leave some space for host-volumes
 | 
			
		||||
      lvcreate -l 80%VG --thinpool docker-thinpool vg-ephemeral
 | 
			
		||||
 | 
			
		||||
      DOCKER_OPTS="${DOCKER_OPTS:-} --storage-opt dm.thinpooldev=/dev/mapper/vg--ephemeral-docker--thinpool"
 | 
			
		||||
      # Note that we don't move docker; docker goes direct to the thinpool
 | 
			
		||||
 | 
			
		||||
      # Remaining space (20%) is for kubernetes data
 | 
			
		||||
      # TODO: Should this be a thin pool?  e.g. would we ever want to snapshot this data?
 | 
			
		||||
      lvcreate -l 100%FREE -n kubernetes vg-ephemeral
 | 
			
		||||
      mkfs -t ext4 /dev/vg-ephemeral/kubernetes
 | 
			
		||||
      mkdir -p /mnt/ephemeral/kubernetes
 | 
			
		||||
      echo "/dev/vg-ephemeral/kubernetes  /mnt/ephemeral/kubernetes  ext4  noatime,nofail  0 0" >> /etc/fstab
 | 
			
		||||
      mount /mnt/ephemeral/kubernetes
 | 
			
		||||
 | 
			
		||||
      move_kubelet="/mnt/ephemeral/kubernetes"
 | 
			
		||||
     else
 | 
			
		||||
      # aufs
 | 
			
		||||
      # We used to split docker & kubernetes, but we no longer do that, because
 | 
			
		||||
      # host volumes go into the kubernetes area, and it is otherwise very easy
 | 
			
		||||
      # to fill up small volumes.
 | 
			
		||||
      #
 | 
			
		||||
      # No need for thin pool since we are not over-provisioning or doing snapshots
 | 
			
		||||
      # (probably shouldn't be doing snapshots on ephemeral disk? Should be stateless-ish.)
 | 
			
		||||
      # Tried to do it, but it cause problems (#16188)
 | 
			
		||||
 | 
			
		||||
      lvcreate -l 100%VG -n ephemeral vg-ephemeral
 | 
			
		||||
      mkfs -t ext4 /dev/vg-ephemeral/ephemeral
 | 
			
		||||
      mkdir -p /mnt/ephemeral
 | 
			
		||||
      echo "/dev/vg-ephemeral/ephemeral  /mnt/ephemeral  ext4  noatime,nofail 0 0" >> /etc/fstab
 | 
			
		||||
      mount /mnt/ephemeral
 | 
			
		||||
 | 
			
		||||
      mkdir -p /mnt/ephemeral/kubernetes
 | 
			
		||||
 | 
			
		||||
      move_docker="/mnt/ephemeral"
 | 
			
		||||
      move_kubelet="/mnt/ephemeral/kubernetes"
 | 
			
		||||
     fi
 | 
			
		||||
 else
 | 
			
		||||
    echo "Ignoring unknown DOCKER_STORAGE: ${docker_storage}"
 | 
			
		||||
  fi
 | 
			
		||||
fi
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
if [[ ${docker_storage} == "btrfs" ]]; then
 | 
			
		||||
  DOCKER_OPTS="${DOCKER_OPTS:-} -s btrfs"
 | 
			
		||||
elif [[ ${docker_storage} == "aufs-nolvm" || ${docker_storage} == "aufs" ]]; then
 | 
			
		||||
  # Install aufs kernel module
 | 
			
		||||
  # Fix issue #14162 with extra-virtual
 | 
			
		||||
  if [[ `lsb_release -i -s` == 'Ubuntu' ]]; then
 | 
			
		||||
    apt-get-install linux-image-extra-$(uname -r) linux-image-extra-virtual
 | 
			
		||||
  fi
 | 
			
		||||
 | 
			
		||||
  # Install aufs tools
 | 
			
		||||
  apt-get-install aufs-tools
 | 
			
		||||
 | 
			
		||||
  DOCKER_OPTS="${DOCKER_OPTS:-} -s aufs"
 | 
			
		||||
elif [[ ${docker_storage} == "devicemapper" ]]; then
 | 
			
		||||
  DOCKER_OPTS="${DOCKER_OPTS:-} -s devicemapper"
 | 
			
		||||
else
 | 
			
		||||
  echo "Ignoring unknown DOCKER_STORAGE: ${docker_storage}"
 | 
			
		||||
fi
 | 
			
		||||
 | 
			
		||||
if [[ -n "${move_docker}" ]]; then
 | 
			
		||||
  # Stop docker if it is running, so we can move its files
 | 
			
		||||
  systemctl stop docker || true
 | 
			
		||||
 | 
			
		||||
  # Move docker to e.g. /mnt
 | 
			
		||||
  # but only if it is a directory, not a symlink left over from a previous run
 | 
			
		||||
  if [[ -d /var/lib/docker ]]; then
 | 
			
		||||
    mv /var/lib/docker ${move_docker}/
 | 
			
		||||
  fi
 | 
			
		||||
  mkdir -p ${move_docker}/docker
 | 
			
		||||
  # If /var/lib/docker doesn't exist (it will exist if it is already a symlink),
 | 
			
		||||
  # then symlink it to the ephemeral docker area
 | 
			
		||||
  if [[ ! -e /var/lib/docker ]]; then
 | 
			
		||||
    ln -s ${move_docker}/docker /var/lib/docker
 | 
			
		||||
  fi
 | 
			
		||||
  DOCKER_ROOT="${move_docker}/docker"
 | 
			
		||||
  DOCKER_OPTS="${DOCKER_OPTS:-} -g ${DOCKER_ROOT}"
 | 
			
		||||
fi
 | 
			
		||||
 | 
			
		||||
if [[ -n "${move_kubelet}" ]]; then
 | 
			
		||||
  # Move /var/lib/kubelet to e.g. /mnt
 | 
			
		||||
  # (the backing for empty-dir volumes can use a lot of space!)
 | 
			
		||||
  # (As with /var/lib/docker, only if it is a directory; skip if symlink)
 | 
			
		||||
  if [[ -d /var/lib/kubelet ]]; then
 | 
			
		||||
    mv /var/lib/kubelet ${move_kubelet}/
 | 
			
		||||
  fi
 | 
			
		||||
  mkdir -p ${move_kubelet}/kubelet
 | 
			
		||||
  # Create symlink for /var/lib/kubelet, unless it is already a symlink
 | 
			
		||||
  if [[ ! -e /var/lib/kubelet ]]; then
 | 
			
		||||
    ln -s ${move_kubelet}/kubelet /var/lib/kubelet
 | 
			
		||||
  fi
 | 
			
		||||
  KUBELET_ROOT="${move_kubelet}/kubelet"
 | 
			
		||||
fi
 | 
			
		||||
 | 
			
		||||
}
 | 
			
		||||
@@ -1,27 +0,0 @@
 | 
			
		||||
{
 | 
			
		||||
  "Version": "2012-10-17",
 | 
			
		||||
  "Statement": [
 | 
			
		||||
    {
 | 
			
		||||
      "Effect": "Allow",
 | 
			
		||||
      "Action": ["ec2:*"],
 | 
			
		||||
      "Resource": ["*"]
 | 
			
		||||
    },
 | 
			
		||||
    {
 | 
			
		||||
      "Effect": "Allow",
 | 
			
		||||
      "Action": ["elasticloadbalancing:*"],
 | 
			
		||||
      "Resource": ["*"]
 | 
			
		||||
    },
 | 
			
		||||
    {
 | 
			
		||||
      "Effect": "Allow",
 | 
			
		||||
      "Action": ["route53:*"],
 | 
			
		||||
      "Resource": ["*"]
 | 
			
		||||
    },
 | 
			
		||||
    {
 | 
			
		||||
      "Effect": "Allow",
 | 
			
		||||
      "Action": "s3:*",
 | 
			
		||||
      "Resource": [
 | 
			
		||||
        "arn:aws:s3:::kubernetes-*"
 | 
			
		||||
      ]
 | 
			
		||||
    }
 | 
			
		||||
  ]
 | 
			
		||||
}
 | 
			
		||||
@@ -1,10 +0,0 @@
 | 
			
		||||
{
 | 
			
		||||
  "Version": "2012-10-17",
 | 
			
		||||
  "Statement": [
 | 
			
		||||
    {
 | 
			
		||||
      "Effect": "Allow",
 | 
			
		||||
      "Principal": { "Service": "ec2.amazonaws.com"},
 | 
			
		||||
      "Action": "sts:AssumeRole"
 | 
			
		||||
    }
 | 
			
		||||
  ]
 | 
			
		||||
}
 | 
			
		||||
@@ -1,45 +0,0 @@
 | 
			
		||||
{
 | 
			
		||||
  "Version": "2012-10-17",
 | 
			
		||||
  "Statement": [
 | 
			
		||||
    {
 | 
			
		||||
      "Effect": "Allow",
 | 
			
		||||
      "Action": "s3:*",
 | 
			
		||||
      "Resource": [
 | 
			
		||||
        "arn:aws:s3:::kubernetes-*"
 | 
			
		||||
      ]
 | 
			
		||||
    },
 | 
			
		||||
    {
 | 
			
		||||
      "Effect": "Allow",
 | 
			
		||||
      "Action": "ec2:Describe*",
 | 
			
		||||
      "Resource": "*"
 | 
			
		||||
    },
 | 
			
		||||
    {
 | 
			
		||||
      "Effect": "Allow",
 | 
			
		||||
      "Action": "ec2:AttachVolume",
 | 
			
		||||
      "Resource": "*"
 | 
			
		||||
    },
 | 
			
		||||
    {
 | 
			
		||||
      "Effect": "Allow",
 | 
			
		||||
      "Action": "ec2:DetachVolume",
 | 
			
		||||
      "Resource": "*"
 | 
			
		||||
    },
 | 
			
		||||
    {
 | 
			
		||||
      "Effect": "Allow",
 | 
			
		||||
      "Action": ["route53:*"],
 | 
			
		||||
      "Resource": ["*"]
 | 
			
		||||
    },
 | 
			
		||||
    {
 | 
			
		||||
      "Effect": "Allow",
 | 
			
		||||
      "Action": [
 | 
			
		||||
        "ecr:GetAuthorizationToken",
 | 
			
		||||
        "ecr:BatchCheckLayerAvailability",
 | 
			
		||||
        "ecr:GetDownloadUrlForLayer",
 | 
			
		||||
        "ecr:GetRepositoryPolicy",
 | 
			
		||||
        "ecr:DescribeRepositories",
 | 
			
		||||
        "ecr:ListImages",
 | 
			
		||||
        "ecr:BatchGetImage"
 | 
			
		||||
      ],
 | 
			
		||||
      "Resource": "*"
 | 
			
		||||
    }
 | 
			
		||||
  ]
 | 
			
		||||
}
 | 
			
		||||
@@ -1,10 +0,0 @@
 | 
			
		||||
{
 | 
			
		||||
  "Version": "2012-10-17",
 | 
			
		||||
  "Statement": [
 | 
			
		||||
    {
 | 
			
		||||
      "Effect": "Allow",
 | 
			
		||||
      "Principal": { "Service": "ec2.amazonaws.com"},
 | 
			
		||||
      "Action": "sts:AssumeRole"
 | 
			
		||||
    }
 | 
			
		||||
  ]
 | 
			
		||||
}
 | 
			
		||||
							
								
								
									
										1619
									
								
								cluster/aws/util.sh
									
									
									
									
									
								
							
							
						
						
									
										1619
									
								
								cluster/aws/util.sh
									
									
									
									
									
								
							
										
											
												File diff suppressed because it is too large
												Load Diff
											
										
									
								
							@@ -1,86 +0,0 @@
 | 
			
		||||
#!/bin/bash
 | 
			
		||||
 | 
			
		||||
# Copyright 2015 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.
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
source "${KUBE_ROOT}/cluster/aws/common/common.sh"
 | 
			
		||||
 | 
			
		||||
SSH_USER=ubuntu
 | 
			
		||||
 | 
			
		||||
# Detects the AMI to use for ubuntu (considering the region)
 | 
			
		||||
#
 | 
			
		||||
# Vars set:
 | 
			
		||||
#   AWS_IMAGE
 | 
			
		||||
function detect-wily-image () {
 | 
			
		||||
  # This is the ubuntu 15.10 image for <region>, amd64, hvm:ebs-ssd
 | 
			
		||||
  # See here: http://cloud-images.ubuntu.com/locator/ec2/ for other images
 | 
			
		||||
  # This will need to be updated from time to time as amis are deprecated
 | 
			
		||||
  if [[ -z "${AWS_IMAGE-}" ]]; then
 | 
			
		||||
    case "${AWS_REGION}" in
 | 
			
		||||
      ap-northeast-1)
 | 
			
		||||
        AWS_IMAGE=ami-3355505d
 | 
			
		||||
        ;;
 | 
			
		||||
 | 
			
		||||
      ap-northeast-2)
 | 
			
		||||
        AWS_IMAGE=ami-e427e98a
 | 
			
		||||
        ;;
 | 
			
		||||
 | 
			
		||||
      ap-southeast-1)
 | 
			
		||||
        AWS_IMAGE=ami-60975903
 | 
			
		||||
        ;;
 | 
			
		||||
 | 
			
		||||
      eu-central-1)
 | 
			
		||||
        AWS_IMAGE=ami-6da2ba01
 | 
			
		||||
        ;;
 | 
			
		||||
 | 
			
		||||
      eu-west-1)
 | 
			
		||||
        AWS_IMAGE=ami-36a71645
 | 
			
		||||
        ;;
 | 
			
		||||
 | 
			
		||||
      sa-east-1)
 | 
			
		||||
        AWS_IMAGE=ami-fd36b691
 | 
			
		||||
        ;;
 | 
			
		||||
 | 
			
		||||
      us-east-1)
 | 
			
		||||
        AWS_IMAGE=ami-6610390c
 | 
			
		||||
        ;;
 | 
			
		||||
 | 
			
		||||
      us-west-1)
 | 
			
		||||
        AWS_IMAGE=ami-6e64120e
 | 
			
		||||
        ;;
 | 
			
		||||
 | 
			
		||||
      cn-north-1)
 | 
			
		||||
        AWS_IMAGE=ami-17a76f7a
 | 
			
		||||
        ;;
 | 
			
		||||
 | 
			
		||||
      us-gov-west-1)
 | 
			
		||||
        AWS_IMAGE=ami-b0bad893
 | 
			
		||||
        ;;
 | 
			
		||||
 | 
			
		||||
      ap-southeast-2)
 | 
			
		||||
        AWS_IMAGE=ami-3895b15b
 | 
			
		||||
        ;;
 | 
			
		||||
 | 
			
		||||
      us-west-2)
 | 
			
		||||
        AWS_IMAGE=ami-d95abcb9
 | 
			
		||||
        ;;
 | 
			
		||||
 | 
			
		||||
      *)
 | 
			
		||||
        echo "Please specify AWS_IMAGE directly (region ${AWS_REGION} not recognized)"
 | 
			
		||||
        exit 1
 | 
			
		||||
    esac
 | 
			
		||||
  fi
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
		Reference in New Issue
	
	Block a user