diff --git a/parts/k8s/kubernetesagentcustomdata.yml b/parts/k8s/kubernetesagentcustomdata.yml index 8c018a7343..481f0401ce 100644 --- a/parts/k8s/kubernetesagentcustomdata.yml +++ b/parts/k8s/kubernetesagentcustomdata.yml @@ -168,21 +168,20 @@ runcmd: - echo `date`,`hostname`, startruncmd>>/opt/m - apt-mark hold walinuxagent{{GetKubernetesAgentPreprovisionYaml .}} - echo `date`,`hostname`, preaptupdate>>/opt/m -- apt-get update +- for i in 1 2 3 4 5; do apt-get update && break; sleep 5; done - echo `date`,`hostname`, postaptupdate>>/opt/m -- apt-get install -y apt-transport-https ca-certificates nfs-common +- for i in 1 2 3 4 5; do apt-get install -y apt-transport-https ca-certificates nfs-common && break; sleep 5; done - echo `date`,`hostname`, aptinstall>>/opt/m - systemctl enable rpcbind - systemctl enable rpc-statd - systemctl start rpcbind - systemctl start rpc-statd - echo `date`,`hostname`, predockerinstall>>/opt/m -- for i in 1 2 3 4 5; do curl --max-time 60 -fsSL https://aptdocker.azureedge.net/gpg | apt-key add -; [ $? -eq 0 ] && break || sleep 5; done +- for i in 1 2 3 4 5; do curl --retry 5 --retry-delay 10 --retry-max-time 30 --retry-connrefused --max-time 60 -fsSL https://aptdocker.azureedge.net/gpg | apt-key add -; [ $? -eq 0 ] && break || sleep 5; done - echo "deb {{WrapAsVariable "dockerEngineDownloadRepo"}} ubuntu-xenial main" | sudo tee /etc/apt/sources.list.d/docker.list - "echo \"Package: docker-engine\nPin: version {{WrapAsVariable "dockerEngineVersion"}}\nPin-Priority: 550\n\" > /etc/apt/preferences.d/docker.pref" -- apt-get update -- apt-get install -y ebtables -- apt-get install -y docker-engine +- for i in 1 2 3 4 5; do apt-get update && break; sleep 5; done +- for i in 1 2 3 4 5; do apt-get install -y ebtables docker-engine && break; sleep 5; done - echo "ExecStartPost=/sbin/iptables -P FORWARD ACCEPT" >> /etc/systemd/system/docker.service.d/exec_start.conf - systemctl daemon-reload - echo `date`,`hostname`, postdockerinstall>>/opt/m @@ -196,4 +195,4 @@ runcmd: - apt-mark unhold walinuxagent - mkdir -p /opt/azure/containers && touch /opt/azure/containers/runcmd.complete - echo `date`,`hostname`, endruncmd>>/opt/m -{{end}} \ No newline at end of file +{{end}} diff --git a/parts/k8s/kubernetesmastercustomdata.yml b/parts/k8s/kubernetesmastercustomdata.yml index 29ceeb89fe..bcae0dce86 100644 --- a/parts/k8s/kubernetesmastercustomdata.yml +++ b/parts/k8s/kubernetesmastercustomdata.yml @@ -295,7 +295,9 @@ MASTER_ARTIFACTS_CONFIG_PLACEHOLDER ETCD_VER=v{{WrapAsVariable "etcdVersion"}} DOWNLOAD_URL={{WrapAsVariable "etcdDownloadURLBase"}} mkdir -p /tmp/etcd-download - curl -L ${DOWNLOAD_URL}/etcd-${ETCD_VER}-linux-amd64.tar.gz -o /tmp/etcd-${ETCD_VER}-linux-amd64.tar.gz + for x in 1 2 3 4 5; do + curl --retry 5 --retry-delay 10 --retry-max-time 30 --retry-connrefused -L ${DOWNLOAD_URL}/etcd-${ETCD_VER}-linux-amd64.tar.gz -o /tmp/etcd-${ETCD_VER}-linux-amd64.tar.gz + done tar xzvf /tmp/etcd-${ETCD_VER}-linux-amd64.tar.gz -C /usr/bin/ --strip-components=1 useradd -U "etcd" usermod -p "$(head -c 32 /dev/urandom | base64)" "etcd" @@ -328,7 +330,7 @@ MASTER_ARTIFACTS_CONFIG_PLACEHOLDER sudo /bin/sed -i s/Restart=on-failure/Restart=always/g /lib/systemd/system/etcd-member.service systemctl daemon-reload systemctl restart etcd-member - for i in $(seq 1 20); do curl --max-time 60 http://127.0.0.1:2379/v2/machines; [ $? -eq 0 ] && break || sleep 5; done + for i in $(seq 1 20); do curl --retry 5 --retry-delay 10 --retry-max-time 30 --retry-connrefused --max-time 60 http://127.0.0.1:2379/v2/machines; [ $? -eq 0 ] && break || sleep 5; done mkdir -p /etc/kubernetes/manifests usermod -aG docker {{WrapAsVariable "username"}} @@ -365,10 +367,10 @@ runcmd: - systemctl restart etcd - MEMBER="$(sudo etcdctl member list | grep -E {{WrapAsVerbatim "variables('masterVMNames')[copyIndex(variables('masterOffset'))]"}} | cut -d{{WrapAsVariable "singleQuote"}}:{{WrapAsVariable "singleQuote"}} -f 1)" - sudo etcdctl member update ${MEMBER} {{WrapAsVerbatim "variables('masterEtcdPeerURLs')[copyIndex(variables('masterOffset'))]"}} -- for i in $(seq 1 20); do curl --cacert /etc/kubernetes/certs/ca.crt --cert /etc/kubernetes/certs/etcdclient.crt --key /etc/kubernetes/certs/etcdclient.key --max-time 60 "{{WrapAsVerbatim "variables('masterEtcdClientURLs')[copyIndex(variables('masterOffset'))]"}}"/v2/machines; [ $? -eq 0 ] && break || sleep 5; done +- for i in $(seq 1 20); do curl --retry 5 --retry-delay 10 --retry-max-time 30 --retry-connrefused --cacert /etc/kubernetes/certs/ca.crt --cert /etc/kubernetes/certs/etcdclient.crt --key /etc/kubernetes/certs/etcdclient.key --max-time 60 "{{WrapAsVerbatim "variables('masterEtcdClientURLs')[copyIndex(variables('masterOffset'))]"}}"/v2/machines; [ $? -eq 0 ] && break || sleep 5; done - retrycmd_if_failure apt-get update - retrycmd_if_failure apt-get install -y apt-transport-https ca-certificates -- retrycmd_if_failure curl --max-time 60 -fsSL https://aptdocker.azureedge.net/gpg | apt-key add - +- retrycmd_if_failure curl --retry 5 --retry-delay 10 --retry-max-time 30 --retry-connrefused --max-time 60 -fsSL https://aptdocker.azureedge.net/gpg | apt-key add - - echo "deb {{WrapAsVariable "dockerEngineDownloadRepo"}} ubuntu-xenial main" | sudo tee /etc/apt/sources.list.d/docker.list - "echo \"Package: docker-engine\nPin: version {{WrapAsVariable "dockerEngineVersion"}}\nPin-Priority: 550\n\" > /etc/apt/preferences.d/docker.pref" - retrycmd_if_failure apt-get update diff --git a/parts/k8s/kubernetesmastercustomscript.sh b/parts/k8s/kubernetesmastercustomscript.sh index 71e29e78c5..ff1f874348 100644 --- a/parts/k8s/kubernetesmastercustomscript.sh +++ b/parts/k8s/kubernetesmastercustomscript.sh @@ -272,7 +272,7 @@ function configNetworkPolicy() { function installClearContainersRuntime() { # Add Clear Containers repository key echo "Adding Clear Containers repository key..." - curl -sSL "https://download.opensuse.org/repositories/home:clearcontainers:clear-containers-3/xUbuntu_16.04/Release.key" | apt-key add - + curl -sSL --retry 5 --retry-delay 10 --retry-max-time 30 --retry-connrefused "https://download.opensuse.org/repositories/home:clearcontainers:clear-containers-3/xUbuntu_16.04/Release.key" | apt-key add - # Add Clear Container repository echo "Adding Clear Containers repository..." @@ -321,13 +321,13 @@ function installGo() { fi # Get the latest Go version - GO_VERSION=$(curl -sSL "https://golang.org/VERSION?m=text") + GO_VERSION=$(curl -sSL --retry 5 --retry-delay 10 --retry-max-time 30 --retry-connrefused "https://golang.org/VERSION?m=text") echo "Installing Go version $GO_VERSION..." # subshell ( - curl -sSL "https://storage.googleapis.com/golang/${GO_VERSION}.linux-amd64.tar.gz" | sudo tar -v -C /usr/local -xz + curl -sSL --retry 5 --retry-delay 10 --retry-max-time 30 --retry-connrefused "https://storage.googleapis.com/golang/${GO_VERSION}.linux-amd64.tar.gz" | sudo tar -v -C /usr/local -xz ) # Set GOPATH and update PATH diff --git a/pkg/acsengine/engine.go b/pkg/acsengine/engine.go index 76a0650880..d4a603a4ea 100644 --- a/pkg/acsengine/engine.go +++ b/pkg/acsengine/engine.go @@ -1629,7 +1629,7 @@ func makeExtensionScriptCommands(extension *api.Extension, extensionProfiles []* extensionsParameterReference := fmt.Sprintf("parameters('%sParameters')", extensionProfile.Name) scriptURL := getExtensionURL(extensionProfile.RootURL, extensionProfile.Name, extensionProfile.Version, extensionProfile.Script, extensionProfile.URLQuery) scriptFilePath := fmt.Sprintf("/opt/azure/containers/extensions/%s/%s", extensionProfile.Name, extensionProfile.Script) - return fmt.Sprintf("- sudo /usr/bin/curl -o %s --create-dirs \"%s\" \n- sudo /bin/chmod 744 %s \n- sudo %s ',%s,' > /var/log/%s-output.log", + return fmt.Sprintf("- sudo /usr/bin/curl --retry --retry-connrefused --retry-delay 10 -o %s --create-dirs \"%s\" \n- sudo /bin/chmod 744 %s \n- sudo %s ',%s,' > /var/log/%s-output.log", scriptFilePath, scriptURL, scriptFilePath, scriptFilePath, extensionsParameterReference, extensionProfile.Name) }