Skip to content

Commit bf12b51

Browse files
author
Kubernetes Submit Queue
authored
Merge pull request kubernetes#57394 from mborsz/retry
Automatic merge from submit-queue. If you want to cherry-pick this change to another branch, please follow the instructions <a href="https://github.com/kubernetes/community/blob/master/contributors/devel/cherry-picks.md">here</a>. Add --retry-connrefused to all curl invocations if available. By default 'Connection refused' error is not a transient error and is not retried. **What this PR does / why we need it**: **Which issue(s) this PR fixes** *(optional, in `fixes #<issue number>(, fixes #<issue_number>, ...)` format, will close the issue(s) when PR gets merged)*: Fixes # **Special notes for your reviewer**: **Release note**: ```release-note Retry 'connection refused' errors when setting up clusters on GCE. ```
2 parents 1fdb164 + 95dccb4 commit bf12b51

File tree

8 files changed

+41
-13
lines changed

8 files changed

+41
-13
lines changed

Diff for: cluster/gce/container-linux/configure-helper.sh

+9-3
Original file line numberDiff line numberDiff line change
@@ -25,6 +25,12 @@ set -o errexit
2525
set -o nounset
2626
set -o pipefail
2727

28+
# Use --retry-connrefused opt only if it's supported by curl.
29+
CURL_RETRY_CONNREFUSED=""
30+
if curl --help | grep -q -- '--retry-connrefused'; then
31+
CURL_RETRY_CONNREFUSED='--retry-connrefused'
32+
fi
33+
2834
function create-dirs {
2935
echo "Creating required directories"
3036
mkdir -p /var/lib/kubelet
@@ -975,7 +981,7 @@ function start-kube-apiserver {
975981
params+=" --feature-gates=${FEATURE_GATES}"
976982
fi
977983
if [[ -n "${PROJECT_ID:-}" && -n "${TOKEN_URL:-}" && -n "${TOKEN_BODY:-}" && -n "${NODE_NETWORK:-}" ]]; then
978-
local -r vm_external_ip=$(curl --retry 5 --retry-delay 3 --fail --silent -H 'Metadata-Flavor: Google' "http://metadata/computeMetadata/v1/instance/network-interfaces/0/access-configs/0/external-ip")
984+
local -r vm_external_ip=$(curl --retry 5 --retry-delay 3 ${CURL_RETRY_CONNREFUSED} --fail --silent -H 'Metadata-Flavor: Google' "http://metadata/computeMetadata/v1/instance/network-interfaces/0/access-configs/0/external-ip")
979985
if [[ -n "${PROXY_SSH_USER:-}" ]]; then
980986
params+=" --advertise-address=${vm_external_ip}"
981987
params+=" --ssh-user=${PROXY_SSH_USER}"
@@ -1469,7 +1475,7 @@ function setup-rkt {
14691475
mkdir -p /etc/rkt "${KUBE_HOME}/download/"
14701476
local rkt_tar="${KUBE_HOME}/download/rkt.tar.gz"
14711477
local rkt_tmpdir=$(mktemp -d "${KUBE_HOME}/rkt_download.XXXXX")
1472-
curl --retry 5 --retry-delay 3 --fail --silent --show-error \
1478+
curl --retry 5 --retry-delay 3 ${CURL_RETRY_CONNREFUSED} --fail --silent --show-error \
14731479
--location --create-dirs --output "${rkt_tar}" \
14741480
https://github.com/coreos/rkt/releases/download/v${RKT_VERSION}/rkt-v${RKT_VERSION}.tar.gz
14751481
tar --strip-components=1 -xf "${rkt_tar}" -C "${rkt_tmpdir}" --overwrite
@@ -1508,7 +1514,7 @@ function install-docker2aci {
15081514
local tar_path="${KUBE_HOME}/download/docker2aci.tar.gz"
15091515
local tmp_path="${KUBE_HOME}/docker2aci"
15101516
mkdir -p "${KUBE_HOME}/download/" "${tmp_path}"
1511-
curl --retry 5 --retry-delay 3 --fail --silent --show-error \
1517+
curl --retry 5 --retry-delay 3 ${CURL_RETRY_CONNREFUSED} --fail --silent --show-error \
15121518
--location --create-dirs --output "${tar_path}" \
15131519
https://github.com/appc/docker2aci/releases/download/v0.14.0/docker2aci-v0.14.0.tar.gz
15141520
tar --strip-components=1 -xf "${tar_path}" -C "${tmp_path}" --overwrite

Diff for: cluster/gce/container-linux/configure.sh

+8-2
Original file line numberDiff line numberDiff line change
@@ -18,10 +18,16 @@ set -o errexit
1818
set -o nounset
1919
set -o pipefail
2020

21+
# Use --retry-connrefused opt only if it's supported by curl.
22+
CURL_RETRY_CONNREFUSED=""
23+
if curl --help | grep -q -- '--retry-connrefused'; then
24+
CURL_RETRY_CONNREFUSED='--retry-connrefused'
25+
fi
26+
2127
function download-kube-env {
2228
# Fetch kube-env from GCE metadata server.
2329
local -r tmp_kube_env="/tmp/kube-env.yaml"
24-
curl --fail --retry 5 --retry-delay 3 --silent --show-error \
30+
curl --fail --retry 5 --retry-delay 3 ${CURL_RETRY_CONNREFUSED} --silent --show-error \
2531
-H "X-Google-Metadata-Request: True" \
2632
-o "${tmp_kube_env}" \
2733
http://metadata.google.internal/computeMetadata/v1/instance/attributes/kube-env
@@ -55,7 +61,7 @@ function download-or-bust {
5561
for url in "${urls[@]}"; do
5662
local file="${url##*/}"
5763
rm -f "${file}"
58-
if ! curl -f --ipv4 -Lo "${file}" --connect-timeout 20 --max-time 300 --retry 6 --retry-delay 10 "${url}"; then
64+
if ! curl -f --ipv4 -Lo "${file}" --connect-timeout 20 --max-time 300 --retry 6 --retry-delay 10 ${CURL_RETRY_CONNREFUSED} "${url}"; then
5965
echo "== Failed to download ${url}. Retrying. =="
6066
elif [[ -n "${hash}" ]] && ! validate-hash "${file}" "${hash}"; then
6167
echo "== Hash validation of ${url} failed. Retrying. =="

Diff for: cluster/gce/container-linux/master.yaml

+2-1
Original file line numberDiff line numberDiff line change
@@ -17,7 +17,8 @@ coreos:
1717
Type=oneshot
1818
RemainAfterExit=yes
1919
ExecStartPre=/bin/mkdir -p /opt/kubernetes/bin
20-
ExecStartPre=/usr/bin/curl --fail --retry 5 --retry-delay 3 --silent --show-error -H "X-Google-Metadata-Request: True" -o /opt/kubernetes/bin/configure.sh http://metadata.google.internal/computeMetadata/v1/instance/attributes/configure-sh
20+
# Use --retry-connrefused opt only if it's supported by curl.
21+
ExecStartPre=/bin/bash -c 'OPT=""; if curl --help | grep -q -- "--retry-connrefused"; then OPT="--retry-connrefused"; fi; /usr/bin/curl --fail --retry 5 --retry-delay 3 $OPT --silent --show-error -H "X-Google-Metadata-Request: True" -o /opt/kubernetes/bin/configure.sh http://metadata.google.internal/computeMetadata/v1/instance/attributes/configure-sh'
2122
ExecStartPre=/bin/chmod 544 /opt/kubernetes/bin/configure.sh
2223
ExecStart=/opt/kubernetes/bin/configure.sh
2324

Diff for: cluster/gce/container-linux/node.yaml

+2-1
Original file line numberDiff line numberDiff line change
@@ -17,7 +17,8 @@ coreos:
1717
Type=oneshot
1818
RemainAfterExit=yes
1919
ExecStartPre=/bin/mkdir -p /opt/kubernetes/bin
20-
ExecStartPre=/usr/bin/curl --fail --retry 5 --retry-delay 3 --silent --show-error -H "X-Google-Metadata-Request: True" -o /opt/kubernetes/bin/configure.sh http://metadata.google.internal/computeMetadata/v1/instance/attributes/configure-sh
20+
# Use --retry-connrefused opt only if it's supported by curl.
21+
ExecStartPre=/bin/bash -c 'OPT=""; if curl --help | grep -q -- "--retry-connrefused"; then OPT="--retry-connrefused"; fi; /usr/bin/curl --fail --retry 5 --retry-delay 3 $OPT --silent --show-error -H "X-Google-Metadata-Request: True" -o /opt/kubernetes/bin/configure.sh http://metadata.google.internal/computeMetadata/v1/instance/attributes/configure-sh'
2122
ExecStartPre=/bin/chmod 544 /opt/kubernetes/bin/configure.sh
2223
ExecStart=/opt/kubernetes/bin/configure.sh
2324

Diff for: cluster/gce/gci/configure-helper.sh

+7-1
Original file line numberDiff line numberDiff line change
@@ -28,6 +28,12 @@ set -o pipefail
2828
readonly UUID_MNT_PREFIX="/mnt/disks/by-uuid/google-local-ssds"
2929
readonly UUID_BLOCK_PREFIX="/dev/disk/by-uuid/google-local-ssds"
3030

31+
# Use --retry-connrefused opt only if it's supported by curl.
32+
CURL_RETRY_CONNREFUSED=""
33+
if curl --help | grep -q -- '--retry-connrefused'; then
34+
CURL_RETRY_CONNREFUSED='--retry-connrefused'
35+
fi
36+
3137
function setup-os-params {
3238
# Reset core_pattern. On GCI, the default core_pattern pipes the core dumps to
3339
# /sbin/crash_reporter which is more restrictive in saving crash dumps. So for
@@ -1655,7 +1661,7 @@ function start-kube-apiserver {
16551661
params+=" --feature-gates=${FEATURE_GATES}"
16561662
fi
16571663
if [[ -n "${PROJECT_ID:-}" && -n "${TOKEN_URL:-}" && -n "${TOKEN_BODY:-}" && -n "${NODE_NETWORK:-}" ]]; then
1658-
local -r vm_external_ip=$(curl --retry 5 --retry-delay 3 --fail --silent -H 'Metadata-Flavor: Google' "http://metadata/computeMetadata/v1/instance/network-interfaces/0/access-configs/0/external-ip")
1664+
local -r vm_external_ip=$(curl --retry 5 --retry-delay 3 ${CURL_RETRY_CONNREFUSED} --fail --silent -H 'Metadata-Flavor: Google' "http://metadata/computeMetadata/v1/instance/network-interfaces/0/access-configs/0/external-ip")
16591665
if [[ -n "${PROXY_SSH_USER:-}" ]]; then
16601666
params+=" --advertise-address=${vm_external_ip}"
16611667
params+=" --ssh-user=${PROXY_SSH_USER}"

Diff for: cluster/gce/gci/configure.sh

+9-3
Original file line numberDiff line numberDiff line change
@@ -31,6 +31,12 @@ DEFAULT_NPD_SHA1="a57a3fe64cab8a18ec654f5cef0aec59dae62568"
3131
DEFAULT_MOUNTER_TAR_SHA="8003b798cf33c7f91320cd6ee5cec4fa22244571"
3232
###
3333

34+
# Use --retry-connrefused opt only if it's supported by curl.
35+
CURL_RETRY_CONNREFUSED=""
36+
if curl --help | grep -q -- '--retry-connrefused'; then
37+
CURL_RETRY_CONNREFUSED='--retry-connrefused'
38+
fi
39+
3440
function set-broken-motd {
3541
cat > /etc/motd <<EOF
3642
Broken (or in progress) Kubernetes node setup! Check the cluster initialization status
@@ -50,7 +56,7 @@ function download-kube-env {
5056
# Fetch kube-env from GCE metadata server.
5157
(umask 700;
5258
local -r tmp_kube_env="/tmp/kube-env.yaml"
53-
curl --fail --retry 5 --retry-delay 3 --silent --show-error \
59+
curl --fail --retry 5 --retry-delay 3 ${CURL_RETRY_CONNREFUSED} --silent --show-error \
5460
-H "X-Google-Metadata-Request: True" \
5561
-o "${tmp_kube_env}" \
5662
http://metadata.google.internal/computeMetadata/v1/instance/attributes/kube-env
@@ -68,7 +74,7 @@ function download-kube-master-certs {
6874
# Fetch kube-env from GCE metadata server.
6975
(umask 700;
7076
local -r tmp_kube_master_certs="/tmp/kube-master-certs.yaml"
71-
curl --fail --retry 5 --retry-delay 3 --silent --show-error \
77+
curl --fail --retry 5 --retry-delay 3 ${CURL_RETRY_CONNREFUSED} --silent --show-error \
7278
-H "X-Google-Metadata-Request: True" \
7379
-o "${tmp_kube_master_certs}" \
7480
http://metadata.google.internal/computeMetadata/v1/instance/attributes/kube-master-certs
@@ -106,7 +112,7 @@ function download-or-bust {
106112
for url in "${urls[@]}"; do
107113
local file="${url##*/}"
108114
rm -f "${file}"
109-
if ! curl -f --ipv4 -Lo "${file}" --connect-timeout 20 --max-time 300 --retry 6 --retry-delay 10 "${url}"; then
115+
if ! curl -f --ipv4 -Lo "${file}" --connect-timeout 20 --max-time 300 --retry 6 --retry-delay 10 ${CURL_RETRY_CONNREFUSED} "${url}"; then
110116
echo "== Failed to download ${url}. Retrying. =="
111117
elif [[ -n "${hash}" ]] && ! validate-hash "${file}" "${hash}"; then
112118
echo "== Hash validation of ${url} failed. Retrying. =="

Diff for: cluster/gce/gci/master.yaml

+2-1
Original file line numberDiff line numberDiff line change
@@ -15,7 +15,8 @@ write_files:
1515
ExecStartPre=/bin/mkdir -p /home/kubernetes/bin
1616
ExecStartPre=/bin/mount --bind /home/kubernetes/bin /home/kubernetes/bin
1717
ExecStartPre=/bin/mount -o remount,exec /home/kubernetes/bin
18-
ExecStartPre=/usr/bin/curl --fail --retry 5 --retry-delay 3 --silent --show-error -H "X-Google-Metadata-Request: True" -o /home/kubernetes/bin/configure.sh http://metadata.google.internal/computeMetadata/v1/instance/attributes/configure-sh
18+
# Use --retry-connrefused opt only if it's supported by curl.
19+
ExecStartPre=/bin/bash -c 'OPT=""; if curl --help | grep -q -- "--retry-connrefused"; then OPT="--retry-connrefused"; fi; /usr/bin/curl --fail --retry 5 --retry-delay 3 $OPT --silent --show-error -H "X-Google-Metadata-Request: True" -o /home/kubernetes/bin/configure.sh http://metadata.google.internal/computeMetadata/v1/instance/attributes/configure-sh'
1920
ExecStartPre=/bin/chmod 544 /home/kubernetes/bin/configure.sh
2021
ExecStart=/home/kubernetes/bin/configure.sh
2122

Diff for: cluster/gce/gci/node.yaml

+2-1
Original file line numberDiff line numberDiff line change
@@ -15,7 +15,8 @@ write_files:
1515
ExecStartPre=/bin/mkdir -p /home/kubernetes/bin
1616
ExecStartPre=/bin/mount --bind /home/kubernetes/bin /home/kubernetes/bin
1717
ExecStartPre=/bin/mount -o remount,exec /home/kubernetes/bin
18-
ExecStartPre=/usr/bin/curl --fail --retry 5 --retry-delay 3 --silent --show-error -H "X-Google-Metadata-Request: True" -o /home/kubernetes/bin/configure.sh http://metadata.google.internal/computeMetadata/v1/instance/attributes/configure-sh
18+
# Use --retry-connrefused opt only if it's supported by curl.
19+
ExecStartPre=/bin/bash -c 'OPT=""; if curl --help | grep -q -- "--retry-connrefused"; then OPT="--retry-connrefused"; fi; /usr/bin/curl --fail --retry 5 --retry-delay 3 $OPT --silent --show-error -H "X-Google-Metadata-Request: True" -o /home/kubernetes/bin/configure.sh http://metadata.google.internal/computeMetadata/v1/instance/attributes/configure-sh'
1920
ExecStartPre=/bin/chmod 544 /home/kubernetes/bin/configure.sh
2021
ExecStart=/home/kubernetes/bin/configure.sh
2122

0 commit comments

Comments
 (0)