Merge pull request #27877 from wojtek-t/mix_waiting_for_upgrade
Automatic merge from submit-queue Fix waiting for node upgrades Fix https://github.com/kubernetes/kubernetes/issues/27852 If someone wants to finish it, feel free to pick it up and finish. @davidopp
This commit is contained in:
		@@ -207,8 +207,6 @@ function prepare-node-upgrade() {
 | 
				
			|||||||
    source "${KUBE_ROOT}/cluster/gce/debian/helper.sh"
 | 
					    source "${KUBE_ROOT}/cluster/gce/debian/helper.sh"
 | 
				
			||||||
  fi
 | 
					  fi
 | 
				
			||||||
  create-node-instance-template "${template_name}"
 | 
					  create-node-instance-template "${template_name}"
 | 
				
			||||||
  # The following is echo'd so that callers can get the template name.
 | 
					 | 
				
			||||||
  echo $template_name
 | 
					 | 
				
			||||||
  echo "== Finished preparing node upgrade (to ${KUBE_VERSION}). ==" >&2
 | 
					  echo "== Finished preparing node upgrade (to ${KUBE_VERSION}). ==" >&2
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@@ -220,8 +218,15 @@ function do-node-upgrade() {
 | 
				
			|||||||
  # NOTE(zmerlynn): If you are changing this gcloud command, update
 | 
					  # NOTE(zmerlynn): If you are changing this gcloud command, update
 | 
				
			||||||
  #                 test/e2e/cluster_upgrade.go to match this EXACTLY.
 | 
					  #                 test/e2e/cluster_upgrade.go to match this EXACTLY.
 | 
				
			||||||
  local template_name=$(get-template-name-from-version ${SANITIZED_VERSION})
 | 
					  local template_name=$(get-template-name-from-version ${SANITIZED_VERSION})
 | 
				
			||||||
 | 
					  local old_templates=()
 | 
				
			||||||
 | 
					  local updates=()
 | 
				
			||||||
  for group in ${INSTANCE_GROUPS[@]}; do
 | 
					  for group in ${INSTANCE_GROUPS[@]}; do
 | 
				
			||||||
    gcloud alpha compute rolling-updates \
 | 
					    old_templates+=($(gcloud compute instance-groups managed list \
 | 
				
			||||||
 | 
					        --project="${PROJECT}" \
 | 
				
			||||||
 | 
					        --zone="${ZONE}" \
 | 
				
			||||||
 | 
					        --regexp="${group}" \
 | 
				
			||||||
 | 
					        --format='value(instanceTemplate)' || true))
 | 
				
			||||||
 | 
					    update=$(gcloud alpha compute rolling-updates \
 | 
				
			||||||
        --project="${PROJECT}" \
 | 
					        --project="${PROJECT}" \
 | 
				
			||||||
        --zone="${ZONE}" \
 | 
					        --zone="${ZONE}" \
 | 
				
			||||||
        start \
 | 
					        start \
 | 
				
			||||||
@@ -230,10 +235,36 @@ function do-node-upgrade() {
 | 
				
			|||||||
        --instance-startup-timeout=300s \
 | 
					        --instance-startup-timeout=300s \
 | 
				
			||||||
        --max-num-concurrent-instances=1 \
 | 
					        --max-num-concurrent-instances=1 \
 | 
				
			||||||
        --max-num-failed-instances=0 \
 | 
					        --max-num-failed-instances=0 \
 | 
				
			||||||
        --min-instance-update-time=0s
 | 
					        --min-instance-update-time=0s 2>&1)
 | 
				
			||||||
 | 
					    id=$(echo "${update}" | grep "Started" | cut -d '/' -f 11 | cut -d ']' -f 1)
 | 
				
			||||||
 | 
					    updates+=("${id}")
 | 
				
			||||||
  done
 | 
					  done
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  # TODO(zmerlynn): Wait for the rolling-update to finish.
 | 
					  # Wait until rolling updates are finished.
 | 
				
			||||||
 | 
					  for update in ${updates[@]}; do
 | 
				
			||||||
 | 
					    while true; do
 | 
				
			||||||
 | 
					      result=$(gcloud alpha compute rolling-updates \
 | 
				
			||||||
 | 
					          --project="${PROJECT}" \
 | 
				
			||||||
 | 
					          --zone="${ZONE}" \
 | 
				
			||||||
 | 
					          describe \
 | 
				
			||||||
 | 
					          ${update} \
 | 
				
			||||||
 | 
					          --format='value(status)' || true)
 | 
				
			||||||
 | 
					      if [ $result = "ROLLED_OUT" ]; then
 | 
				
			||||||
 | 
					        echo "Rolling update ${update} is ${result} state and finished."
 | 
				
			||||||
 | 
					        break
 | 
				
			||||||
 | 
					      fi
 | 
				
			||||||
 | 
					      echo "Rolling update ${update} is stil in ${result} state."
 | 
				
			||||||
 | 
					      sleep 10
 | 
				
			||||||
 | 
					    done
 | 
				
			||||||
 | 
					  done
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  # Remove the old templates.
 | 
				
			||||||
 | 
					  for tmpl in ${old_templates[@]}; do
 | 
				
			||||||
 | 
					    gcloud compute instance-templates delete \
 | 
				
			||||||
 | 
					        --quiet \
 | 
				
			||||||
 | 
					        --project="${PROJECT}" \
 | 
				
			||||||
 | 
					        "${tmpl}" || true
 | 
				
			||||||
 | 
					  done
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  echo "== Finished upgrading nodes to ${KUBE_VERSION}. ==" >&2
 | 
					  echo "== Finished upgrading nodes to ${KUBE_VERSION}. ==" >&2
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 
 | 
				
			|||||||
		Reference in New Issue
	
	Block a user