From 2958ea253a4cddfc8abde3de08ae9ae77b2ae7d3 Mon Sep 17 00:00:00 2001 From: Justin Santa Barbara Date: Sun, 29 Nov 2015 14:38:03 -0500 Subject: [PATCH] GCE: Allow for reuse of master This is for internal use at the moment, for testing Ubernetes Lite, but arguably makes the code a little cleaner. Also rename KUBE_SHARE_MASTER -> KUBE_USE_EXISTING_MASTER --- cluster/aws/util.sh | 6 ++--- cluster/gce/util.sh | 42 +++++++++++++++++++++++++++---- docs/proposals/federation-lite.md | 2 +- 3 files changed, 41 insertions(+), 9 deletions(-) diff --git a/cluster/aws/util.sh b/cluster/aws/util.sh index 5fb27ab59e..bf50ed1555 100755 --- a/cluster/aws/util.sh +++ b/cluster/aws/util.sh @@ -20,7 +20,7 @@ # The intent is to allow experimentation/advanced functionality before we # are ready to commit to supporting it. # Experimental functionality: -# KUBE_SHARE_MASTER=true +# KUBE_USE_EXISTING_MASTER=true # Detect and reuse an existing master; useful if you want to # create more nodes, perhaps with a different instance type or in # a different subnet/AZ @@ -808,8 +808,8 @@ function kube-up { # HTTPS to the master is allowed (for API access) authorize-security-group-ingress "${MASTER_SG_ID}" "--protocol tcp --port 443 --cidr 0.0.0.0/0" - # KUBE_SHARE_MASTER is used to add minions to an existing master - if [[ "${KUBE_SHARE_MASTER:-}" == "true" ]]; then + # KUBE_USE_EXISTING_MASTER is used to add minions to an existing master + if [[ "${KUBE_USE_EXISTING_MASTER:-}" == "true" ]]; then # Detect existing master detect-master diff --git a/cluster/gce/util.sh b/cluster/gce/util.sh index f57f953e59..94d3c424d0 100755 --- a/cluster/gce/util.sh +++ b/cluster/gce/util.sh @@ -575,6 +575,22 @@ function kube-up { find-release-tars upload-server-tars + if [[ ${KUBE_USE_EXISTING_MASTER:-} == "true" ]]; then + create-nodes + create-autoscaler + else + check-existing + create-network + create-master + create-nodes-firewall + create-nodes-template + create-nodes + create-autoscaler + check-cluster + fi +} + +function check-existing() { local running_in_terminal=false # May be false if tty is not allocated (for example with ssh -T). if [ -t 1 ]; then @@ -595,7 +611,9 @@ function kube-up { fi fi fi +} +function create-network() { if ! gcloud compute networks --project "${PROJECT}" describe "${NETWORK}" &>/dev/null; then echo "Creating new network: ${NETWORK}" # The network needs to be created synchronously or we have a race. The @@ -618,7 +636,9 @@ function kube-up { --source-ranges "0.0.0.0/0" \ --allow "tcp:22" & fi +} +function create-master() { echo "Starting master and configuring firewalls" gcloud compute firewall-rules create "${MASTER_NAME}-https" \ --project "${PROJECT}" \ @@ -663,7 +683,9 @@ function kube-up { create-certs "${MASTER_RESERVED_IP}" create-master-instance "${MASTER_RESERVED_IP}" & +} +function create-nodes-firewall() { # Create a single firewall rule for all minions. create-firewall-rule "${NODE_TAG}-all" "${CLUSTER_IP_RANGE}" "${NODE_TAG}" & @@ -676,7 +698,9 @@ function kube-up { kube::util::wait-for-jobs || { echo -e "${color_red}${fail} commands failed.${color_norm}" >&2 } +} +function create-nodes-template() { echo "Creating minions." # TODO(zmerlynn): Refactor setting scope flags. @@ -690,8 +714,12 @@ function kube-up { write-node-env local template_name="${NODE_INSTANCE_PREFIX}-template" - + create-node-instance-template $template_name +} + +function create-nodes() { + local template_name="${NODE_INSTANCE_PREFIX}-template" local defaulted_max_instances_per_mig=${MAX_INSTANCES_PER_MIG:-500} @@ -731,10 +759,9 @@ function kube-up { "${NODE_INSTANCE_PREFIX}-group" \ --zone "${ZONE}" \ --project "${PROJECT}" || true; +} - detect-node-names - detect-master - +function create-autoscaler() { # Create autoscaler for nodes if requested if [[ "${ENABLE_NODE_AUTOSCALER}" == "true" ]]; then METRICS="" @@ -764,6 +791,11 @@ function kube-up { gcloud compute instance-groups managed set-autoscaling "${NODE_INSTANCE_PREFIX}-group" --zone "${ZONE}" --project "${PROJECT}" \ --min-num-replicas "${last_min_instances}" --max-num-replicas "${last_max_instances}" ${METRICS} || true fi +} + +function check-cluster() { + detect-node-names + detect-master echo "Waiting up to ${KUBE_CLUSTER_INITIALIZATION_TIMEOUT} seconds for cluster initialization." echo @@ -845,7 +877,7 @@ function kube-down { fi # Get the name of the managed instance group template before we delete the - # managed instange group. (The name of the managed instnace group template may + # managed instance group. (The name of the managed instance group template may # change during a cluster upgrade.) local template=$(get-template "${PROJECT}" "${ZONE}" "${NODE_INSTANCE_PREFIX}-group") diff --git a/docs/proposals/federation-lite.md b/docs/proposals/federation-lite.md index 44fe52d4b5..393e088335 100644 --- a/docs/proposals/federation-lite.md +++ b/docs/proposals/federation-lite.md @@ -71,7 +71,7 @@ make multiple zones better supported. For the initial implemenation, kube-up must be run multiple times, once for each zone. The first kube-up will take place as normal, but then for each additional zone the user must run kube-up again, specifying -`KUBE_SHARE_MASTER=true` and `KUBE_SUBNET_CIDR=172.20.x.0/24`. This will then +`KUBE_USE_EXISTING_MASTER=true` and `KUBE_SUBNET_CIDR=172.20.x.0/24`. This will then create additional nodes in a different zone, but will register them with the existing master.