From c556e8f0f5e75131a8ae909908f550f19de01851 Mon Sep 17 00:00:00 2001 From: Justin Santa Barbara Date: Sun, 17 Jan 2016 21:17:14 -0500 Subject: [PATCH] kube-up: Refactor kube-env into common; use in AWS Use kube-env on the AWS master also --- cluster/aws/templates/extract-kube-env.sh | 27 ++++ cluster/aws/util.sh | 49 ++---- cluster/common.sh | 180 ++++++++++++++++++++++ cluster/gce/util.sh | 179 --------------------- 4 files changed, 221 insertions(+), 214 deletions(-) create mode 100644 cluster/aws/templates/extract-kube-env.sh diff --git a/cluster/aws/templates/extract-kube-env.sh b/cluster/aws/templates/extract-kube-env.sh new file mode 100644 index 0000000000..5d4152bf61 --- /dev/null +++ b/cluster/aws/templates/extract-kube-env.sh @@ -0,0 +1,27 @@ +#!/bin/bash + +# Copyright 2016 The Kubernetes Authors All rights reserved. +# +# 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. + +apt-get-install python-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)" + diff --git a/cluster/aws/util.sh b/cluster/aws/util.sh index b2ac5251f1..908022e950 100755 --- a/cluster/aws/util.sh +++ b/cluster/aws/util.sh @@ -53,6 +53,9 @@ if [[ "${KUBE_OS_DISTRIBUTION}" == "ubuntu" ]]; then KUBE_OS_DISTRIBUTION=vivid fi +# For GCE script compatability +OS_DISTRIBUTION=${KUBE_OS_DISTRIBUTION} + case "${KUBE_OS_DISTRIBUTION}" in trusty|wheezy|jessie|vivid|coreos) source "${KUBE_ROOT}/cluster/aws/${KUBE_OS_DISTRIBUTION}/util.sh" @@ -926,48 +929,24 @@ function start-master() { service_ip=$(echo "${octets[*]}" | sed 's/ /./g') MASTER_EXTRA_SANS="IP:${service_ip},DNS:kubernetes,DNS:kubernetes.default,DNS:kubernetes.default.svc,DNS:kubernetes.default.svc.${DNS_DOMAIN},DNS:${MASTER_NAME}" + write-master-env ( # We pipe this to the ami as a startup script in the user-data field. Requires a compatible ami echo "#! /bin/bash" echo "mkdir -p /var/cache/kubernetes-install" echo "cd /var/cache/kubernetes-install" - echo "readonly SALT_MASTER='${MASTER_INTERNAL_IP}'" - echo "readonly INSTANCE_PREFIX='${INSTANCE_PREFIX}'" - echo "readonly NODE_INSTANCE_PREFIX='${NODE_INSTANCE_PREFIX}'" - echo "readonly NON_MASQUERADE_CIDR='${NON_MASQUERADE_CIDR:-}'" - echo "readonly CLUSTER_IP_RANGE='${CLUSTER_IP_RANGE}'" - echo "readonly ALLOCATE_NODE_CIDRS='${ALLOCATE_NODE_CIDRS}'" - echo "readonly SERVER_BINARY_TAR_URL='${SERVER_BINARY_TAR_URL}'" - echo "readonly SALT_TAR_URL='${SALT_TAR_URL}'" - echo "readonly ZONE='${ZONE}'" - echo "readonly NUM_NODES='${NUM_NODES}'" - echo "readonly KUBE_USER='${KUBE_USER}'" - echo "readonly KUBE_PASSWORD='${KUBE_PASSWORD}'" - echo "readonly SERVICE_CLUSTER_IP_RANGE='${SERVICE_CLUSTER_IP_RANGE}'" - echo "readonly ENABLE_CLUSTER_MONITORING='${ENABLE_CLUSTER_MONITORING:-none}'" - echo "readonly ENABLE_CLUSTER_LOGGING='${ENABLE_CLUSTER_LOGGING:-false}'" - echo "readonly ENABLE_NODE_LOGGING='${ENABLE_NODE_LOGGING:-false}'" - echo "readonly LOGGING_DESTINATION='${LOGGING_DESTINATION:-}'" - echo "readonly ELASTICSEARCH_LOGGING_REPLICAS='${ELASTICSEARCH_LOGGING_REPLICAS:-}'" - echo "readonly ENABLE_CLUSTER_DNS='${ENABLE_CLUSTER_DNS:-false}'" - echo "readonly ENABLE_CLUSTER_UI='${ENABLE_CLUSTER_UI:-false}'" - echo "readonly RUNTIME_CONFIG='${RUNTIME_CONFIG}'" - echo "readonly DNS_REPLICAS='${DNS_REPLICAS:-}'" - echo "readonly DNS_SERVER_IP='${DNS_SERVER_IP:-}'" - echo "readonly DNS_DOMAIN='${DNS_DOMAIN:-}'" - echo "readonly ADMISSION_CONTROL='${ADMISSION_CONTROL:-}'" - echo "readonly MASTER_IP_RANGE='${MASTER_IP_RANGE:-}'" - echo "readonly KUBELET_TOKEN='${KUBELET_TOKEN}'" - echo "readonly KUBE_PROXY_TOKEN='${KUBE_PROXY_TOKEN}'" - echo "readonly DOCKER_STORAGE='${DOCKER_STORAGE:-}'" - echo "readonly MASTER_EXTRA_SANS='${MASTER_EXTRA_SANS:-}'" - echo "readonly NETWORK_PROVIDER='${NETWORK_PROVIDER:-}'" - echo "readonly OPENCONTRAIL_TAG='${OPENCONTRAIL_TAG:-}'" - echo "readonly OPENCONTRAIL_KUBERNETES_TAG='${OPENCONTRAIL_KUBERNETES_TAG:-}'" - echo "readonly OPENCONTRAIL_PUBLIC_SUBNET='${OPENCONTRAIL_PUBLIC_SUBNET:-}'" - echo "readonly E2E_STORAGE_TEST_ENVIRONMENT='${E2E_STORAGE_TEST_ENVIRONMENT:-}'" + + echo "cat > kube-env.yaml << __EOF_MASTER_KUBE_ENV_YAML" + cat ${KUBE_TEMP}/master-kube-env.yaml + # TODO: get rid of these exceptions / harmonize with common or GCE + echo "SALT_MASTER: $(yaml-quote ${MASTER_INTERNAL_IP:-})" + echo "DOCKER_STORAGE: $(yaml-quote ${DOCKER_STORAGE:-})" + echo "MASTER_EXTRA_SANS: $(yaml-quote ${MASTER_EXTRA_SANS:-})" + echo "__EOF_MASTER_KUBE_ENV_YAML" + grep -v "^#" "${KUBE_ROOT}/cluster/aws/templates/common.sh" + grep -v "^#" "${KUBE_ROOT}/cluster/aws/templates/extract-kube-env.sh" grep -v "^#" "${KUBE_ROOT}/cluster/aws/templates/format-disks.sh" grep -v "^#" "${KUBE_ROOT}/cluster/aws/templates/setup-master-pd.sh" grep -v "^#" "${KUBE_ROOT}/cluster/aws/templates/create-dynamic-salt-files.sh" diff --git a/cluster/common.sh b/cluster/common.sh index 957439a49b..69d0945493 100755 --- a/cluster/common.sh +++ b/cluster/common.sh @@ -442,6 +442,186 @@ function build-runtime-config() { fi } +function write-master-env { + # If the user requested that the master be part of the cluster, set the + # environment variable to program the master kubelet to register itself. + if [[ "${REGISTER_MASTER_KUBELET:-}" == "true" ]]; then + KUBELET_APISERVER="${MASTER_NAME}" + fi + + build-kube-env true "${KUBE_TEMP}/master-kube-env.yaml" +} + +function write-node-env { + build-kube-env false "${KUBE_TEMP}/node-kube-env.yaml" +} + +# $1: if 'true', we're building a master yaml, else a node +function build-kube-env { + local master=$1 + local file=$2 + + build-runtime-config + + rm -f ${file} + cat >$file <>$file <>$file <>$file <>$file <>$file <>$file <>$file <>$file <>$file <>$file <>$file <>$file <>$file <>$file <>$file <>$file <>$file <>$file </dev/null 2>&1; then shasum -a1 "$1" | awk '{ print $1 }' diff --git a/cluster/gce/util.sh b/cluster/gce/util.sh index 330532cb06..b7a6045247 100755 --- a/cluster/gce/util.sh +++ b/cluster/gce/util.sh @@ -457,20 +457,6 @@ function add-instance-metadata-from-file { done } -function write-master-env { - # If the user requested that the master be part of the cluster, set the - # environment variable to program the master kubelet to register itself. - if [[ "${REGISTER_MASTER_KUBELET:-}" == "true" ]]; then - KUBELET_APISERVER="${MASTER_NAME}" - fi - - build-kube-env true "${KUBE_TEMP}/master-kube-env.yaml" -} - -function write-node-env { - build-kube-env false "${KUBE_TEMP}/node-kube-env.yaml" -} - # Create certificate pairs for the cluster. # $1: The public IP for the master. # @@ -1318,168 +1304,3 @@ function restart-apiserver { function prepare-e2e() { detect-project } - -# $1: if 'true', we're building a master yaml, else a node -function build-kube-env { - local master=$1 - local file=$2 - - build-runtime-config - - rm -f ${file} - cat >$file <>$file <>$file <>$file <>$file <>$file <>$file <>$file <>$file <>$file <>$file <>$file <>$file <>$file <>$file <>$file <>$file <>$file <>$file <