diff --git a/scripts/local-cluster.sh b/scripts/local-cluster.sh index 7b6ae340f936ed746987a06e16e2d7825a60003d..24a9ee250282d509a0489e27e9ee0f74902d5eb6 100755 --- a/scripts/local-cluster.sh +++ b/scripts/local-cluster.sh @@ -30,6 +30,18 @@ command_exists() { hash "${1}" 2>/dev/null } +# fetch url using wget or curl and print to stdout +fetch_url() { + local url="$1" + if command_exists wget; then + curl -sSL "$url" + elif command_exists curl; then + wget -qO- "$url" + else + error_exit "Couldn't find curl or wget. Bailing out." + fi +} + # Program Functions ------------------------------------------------------------ # Check host platform and docker host @@ -78,28 +90,30 @@ verify_prereqs() { command_exists docker || error_exit "You need docker" - if ! docker info > /dev/null 2>&1 ; then + if ! docker info >/dev/null 2>&1 ; then error_exit "Can't connect to 'docker' daemon." fi + if docker inspect kubelet >/dev/null 2>&1 ; then + error_exit "Kubernetes is already running" + fi + $KUBECTL version --client >/dev/null || download_kubectl } # Get the latest stable release tag get_latest_version_number() { - local -r latest_url="https://storage.googleapis.com/kubernetes-release/release/stable.txt" - if command_exists wget ; then - wget -qO- ${latest_url} - elif command_exists curl ; then - curl -Ss ${latest_url} - else - error_exit "Couldn't find curl or wget. Bailing out." + local channel="stable" + if [[ -n "${ALPHA:-}" ]]; then + channel="latest" fi + local latest_url="https://storage.googleapis.com/kubernetes-release/release/${channel}.txt" + fetch_url "$latest_url" } # Detect ip address od docker host detect_docker_host_ip() { - if [ -n "${DOCKER_HOST:-}" ]; then + if [[ -n "${DOCKER_HOST:-}" ]]; then awk -F'[/:]' '{print $4}' <<< "$DOCKER_HOST" else ifconfig docker0 \ @@ -151,27 +165,33 @@ start_kubernetes() { /hyperkube kubelet \ --containerized \ --hostname-override="127.0.0.1" \ - --api-servers=http://localhost:8080 \ + --api-servers=http://localhost:${KUBE_PORT} \ --config=/etc/kubernetes/manifests \ --allow-privileged=true \ ${dns_args} \ --v=${LOG_LEVEL} >/dev/null + until $KUBECTL cluster-info &> /dev/null; do + sleep 1 + done + + # Create kube-system namespace in kubernetes + $KUBECTL create namespace kube-system >/dev/null + # We expect to have at least 3 running pods - etcd, master and kube-proxy. local attempt=1 - while (($($KUBECTL get pods --no-headers 2>/dev/null | grep -c "Running") < 3)); do + while (($(KUBECTL get pods --all-namespaces --no-headers 2>/dev/null | grep -c "Running") < 3)); do echo -n "." sleep $(( attempt++ )) done echo - local end_time=$(date +%s) - echo "Started master components in $((end_time - start_time)) seconds." + echo "Started master components in $(($(date +%s) - start_time)) seconds." } # Open kubernetes master api port. setup_firewall() { - [[ -n "${DOCKER_MACHINE_NAME}" ]] || return + [[ -n "${DOCKER_MACHINE_NAME:-}" ]] || return echo "Adding iptables hackery for docker-machine..." @@ -184,13 +204,6 @@ setup_firewall() { fi } -# Create kube-system namespace in kubernetes -create_kube_system_namespace() { - echo "Creating kube-system namespace..." - - $KUBECTL create -f ./scripts/cluster/kube-system.yaml >/dev/null -} - # Activate skydns in kubernetes and wait for pods to be ready. create_kube_dns() { [[ "${ENABLE_CLUSTER_DNS}" = true ]] || return @@ -209,8 +222,7 @@ create_kube_dns() { sleep $(( attempt++ )) done echo - local end_time=$(date +%s) - echo "Started DNS in $((end_time - start_time)) seconds." + echo "Started DNS in $(($(date +%s) - start_time)) seconds." } # Generate kubeconfig data for the created cluster. @@ -231,17 +243,13 @@ generate_kubeconfig() { download_kubectl() { echo "Downloading kubectl binary..." + local output="/usr/local/bin/kubectl" + kubectl_url="https://storage.googleapis.com/kubernetes-release/release/${KUBE_VERSION}/bin/${host_os}/${host_arch}/kubectl" - if command_exists wget; then - wget -O ./bin/kubectl "${kubectl_url}" - elif command_exists curl; then - curl -sSOL ./bin/kubectl "${kubectl_url}" - else - error_exit "Couldn't find curl or wget. Bailing out." - fi - chmod a+x ./bin/kubectl + fetch_url "${kubectl_url}" > "${output}" + chmod a+x "${output}" - KUBECTL=./bin/kubectl + KUBECTL="${output}" } # Clean volumes that are left by kubelet @@ -297,9 +305,8 @@ kube_up() { clean_volumes setup_firewall - start_kubernetes generate_kubeconfig - create_kube_system_namespace + start_kubernetes create_kube_dns $KUBECTL cluster-info