Make it possible to run local kubelet independently of cluster

pull/6/head
Paul Morie 2016-08-31 15:36:54 -04:00
parent e693a61991
commit de1d44e3f0
1 changed files with 58 additions and 16 deletions

View File

@ -42,6 +42,9 @@ HOSTNAME_OVERRIDE=${HOSTNAME_OVERRIDE:-"127.0.0.1"}
CLOUD_PROVIDER=${CLOUD_PROVIDER:-""} CLOUD_PROVIDER=${CLOUD_PROVIDER:-""}
CLOUD_CONFIG=${CLOUD_CONFIG:-""} CLOUD_CONFIG=${CLOUD_CONFIG:-""}
# START_MODE can be 'all', 'kubeletonly', or 'nokubelet'
START_MODE=${START_MODE:-"all"}
# sanity check for OpenStack provider # sanity check for OpenStack provider
if [ "${CLOUD_PROVIDER}" == "openstack" ]; then if [ "${CLOUD_PROVIDER}" == "openstack" ]; then
if [ "${CLOUD_CONFIG}" == "" ]; then if [ "${CLOUD_CONFIG}" == "" ]; then
@ -131,6 +134,7 @@ CHAOS_CHANCE=${CHAOS_CHANCE:-0.0}
CPU_CFS_QUOTA=${CPU_CFS_QUOTA:-false} CPU_CFS_QUOTA=${CPU_CFS_QUOTA:-false}
ENABLE_HOSTPATH_PROVISIONER=${ENABLE_HOSTPATH_PROVISIONER:-"false"} ENABLE_HOSTPATH_PROVISIONER=${ENABLE_HOSTPATH_PROVISIONER:-"false"}
CLAIM_BINDER_SYNC_PERIOD=${CLAIM_BINDER_SYNC_PERIOD:-"15s"} # current k8s default CLAIM_BINDER_SYNC_PERIOD=${CLAIM_BINDER_SYNC_PERIOD:-"15s"} # current k8s default
ENABLE_CONTROLLER_ATTACH_DETACH=${ENABLE_CONTROLLER_ATTACH_DETACH:-"true"} # current default
function test_apiserver_off { function test_apiserver_off {
# For the common local scenario, fail fast if server is already running. # For the common local scenario, fail fast if server is already running.
@ -246,7 +250,7 @@ cleanup()
exit 0 exit 0
} }
function startETCD { function start_etcd {
echo "Starting etcd" echo "Starting etcd"
kube::etcd::start kube::etcd::start
} }
@ -335,6 +339,11 @@ function start_controller_manager {
function start_kubelet { function start_kubelet {
KUBELET_LOG=/tmp/kubelet.log KUBELET_LOG=/tmp/kubelet.log
priv_arg=""
if [[ -n "${ALLOW_PRIVILEGED}" ]]; then
priv_arg="--allow-privileged "
fi
mkdir -p /var/lib/kubelet mkdir -p /var/lib/kubelet
if [[ -z "${DOCKERIZE_KUBELET}" ]]; then if [[ -z "${DOCKERIZE_KUBELET}" ]]; then
# On selinux enabled systems, it might # On selinux enabled systems, it might
@ -386,6 +395,7 @@ function start_kubelet {
--address="${KUBELET_HOST}" \ --address="${KUBELET_HOST}" \
--api-servers="${API_HOST}:${API_PORT}" \ --api-servers="${API_HOST}:${API_PORT}" \
--cpu-cfs-quota=${CPU_CFS_QUOTA} \ --cpu-cfs-quota=${CPU_CFS_QUOTA} \
--enable-controller-attach-detach="${ENABLE_CONTROLLER_ATTACH_DETACH}" \
${dns_args} \ ${dns_args} \
${net_plugin_dir_args} \ ${net_plugin_dir_args} \
${net_plugin_args} \ ${net_plugin_args} \
@ -426,7 +436,7 @@ function start_kubelet {
-i \ -i \
--cidfile=$KUBELET_CIDFILE \ --cidfile=$KUBELET_CIDFILE \
gcr.io/google_containers/kubelet \ gcr.io/google_containers/kubelet \
/kubelet --v=${LOG_LEVEL} --containerized ${priv_arg}--chaos-chance="${CHAOS_CHANCE}" --hostname-override="${HOSTNAME_OVERRIDE}" --cloud-provider="${CLOUD_PROVIDER}" --cloud-config="${CLOUD_CONFIG}" \ --address="127.0.0.1" --api-servers="${API_HOST}:${API_PORT}" --port="$KUBELET_PORT" &> $KUBELET_LOG & /kubelet --v=${LOG_LEVEL} --containerized ${priv_arg}--chaos-chance="${CHAOS_CHANCE}" --hostname-override="${HOSTNAME_OVERRIDE}" --cloud-provider="${CLOUD_PROVIDER}" --cloud-config="${CLOUD_CONFIG}" \ --address="127.0.0.1" --api-servers="${API_HOST}:${API_PORT}" --port="$KUBELET_PORT" --enable-controller-attach-detach="${ENABLE_CONTROLLER_ATTACH_DETACH}" &> $KUBELET_LOG &
fi fi
} }
@ -484,16 +494,29 @@ EOF
} }
function print_success { function print_success {
cat <<EOF if [[ "${START_MODE}" != "kubeletonly" ]]; then
cat <<EOF
Local Kubernetes cluster is running. Press Ctrl-C to shut it down. Local Kubernetes cluster is running. Press Ctrl-C to shut it down.
Logs: Logs:
${APISERVER_LOG} ${APISERVER_LOG:-}
${CTLRMGR_LOG} ${CTLRMGR_LOG:-}
${PROXY_LOG} ${PROXY_LOG:-}
${SCHEDULER_LOG} ${SCHEDULER_LOG:-}
${KUBELET_LOG} EOF
fi
if [[ "${START_MODE}" == "all" ]]; then
echo " ${KUBELET_LOG}"
elif [[ "${START_MODE}" == "nokubelet" ]]; then
echo
echo "No kubelet was started because you set START_MODE=nokubelet"
echo "Run this script again with START_MODE=kubeletonly to run a kubelet"
fi
if [[ "${START_MODE}" != "kubeletonly" ]]; then
echo
cat <<EOF
To start using your cluster, open up another terminal/tab and run: To start using your cluster, open up another terminal/tab and run:
export KUBERNETES_PROVIDER=local export KUBERNETES_PROVIDER=local
@ -503,10 +526,22 @@ To start using your cluster, open up another terminal/tab and run:
cluster/kubectl.sh config use-context local cluster/kubectl.sh config use-context local
cluster/kubectl.sh cluster/kubectl.sh
EOF EOF
else
cat <<EOF
The kubelet was started.
Logs:
${KUBELET_LOG}
EOF
fi
} }
test_docker test_docker
test_apiserver_off
if [[ "${START_MODE}" != "kubeletonly" ]]; then
test_apiserver_off
fi
test_openssl_installed test_openssl_installed
### IF the user didn't supply an output/ for the build... Then we detect. ### IF the user didn't supply an output/ for the build... Then we detect.
@ -519,14 +554,21 @@ KUBELET_CIDFILE=/tmp/kubelet.cid
if [[ "${ENABLE_DAEMON}" = false ]]; then if [[ "${ENABLE_DAEMON}" = false ]]; then
trap cleanup EXIT trap cleanup EXIT
fi fi
echo "Starting services now!" echo "Starting services now!"
startETCD if [[ "${START_MODE}" != "kubeletonly" ]]; then
set_service_accounts start_etcd
start_apiserver set_service_accounts
start_controller_manager start_apiserver
start_kubelet start_controller_manager
start_kubeproxy start_kubeproxy
start_kubedns start_kubedns
fi
if [[ "${START_MODE}" != "nokubelet" ]]; then
start_kubelet
fi
print_success print_success
if [[ "${ENABLE_DAEMON}" = false ]]; then if [[ "${ENABLE_DAEMON}" = false ]]; then