diff --git a/hack/local-up-cluster.sh b/hack/local-up-cluster.sh index 98a0a6b958e..4c6b855331b 100755 --- a/hack/local-up-cluster.sh +++ b/hack/local-up-cluster.sh @@ -65,6 +65,7 @@ KUBECTL=${KUBECTL:-cluster/kubectl.sh} WAIT_FOR_URL_API_SERVER=${WAIT_FOR_URL_API_SERVER:-20} ENABLE_DAEMON=${ENABLE_DAEMON:-false} HOSTNAME_OVERRIDE=${HOSTNAME_OVERRIDE:-"127.0.0.1"} +EXTERNAL_CLOUD_PROVIDER=${EXTERNAL_CLOUD_PROVIDER:-false} CLOUD_PROVIDER=${CLOUD_PROVIDER:-""} CLOUD_CONFIG=${CLOUD_CONFIG:-""} FEATURE_GATES=${FEATURE_GATES:-"AllAlpha=false"} @@ -532,9 +533,14 @@ function start_apiserver { kube::util::create_client_certkey "${CONTROLPLANE_SUDO}" "${CERT_DIR}" 'client-ca' kube-aggregator system:kube-aggregator system:masters kube::util::write_client_kubeconfig "${CONTROLPLANE_SUDO}" "${CERT_DIR}" "${ROOT_CA_FILE}" "${API_HOST}" "${API_SECURE_PORT}" kube-aggregator + cloud_config_arg="--cloud-provider=${CLOUD_PROVIDER} --cloud-config=${CLOUD_CONFIG}" + if [[ "${EXTERNAL_CLOUD_PROVIDER:-}" == "true" ]]; then + cloud_config_arg="--cloud-provider=external" + fi APISERVER_LOG=${LOG_DIR}/kube-apiserver.log - ${CONTROLPLANE_SUDO} "${GO_OUT}/hyperkube" apiserver ${swagger_arg} ${audit_arg} ${authorizer_arg} ${priv_arg} ${runtime_config}\ + ${CONTROLPLANE_SUDO} "${GO_OUT}/hyperkube" apiserver ${swagger_arg} ${audit_arg} ${authorizer_arg} ${priv_arg} ${runtime_config} \ + ${cloud_config_arg} \ ${advertise_address} \ --v=${LOG_LEVEL} \ --vmodule="${LOG_SPEC}" \ @@ -556,8 +562,6 @@ function start_apiserver { --service-cluster-ip-range="${SERVICE_CLUSTER_IP_RANGE}" \ --feature-gates="${FEATURE_GATES}" \ --external-hostname="${EXTERNAL_HOSTNAME}" \ - --cloud-provider="${CLOUD_PROVIDER}" \ - --cloud-config="${CLOUD_CONFIG}" \ --requestheader-username-headers=X-Remote-User \ --requestheader-group-headers=X-Remote-Group \ --requestheader-extra-headers-prefix=X-Remote-Extra- \ @@ -601,6 +605,11 @@ function start_controller_manager { node_cidr_args="--allocate-node-cidrs=true --cluster-cidr=10.1.0.0/16 " fi + cloud_config_arg=cloud_config_arg="--cloud-provider=${CLOUD_PROVIDER} --cloud-config=${CLOUD_CONFIG}" + if [[ "${EXTERNAL_CLOUD_PROVIDER:-}" == "true" ]]; then + cloud_config_arg="--cloud-provider=external" + fi + CTLRMGR_LOG=${LOG_DIR}/kube-controller-manager.log ${CONTROLPLANE_SUDO} "${GO_OUT}/hyperkube" controller-manager \ --v=${LOG_LEVEL} \ @@ -613,8 +622,7 @@ function start_controller_manager { ${node_cidr_args} \ --pvclaimbinder-sync-period="${CLAIM_BINDER_SYNC_PERIOD}" \ --feature-gates="${FEATURE_GATES}" \ - --cloud-provider="${CLOUD_PROVIDER}" \ - --cloud-config="${CLOUD_CONFIG}" \ + ${cloud_config_arg} \ --kubeconfig "$CERT_DIR"/controller.kubeconfig \ --use-service-account-credentials \ --controllers="${KUBE_CONTROLLERS}" \ @@ -622,6 +630,35 @@ function start_controller_manager { CTLRMGR_PID=$! } +function start_cloud_controller_manager { + if [ -z "${CLOUD_CONFIG}" ]; then + echo "CLOUD_CONFIG cannot be empty!" + exit 1 + fi + if [ ! -f "${CLOUD_CONFIG}" ]; then + echo "Cloud config ${CLOUD_CONFIG} doesn't exist" + exit 1 + fi + + node_cidr_args="" + if [[ "${NET_PLUGIN}" == "kubenet" ]]; then + node_cidr_args="--allocate-node-cidrs=true --cluster-cidr=10.1.0.0/16 " + fi + + CLOUD_CTLRMGR_LOG=${LOG_DIR}/cloud-controller-manager.log + ${CONTROLPLANE_SUDO} "${GO_OUT}/hyperkube" alpha cloud-controller-manager \ + --v=${LOG_LEVEL} \ + --vmodule="${LOG_SPEC}" \ + ${node_cidr_args} \ + --feature-gates="${FEATURE_GATES}" \ + --cloud-provider=${CLOUD_PROVIDER} \ + --cloud-config=${CLOUD_CONFIG} \ + --kubeconfig "$CERT_DIR"/controller.kubeconfig \ + --use-service-account-credentials \ + --master="https://${API_HOST}:${API_SECURE_PORT}" >"${CLOUD_CTLRMGR_LOG}" 2>&1 & + CLOUD_CTLRMGR_PID=$! +} + function start_kubelet { KUBELET_LOG=${LOG_DIR}/kubelet.log mkdir -p "${POD_MANIFEST_PATH}" &>/dev/null || sudo mkdir -p "${POD_MANIFEST_PATH}" @@ -631,6 +668,11 @@ function start_kubelet { priv_arg="--allow-privileged " fi + cloud_config_arg=cloud_config_arg="--cloud-provider=${CLOUD_PROVIDER} --cloud-config=${CLOUD_CONFIG}" + if [[ "${EXTERNAL_CLOUD_PROVIDER:-}" == "true" ]]; then + cloud_config_arg="--cloud-provider=external" + fi + mkdir -p "/var/lib/kubelet" &>/dev/null || sudo mkdir -p "/var/lib/kubelet" if [[ -z "${DOCKERIZE_KUBELET}" ]]; then # Enable dns @@ -687,8 +729,7 @@ function start_kubelet { --rkt-path="${RKT_PATH}" \ --rkt-stage1-image="${RKT_STAGE1_IMAGE}" \ --hostname-override="${HOSTNAME_OVERRIDE}" \ - --cloud-provider="${CLOUD_PROVIDER}" \ - --cloud-config="${CLOUD_CONFIG}" \ + ${cloud_config_arg} \ --address="${KUBELET_HOST}" \ --kubeconfig "$CERT_DIR"/kubelet.kubeconfig \ --feature-gates="${FEATURE_GATES}" \ @@ -753,7 +794,7 @@ function start_kubelet { -i \ --cidfile=$KUBELET_CIDFILE \ gcr.io/google_containers/kubelet \ - /kubelet --v=${LOG_LEVEL} --containerized ${priv_arg}--chaos-chance="${CHAOS_CHANCE}" --pod-manifest-path="${POD_MANIFEST_PATH}" --hostname-override="${HOSTNAME_OVERRIDE}" --cloud-provider="${CLOUD_PROVIDER}" --cloud-config="${CLOUD_CONFIG}" \ --address="127.0.0.1" --kubeconfig "$CERT_DIR"/kubelet.kubeconfig --port="$KUBELET_PORT" --enable-controller-attach-detach="${ENABLE_CONTROLLER_ATTACH_DETACH}" &> $KUBELET_LOG & + /kubelet --v=${LOG_LEVEL} --containerized ${priv_arg}--chaos-chance="${CHAOS_CHANCE}" --pod-manifest-path="${POD_MANIFEST_PATH}" --hostname-override="${HOSTNAME_OVERRIDE}" ${cloud_config_arg} \ --address="127.0.0.1" --kubeconfig "$CERT_DIR"/kubelet.kubeconfig --port="$KUBELET_PORT" --enable-controller-attach-detach="${ENABLE_CONTROLLER_ATTACH_DETACH}" &> $KUBELET_LOG & fi } @@ -850,6 +891,7 @@ if [[ "${START_MODE}" != "kubeletonly" ]]; then Logs: ${APISERVER_LOG:-} ${CTLRMGR_LOG:-} + ${CLOUD_CTLRMGR_LOG:-} ${PROXY_LOG:-} ${SCHEDULER_LOG:-} EOF @@ -936,6 +978,9 @@ if [[ "${START_MODE}" != "kubeletonly" ]]; then set_service_accounts start_apiserver start_controller_manager + if [[ "${EXTERNAL_CLOUD_PROVIDER:-}" == "true" ]]; then + start_cloud_controller_manager + fi start_kubeproxy start_kubedns start_kubedashboard