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