cluster/saltbase: Enable rkt to load master components images.

This commit is contained in:
Yifan Gu 2016-06-10 16:44:32 -07:00
parent 16d69f9f37
commit d96c7edc34
2 changed files with 66 additions and 41 deletions

5
cluster/gce/coreos/configure-node.sh Normal file → Executable file
View File

@ -173,8 +173,8 @@ function configure-master-components() {
configure-kube-apiserver configure-kube-apiserver
configure-kube-scheduler configure-kube-scheduler
configure-kube-controller-manager configure-kube-controller-manager
configure-addon-manager
configure-master-addons configure-master-addons
configure-addon-manager
} }
# TODO(yifan): Merge this with mount-master-pd() in configure-vm.sh # 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() { function load-master-components-images() {
echo "Loading docker images for master components" 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}/install.sh ${KUBE_BIN_TAR}
${SALT_DIR}/salt/kube-master-addons/kube-master-addons.sh ${SALT_DIR}/salt/kube-master-addons/kube-master-addons.sh

View File

@ -15,52 +15,76 @@
# limitations under the License. # limitations under the License.
# loadedImageFlags is a bit-flag to track which docker images loaded successfully. # loadedImageFlags is a bit-flag to track which docker images loaded successfully.
let loadedImageFlags=0
while true; do function load-docker-images() {
restart_docker=false let loadedImageFlags=0
if which docker 1>/dev/null 2>&1; then while true; do
restart_docker=false
timeout 30 docker load -i /srv/salt/kube-bins/kube-apiserver.tar 1>/dev/null 2>&1
rc=$? if which docker 1>/dev/null 2>&1; then
if [[ $rc == 0 ]]; then
let loadedImageFlags="$loadedImageFlags|1" timeout 30 docker load -i /srv/salt/kube-bins/kube-apiserver.tar 1>/dev/null 2>&1
elif [[ $rc == 124 ]]; then rc=$?
restart_docker=true 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 fi
timeout 30 docker load -i /srv/salt/kube-bins/kube-scheduler.tar 1>/dev/null 2>&1 # required docker images got installed. exit while loop.
rc=$? if [[ $loadedImageFlags == 7 ]]; then break; fi
if [[ $rc == 0 ]]; then
let loadedImageFlags="$loadedImageFlags|2" # Sometimes docker load hang, restart docker daemon resolve the issue
elif [[ $rc == 124 ]]; then if [[ $restart_docker ]]; then
restart_docker=true if ! service docker restart; then # Try systemctl if there's no service command.
systemctl restart docker
fi
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 function convert-rkt-image() {
rc=$? (cd /tmp; ${DOCKER2ACI_BIN} $1)
if [[ $rc == 0 ]]; then }
let loadedImageFlags="$loadedImageFlags|4"
elif [[ $rc == 124 ]]; then
restart_docker=true
fi
fi
# required docker images got installed. exit while loop. function load-rkt-images() {
if [[ $loadedImageFlags == 7 ]]; then break; fi 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 # Currently, we can't run docker image tarballs directly,
if [[ $restart_docker ]]; then # So we use 'rkt fetch' to load the docker images into rkt image stores.
if ! service docker restart; then # Try systemctl if there's no service command. # see https://github.com/coreos/rkt/issues/2392.
systemctl restart docker ${RKT_BIN} fetch /tmp/*.aci --insecure-options=image
fi }
fi
# sleep for 15 seconds before attempting to load docker images again if [[ "${KUBERNETES_CONTAINER_RUNTIME}" == "rkt" ]]; then
sleep 15 load-rkt-images
else
done load-docker-images
fi
# Now exit. After kube-push, salt will notice that the service is down and it # 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. # will start it and new docker images will be loaded.