diff --git a/hack/lib/util.sh b/hack/lib/util.sh index 9c1c2093a1101..8fd29213de599 100755 --- a/hack/lib/util.sh +++ b/hack/lib/util.sh @@ -64,6 +64,24 @@ kube::util::wait_for_url() { return 1 } +# Example: kube::util::wait_for_success 120 5 "kubectl get nodes|grep localhost" +# arguments: wait time, sleep time, shell command +# returns 0 if the shell command get output, 1 otherwise. +kube::util::wait_for_success(){ + local wait_time="$1" + local sleep_time="$2" + local cmd="$3" + while [ "$wait_time" -gt 0 ]; do + if eval "$cmd"; then + return 0 + else + sleep "$sleep_time" + wait_time=$((wait_time-sleep_time)) + fi + done + return 1 +} + # Example: kube::util::trap_add 'echo "in trap DEBUG"' DEBUG # See: http://stackoverflow.com/questions/3338030/multiple-bash-traps-for-the-same-signal kube::util::trap_add() { diff --git a/hack/local-up-cluster.sh b/hack/local-up-cluster.sh index 1d8059e2fe763..787418c2625a9 100755 --- a/hack/local-up-cluster.sh +++ b/hack/local-up-cluster.sh @@ -676,6 +676,19 @@ function start_cloud_controller_manager { export CLOUD_CTLRMGR_PID=$! } +function wait_node_ready(){ + # check the nodes information after kubelet daemon start + local nodes_stats="${KUBECTL} --kubeconfig '${CERT_DIR}/admin.kubeconfig' get nodes" + local node_name=$KUBELET_HOST + local system_node_wait_time=30 + local interval_time=2 + kube::util::wait_for_success "$system_node_wait_time" "$interval_time" "$nodes_stats | grep $node_name" + if [ $? == "1" ]; then + echo "time out on waiting $node_name info" + exit 1 + fi +} + function start_kubelet { KUBELET_LOG=${LOG_DIR}/kubelet.log mkdir -p "${POD_MANIFEST_PATH}" &>/dev/null || sudo mkdir -p "${POD_MANIFEST_PATH}" @@ -790,6 +803,10 @@ function start_kubelet { function start_kubeproxy { PROXY_LOG=${LOG_DIR}/kube-proxy.log + # wait for kubelet collect node information + echo "wait kubelet ready" + wait_node_ready + cat < /tmp/kube-proxy.yaml apiVersion: kubeproxy.config.k8s.io/v1alpha1 kind: KubeProxyConfiguration @@ -1003,9 +1020,6 @@ if [[ "${START_MODE}" != "kubeletonly" ]]; then if [[ "${EXTERNAL_CLOUD_PROVIDER:-}" == "true" ]]; then start_cloud_controller_manager fi - if [[ "${START_MODE}" != "nokubeproxy" ]]; then - start_kubeproxy - fi start_kubescheduler start_kubedns if [[ "${ENABLE_NODELOCAL_DNS:-}" == "true" ]]; then @@ -1031,6 +1045,11 @@ if [[ "${START_MODE}" != "nokubelet" ]]; then esac fi +if [[ "${START_MODE}" != "kubeletonly" ]]; then + if [[ "${START_MODE}" != "nokubeproxy" ]]; then + start_kubeproxy + fi +fi if [[ -n "${PSP_ADMISSION}" && "${AUTHORIZATION_MODE}" = *RBAC* ]]; then create_psp_policy fi