mirror of
https://github.com/k3s-io/kubernetes.git
synced 2025-07-23 19:56:01 +00:00
Merge pull request #83352 from jkaniuk/additional-nodes
Ability to set up additional, bigger nodes during tests
This commit is contained in:
commit
90f487190a
@ -180,6 +180,13 @@ ENABLE_METADATA_AGENT="${KUBE_ENABLE_METADATA_AGENT:-none}"
|
|||||||
# Useful for scheduling heapster in large clusters with nodes of small size.
|
# Useful for scheduling heapster in large clusters with nodes of small size.
|
||||||
HEAPSTER_MACHINE_TYPE="${HEAPSTER_MACHINE_TYPE:-}"
|
HEAPSTER_MACHINE_TYPE="${HEAPSTER_MACHINE_TYPE:-}"
|
||||||
|
|
||||||
|
# Optional: Additional nodes would be created if their type and number is specified.
|
||||||
|
# NUM_NODES would be lowered respectively.
|
||||||
|
# Useful for running cluster-level addons that needs more resources than would fit
|
||||||
|
# on small nodes, like network plugins.
|
||||||
|
NUM_ADDITIONAL_NODES="${NUM_ADDITIONAL_NODES:-}"
|
||||||
|
ADDITIONAL_MACHINE_TYPE="${ADDITIONAL_MACHINE_TYPE:-}"
|
||||||
|
|
||||||
MASTER_NODE_LABELS="${KUBE_MASTER_NODE_LABELS:-}"
|
MASTER_NODE_LABELS="${KUBE_MASTER_NODE_LABELS:-}"
|
||||||
# NON_MASTER_NODE_LABELS are labels will only be applied on non-master nodes.
|
# NON_MASTER_NODE_LABELS are labels will only be applied on non-master nodes.
|
||||||
NON_MASTER_NODE_LABELS="${KUBE_NON_MASTER_NODE_LABELS:-}"
|
NON_MASTER_NODE_LABELS="${KUBE_NON_MASTER_NODE_LABELS:-}"
|
||||||
|
@ -192,6 +192,13 @@ ENABLE_METADATA_AGENT="${KUBE_ENABLE_METADATA_AGENT:-none}"
|
|||||||
# Useful for scheduling heapster in large clusters with nodes of small size.
|
# Useful for scheduling heapster in large clusters with nodes of small size.
|
||||||
HEAPSTER_MACHINE_TYPE="${HEAPSTER_MACHINE_TYPE:-}"
|
HEAPSTER_MACHINE_TYPE="${HEAPSTER_MACHINE_TYPE:-}"
|
||||||
|
|
||||||
|
# Optional: Additional nodes would be created if their type and number is specified.
|
||||||
|
# NUM_NODES would be lowered respectively.
|
||||||
|
# Useful for running cluster-level addons that needs more resources than would fit
|
||||||
|
# on small nodes, like network plugins.
|
||||||
|
NUM_ADDITIONAL_NODES="${NUM_ADDITIONAL_NODES:-}"
|
||||||
|
ADDITIONAL_MACHINE_TYPE="${ADDITIONAL_MACHINE_TYPE:-}"
|
||||||
|
|
||||||
# Set etcd image (e.g. k8s.gcr.io/etcd) and version (e.g. 3.3.15-0) if you need
|
# Set etcd image (e.g. k8s.gcr.io/etcd) and version (e.g. 3.3.15-0) if you need
|
||||||
# non-default version.
|
# non-default version.
|
||||||
ETCD_IMAGE="${TEST_ETCD_IMAGE:-}"
|
ETCD_IMAGE="${TEST_ETCD_IMAGE:-}"
|
||||||
|
@ -39,7 +39,9 @@ function get-node-instance-metadata-from-file {
|
|||||||
# $1: template name (required).
|
# $1: template name (required).
|
||||||
function create-linux-node-instance-template {
|
function create-linux-node-instance-template {
|
||||||
local template_name="$1"
|
local template_name="$1"
|
||||||
|
local machine_type="${2:-$NODE_SIZE}"
|
||||||
|
|
||||||
ensure-gci-metadata-files
|
ensure-gci-metadata-files
|
||||||
# shellcheck disable=2154 # 'scope_flags' is assigned by upstream
|
# shellcheck disable=2154 # 'scope_flags' is assigned by upstream
|
||||||
create-node-template "${template_name}" "${scope_flags[*]}" "$(get-node-instance-metadata-from-file)" "" "linux"
|
create-node-template "${template_name}" "${scope_flags[*]}" "$(get-node-instance-metadata-from-file)" "" "linux" "${machine_type}"
|
||||||
}
|
}
|
||||||
|
@ -2130,6 +2130,7 @@ function create-node-template() {
|
|||||||
local template_name="$1"
|
local template_name="$1"
|
||||||
local metadata_values="$4"
|
local metadata_values="$4"
|
||||||
local os="$5"
|
local os="$5"
|
||||||
|
local machine_type="$6"
|
||||||
|
|
||||||
# First, ensure the template doesn't exist.
|
# First, ensure the template doesn't exist.
|
||||||
# TODO(zmerlynn): To make this really robust, we need to parse the output and
|
# TODO(zmerlynn): To make this really robust, we need to parse the output and
|
||||||
@ -2216,7 +2217,7 @@ function create-node-template() {
|
|||||||
if ! ${gcloud} compute instance-templates create \
|
if ! ${gcloud} compute instance-templates create \
|
||||||
"${template_name}" \
|
"${template_name}" \
|
||||||
--project "${PROJECT}" \
|
--project "${PROJECT}" \
|
||||||
--machine-type "${NODE_SIZE}" \
|
--machine-type "${machine_type}" \
|
||||||
--boot-disk-type "${NODE_DISK_TYPE}" \
|
--boot-disk-type "${NODE_DISK_TYPE}" \
|
||||||
--boot-disk-size "${NODE_DISK_SIZE}" \
|
--boot-disk-size "${NODE_DISK_SIZE}" \
|
||||||
${node_image_flags} \
|
${node_image_flags} \
|
||||||
@ -3068,6 +3069,10 @@ function create-nodes-template() {
|
|||||||
local windows_template_name="${WINDOWS_NODE_INSTANCE_PREFIX}-template"
|
local windows_template_name="${WINDOWS_NODE_INSTANCE_PREFIX}-template"
|
||||||
create-linux-node-instance-template $linux_template_name
|
create-linux-node-instance-template $linux_template_name
|
||||||
create-windows-node-instance-template $windows_template_name "${scope_flags[*]}"
|
create-windows-node-instance-template $windows_template_name "${scope_flags[*]}"
|
||||||
|
if [[ -n "${ADDITIONAL_MACHINE_TYPE:-}" ]]; then
|
||||||
|
local linux_extra_template_name="${NODE_INSTANCE_PREFIX}-extra-template"
|
||||||
|
create-linux-node-instance-template $linux_extra_template_name "${ADDITIONAL_MACHINE_TYPE}"
|
||||||
|
fi
|
||||||
}
|
}
|
||||||
|
|
||||||
# Assumes:
|
# Assumes:
|
||||||
@ -3096,13 +3101,38 @@ function set_num_migs() {
|
|||||||
# - ZONE
|
# - ZONE
|
||||||
function create-linux-nodes() {
|
function create-linux-nodes() {
|
||||||
local template_name="${NODE_INSTANCE_PREFIX}-template"
|
local template_name="${NODE_INSTANCE_PREFIX}-template"
|
||||||
|
local extra_template_name="${NODE_INSTANCE_PREFIX}-extra-template"
|
||||||
|
|
||||||
if [[ -z "${HEAPSTER_MACHINE_TYPE:-}" ]]; then
|
local nodes="${NUM_NODES}"
|
||||||
local -r nodes="${NUM_NODES}"
|
if [[ ! -z "${HEAPSTER_MACHINE_TYPE:-}" ]]; then
|
||||||
else
|
|
||||||
echo "Creating a special node for heapster with machine-type ${HEAPSTER_MACHINE_TYPE}"
|
echo "Creating a special node for heapster with machine-type ${HEAPSTER_MACHINE_TYPE}"
|
||||||
create-heapster-node
|
create-heapster-node
|
||||||
local -r nodes=$(( NUM_NODES - 1 ))
|
nodes=$(( nodes - 1 ))
|
||||||
|
fi
|
||||||
|
|
||||||
|
if [[ -n "${ADDITIONAL_MACHINE_TYPE:-}" && "${NUM_ADDITIONAL_NODES:-}" -gt 0 ]]; then
|
||||||
|
local num_additional="${NUM_ADDITIONAL_NODES}"
|
||||||
|
if [[ "${NUM_ADDITIONAL_NODES:-}" -gt "${nodes}" ]]; then
|
||||||
|
echo "Capping NUM_ADDITIONAL_NODES to ${nodes}"
|
||||||
|
num_additional="${nodes}"
|
||||||
|
fi
|
||||||
|
if [[ "${num_additional:-}" -gt 0 ]]; then
|
||||||
|
echo "Creating ${num_additional} special nodes with machine-type ${ADDITIONAL_MACHINE_TYPE}"
|
||||||
|
local extra_group_name="${NODE_INSTANCE_PREFIX}-extra"
|
||||||
|
gcloud compute instance-groups managed \
|
||||||
|
create "${extra_group_name}" \
|
||||||
|
--project "${PROJECT}" \
|
||||||
|
--zone "${ZONE}" \
|
||||||
|
--base-instance-name "${extra_group_name}" \
|
||||||
|
--size "${num_additional}" \
|
||||||
|
--template "${extra_template_name}" || true;
|
||||||
|
gcloud compute instance-groups managed wait-until-stable \
|
||||||
|
"${extra_group_name}" \
|
||||||
|
--zone "${ZONE}" \
|
||||||
|
--project "${PROJECT}" \
|
||||||
|
--timeout "${MIG_WAIT_UNTIL_STABLE_TIMEOUT}" || true
|
||||||
|
nodes=$(( nodes - $num_additional ))
|
||||||
|
fi
|
||||||
fi
|
fi
|
||||||
|
|
||||||
local instances_left=${nodes}
|
local instances_left=${nodes}
|
||||||
@ -3414,13 +3444,15 @@ function kube-down() {
|
|||||||
|
|
||||||
local all_instance_groups=(${INSTANCE_GROUPS[@]:-} ${WINDOWS_INSTANCE_GROUPS[@]:-})
|
local all_instance_groups=(${INSTANCE_GROUPS[@]:-} ${WINDOWS_INSTANCE_GROUPS[@]:-})
|
||||||
for group in ${all_instance_groups[@]:-}; do
|
for group in ${all_instance_groups[@]:-}; do
|
||||||
if gcloud compute instance-groups managed describe "${group}" --project "${PROJECT}" --zone "${ZONE}" &>/dev/null; then
|
{
|
||||||
gcloud compute instance-groups managed delete \
|
if gcloud compute instance-groups managed describe "${group}" --project "${PROJECT}" --zone "${ZONE}" &>/dev/null; then
|
||||||
--project "${PROJECT}" \
|
gcloud compute instance-groups managed delete \
|
||||||
--quiet \
|
--project "${PROJECT}" \
|
||||||
--zone "${ZONE}" \
|
--quiet \
|
||||||
"${group}" &
|
--zone "${ZONE}" \
|
||||||
fi
|
"${group}"
|
||||||
|
fi
|
||||||
|
} &
|
||||||
done
|
done
|
||||||
|
|
||||||
# Wait for last batch of jobs
|
# Wait for last batch of jobs
|
||||||
@ -3429,14 +3461,21 @@ function kube-down() {
|
|||||||
}
|
}
|
||||||
|
|
||||||
for template in ${templates[@]:-}; do
|
for template in ${templates[@]:-}; do
|
||||||
if gcloud compute instance-templates describe --project "${PROJECT}" "${template}" &>/dev/null; then
|
{
|
||||||
gcloud compute instance-templates delete \
|
if gcloud compute instance-templates describe --project "${PROJECT}" "${template}" &>/dev/null; then
|
||||||
--project "${PROJECT}" \
|
gcloud compute instance-templates delete \
|
||||||
--quiet \
|
--project "${PROJECT}" \
|
||||||
"${template}"
|
--quiet \
|
||||||
fi
|
"${template}"
|
||||||
|
fi
|
||||||
|
} &
|
||||||
done
|
done
|
||||||
|
|
||||||
|
# Wait for last batch of jobs
|
||||||
|
kube::util::wait-for-jobs || {
|
||||||
|
echo -e "Failed to delete instance template(s)." >&2
|
||||||
|
}
|
||||||
|
|
||||||
# Delete the special heapster node (if it exists).
|
# Delete the special heapster node (if it exists).
|
||||||
if [[ -n "${HEAPSTER_MACHINE_TYPE:-}" ]]; then
|
if [[ -n "${HEAPSTER_MACHINE_TYPE:-}" ]]; then
|
||||||
local -r heapster_machine_name="${NODE_INSTANCE_PREFIX}-heapster"
|
local -r heapster_machine_name="${NODE_INSTANCE_PREFIX}-heapster"
|
||||||
@ -3717,7 +3756,7 @@ function set-replica-name() {
|
|||||||
#
|
#
|
||||||
# $1: project
|
# $1: project
|
||||||
function get-template() {
|
function get-template() {
|
||||||
local linux_filter="${NODE_INSTANCE_PREFIX}-template(-(${KUBE_RELEASE_VERSION_DASHED_REGEX}|${KUBE_CI_VERSION_DASHED_REGEX}))?"
|
local linux_filter="${NODE_INSTANCE_PREFIX}-(extra-)?template(-(${KUBE_RELEASE_VERSION_DASHED_REGEX}|${KUBE_CI_VERSION_DASHED_REGEX}))?"
|
||||||
local windows_filter="${WINDOWS_NODE_INSTANCE_PREFIX}-template(-(${KUBE_RELEASE_VERSION_DASHED_REGEX}|${KUBE_CI_VERSION_DASHED_REGEX}))?"
|
local windows_filter="${WINDOWS_NODE_INSTANCE_PREFIX}-template(-(${KUBE_RELEASE_VERSION_DASHED_REGEX}|${KUBE_CI_VERSION_DASHED_REGEX}))?"
|
||||||
|
|
||||||
gcloud compute instance-templates list \
|
gcloud compute instance-templates list \
|
||||||
|
@ -54,5 +54,5 @@ function get-windows-node-instance-metadata {
|
|||||||
function create-windows-node-instance-template {
|
function create-windows-node-instance-template {
|
||||||
local template_name="$1"
|
local template_name="$1"
|
||||||
local scopes_flag="$2"
|
local scopes_flag="$2"
|
||||||
create-node-template "${template_name}" "${scopes_flag}" "$(get-windows-node-instance-metadata-from-file)" "$(get-windows-node-instance-metadata)" "windows"
|
create-node-template "${template_name}" "${scopes_flag}" "$(get-windows-node-instance-metadata-from-file)" "$(get-windows-node-instance-metadata)" "windows" "${NODE_SIZE}"
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user