diff --git a/build/common.sh b/build/common.sh index 242848e8ab5..b9c80fef0ac 100755 --- a/build/common.sh +++ b/build/common.sh @@ -26,7 +26,7 @@ DOCKER_OPTS=${DOCKER_OPTS:-""} DOCKER=(docker ${DOCKER_OPTS}) DOCKER_HOST=${DOCKER_HOST:-""} DOCKER_MACHINE_NAME=${DOCKER_MACHINE_NAME:-"kube-dev"} -readonly DOCKER_MACHINE_DRIVER=${DOCKER_MACHINE_DRIVER:-"virtualbox --virtualbox-memory 4096 --virtualbox-cpu-count -1"} +readonly DOCKER_MACHINE_DRIVER=${DOCKER_MACHINE_DRIVER:-"virtualbox --virtualbox-cpu-count -1"} # This will canonicalize the path KUBE_ROOT=$(cd $(dirname "${BASH_SOURCE}")/.. && pwd -P) @@ -219,16 +219,28 @@ function kube::build::docker_available_on_osx() { function kube::build::prepare_docker_machine() { kube::log::status "docker-machine was found." + + local available_memory_bytes=$(sysctl -n hw.memsize 2>/dev/null) + + local bytes_in_mb=1048576 + + # Give virtualbox 1/2 the system memory. Its necessary to divide by 2, instead + # of multiple by .5, because bash can only multiply by ints. + local memory_divisor=2 + + local virtualbox_memory_mb=$(( ${available_memory_bytes} / (${bytes_in_mb} * ${memory_divisor}) )) + docker-machine inspect "${DOCKER_MACHINE_NAME}" &> /dev/null || { kube::log::status "Creating a machine to build Kubernetes" docker-machine create --driver ${DOCKER_MACHINE_DRIVER} \ + --virtualbox-memory "${virtualbox_memory_mb}" \ --engine-env HTTP_PROXY="${KUBERNETES_HTTP_PROXY:-}" \ --engine-env HTTPS_PROXY="${KUBERNETES_HTTPS_PROXY:-}" \ --engine-env NO_PROXY="${KUBERNETES_NO_PROXY:-127.0.0.1}" \ "${DOCKER_MACHINE_NAME}" > /dev/null || { kube::log::error "Something went wrong creating a machine." kube::log::error "Try the following: " - kube::log::error "docker-machine create -d ${DOCKER_MACHINE_DRIVER} ${DOCKER_MACHINE_NAME}" + kube::log::error "docker-machine create -d ${DOCKER_MACHINE_DRIVER} --virtualbox-memory ${virtualbox_memory_mb} ${DOCKER_MACHINE_NAME}" return 1 } }