diff --git a/cluster/gce/coreos/configure-node.sh b/cluster/gce/coreos/configure-node.sh old mode 100644 new mode 100755 index d8cbf1c9e0e..d462e50ba14 --- a/cluster/gce/coreos/configure-node.sh +++ b/cluster/gce/coreos/configure-node.sh @@ -173,8 +173,8 @@ function configure-master-components() { configure-kube-apiserver configure-kube-scheduler configure-kube-controller-manager - configure-addon-manager configure-master-addons + configure-addon-manager } # TODO(yifan): Merge this with mount-master-pd() in configure-vm.sh @@ -301,9 +301,10 @@ function load-docker-images() { } -# TODO(yifan): Making this function more generic for other runtimes. function load-master-components-images() { echo "Loading docker images for master components" + export RKT_BIN=/opt/rkt/rkt + export DOCKER2ACI_BIN=/opt/docker2aci/docker2aci ${SALT_DIR}/install.sh ${KUBE_BIN_TAR} ${SALT_DIR}/salt/kube-master-addons/kube-master-addons.sh diff --git a/cluster/saltbase/salt/kube-master-addons/kube-master-addons.sh b/cluster/saltbase/salt/kube-master-addons/kube-master-addons.sh index 4041e8f21f7..a91ecb77dbd 100755 --- a/cluster/saltbase/salt/kube-master-addons/kube-master-addons.sh +++ b/cluster/saltbase/salt/kube-master-addons/kube-master-addons.sh @@ -15,52 +15,76 @@ # limitations under the License. # loadedImageFlags is a bit-flag to track which docker images loaded successfully. -let loadedImageFlags=0 -while true; do - restart_docker=false - - if which docker 1>/dev/null 2>&1; then - - timeout 30 docker load -i /srv/salt/kube-bins/kube-apiserver.tar 1>/dev/null 2>&1 - rc=$? - if [[ $rc == 0 ]]; then - let loadedImageFlags="$loadedImageFlags|1" - elif [[ $rc == 124 ]]; then - restart_docker=true +function load-docker-images() { + let loadedImageFlags=0 + + while true; do + restart_docker=false + + if which docker 1>/dev/null 2>&1; then + + timeout 30 docker load -i /srv/salt/kube-bins/kube-apiserver.tar 1>/dev/null 2>&1 + rc=$? + if [[ $rc == 0 ]]; then + let loadedImageFlags="$loadedImageFlags|1" + elif [[ $rc == 124 ]]; then + restart_docker=true + fi + + timeout 30 docker load -i /srv/salt/kube-bins/kube-scheduler.tar 1>/dev/null 2>&1 + rc=$? + if [[ $rc == 0 ]]; then + let loadedImageFlags="$loadedImageFlags|2" + elif [[ $rc == 124 ]]; then + restart_docker=true + fi + + timeout 30 docker load -i /srv/salt/kube-bins/kube-controller-manager.tar 1>/dev/null 2>&1 + rc=$? + if [[ $rc == 0 ]]; then + let loadedImageFlags="$loadedImageFlags|4" + elif [[ $rc == 124 ]]; then + restart_docker=true + fi fi - - timeout 30 docker load -i /srv/salt/kube-bins/kube-scheduler.tar 1>/dev/null 2>&1 - rc=$? - if [[ $rc == 0 ]]; then - let loadedImageFlags="$loadedImageFlags|2" - elif [[ $rc == 124 ]]; then - restart_docker=true + + # required docker images got installed. exit while loop. + if [[ $loadedImageFlags == 7 ]]; then break; fi + + # Sometimes docker load hang, restart docker daemon resolve the issue + if [[ $restart_docker ]]; then + if ! service docker restart; then # Try systemctl if there's no service command. + systemctl restart docker + fi fi + + # sleep for 15 seconds before attempting to load docker images again + sleep 15 + + done +} - timeout 30 docker load -i /srv/salt/kube-bins/kube-controller-manager.tar 1>/dev/null 2>&1 - rc=$? - if [[ $rc == 0 ]]; then - let loadedImageFlags="$loadedImageFlags|4" - elif [[ $rc == 124 ]]; then - restart_docker=true - fi - fi +function convert-rkt-image() { + (cd /tmp; ${DOCKER2ACI_BIN} $1) +} - # required docker images got installed. exit while loop. - if [[ $loadedImageFlags == 7 ]]; then break; fi +function load-rkt-images() { + convert-rkt-image /srv/salt/kube-bins/kube-apiserver.tar + convert-rkt-image /srv/salt/kube-bins/kube-scheduler.tar + convert-rkt-image /srv/salt/kube-bins/kube-controller-manager.tar - # Sometimes docker load hang, restart docker daemon resolve the issue - if [[ $restart_docker ]]; then - if ! service docker restart; then # Try systemctl if there's no service command. - systemctl restart docker - fi - fi + # Currently, we can't run docker image tarballs directly, + # So we use 'rkt fetch' to load the docker images into rkt image stores. + # see https://github.com/coreos/rkt/issues/2392. + ${RKT_BIN} fetch /tmp/*.aci --insecure-options=image +} - # sleep for 15 seconds before attempting to load docker images again - sleep 15 - -done +if [[ "${KUBERNETES_CONTAINER_RUNTIME}" == "rkt" ]]; then + load-rkt-images +else + load-docker-images +fi # Now exit. After kube-push, salt will notice that the service is down and it # will start it and new docker images will be loaded.