From cf24c77e789b79a85e3a2601b9d844248f691def Mon Sep 17 00:00:00 2001 From: Vipin Jain Date: Wed, 10 Dec 2014 22:13:34 -0800 Subject: [PATCH] ubuntu getting started guide --- MAINTAINERS.md | 1 + cluster/ubuntu/default_scripts/etcd | 9 ++ cluster/ubuntu/default_scripts/kube-apiserver | 13 +++ .../default_scripts/kube-controller-manager | 11 ++ cluster/ubuntu/default_scripts/kube-proxy | 10 ++ cluster/ubuntu/default_scripts/kube-scheduler | 10 ++ cluster/ubuntu/default_scripts/kubelet | 13 +++ cluster/ubuntu/init_conf/etcd.conf | 31 ++++++ cluster/ubuntu/init_conf/kube-apiserver.conf | 30 ++++++ .../init_conf/kube-controller-manager.conf | 30 ++++++ cluster/ubuntu/init_conf/kube-proxy.conf | 30 ++++++ cluster/ubuntu/init_conf/kube-scheduler.conf | 30 ++++++ cluster/ubuntu/init_conf/kubelet.conf | 30 ++++++ cluster/ubuntu/initd_scripts/etcd | 100 ++++++++++++++++++ cluster/ubuntu/initd_scripts/kube-apiserver | 99 +++++++++++++++++ .../initd_scripts/kube-controller-manager | 99 +++++++++++++++++ cluster/ubuntu/initd_scripts/kube-proxy | 99 +++++++++++++++++ cluster/ubuntu/initd_scripts/kube-scheduler | 99 +++++++++++++++++ cluster/ubuntu/initd_scripts/kubelet | 99 +++++++++++++++++ cluster/ubuntu/util.sh | 43 ++++++++ .../ubuntu_single_node.md | 50 +++++++++ 21 files changed, 936 insertions(+) create mode 100644 cluster/ubuntu/default_scripts/etcd create mode 100644 cluster/ubuntu/default_scripts/kube-apiserver create mode 100644 cluster/ubuntu/default_scripts/kube-controller-manager create mode 100644 cluster/ubuntu/default_scripts/kube-proxy create mode 100644 cluster/ubuntu/default_scripts/kube-scheduler create mode 100644 cluster/ubuntu/default_scripts/kubelet create mode 100644 cluster/ubuntu/init_conf/etcd.conf create mode 100644 cluster/ubuntu/init_conf/kube-apiserver.conf create mode 100644 cluster/ubuntu/init_conf/kube-controller-manager.conf create mode 100644 cluster/ubuntu/init_conf/kube-proxy.conf create mode 100644 cluster/ubuntu/init_conf/kube-scheduler.conf create mode 100644 cluster/ubuntu/init_conf/kubelet.conf create mode 100755 cluster/ubuntu/initd_scripts/etcd create mode 100755 cluster/ubuntu/initd_scripts/kube-apiserver create mode 100755 cluster/ubuntu/initd_scripts/kube-controller-manager create mode 100755 cluster/ubuntu/initd_scripts/kube-proxy create mode 100755 cluster/ubuntu/initd_scripts/kube-scheduler create mode 100755 cluster/ubuntu/initd_scripts/kubelet create mode 100755 cluster/ubuntu/util.sh create mode 100644 docs/getting-started-guides/ubuntu_single_node.md diff --git a/MAINTAINERS.md b/MAINTAINERS.md index 59233ba859a..dc2893dd176 100644 --- a/MAINTAINERS.md +++ b/MAINTAINERS.md @@ -18,3 +18,4 @@ least one maintainer on relevant issues and PRs. * Local: [Derek Carr](https://github.com/derekwaynecarr) * Vagrant: [Derek Carr](https://github.com/derekwaynecarr) * CloudStack: [Sebastien Goasguen](https://github.com/runseb) +* Ubuntu: [Vipin Jain](https://github.com/jainvipin) diff --git a/cluster/ubuntu/default_scripts/etcd b/cluster/ubuntu/default_scripts/etcd new file mode 100644 index 00000000000..dd0d7bb5136 --- /dev/null +++ b/cluster/ubuntu/default_scripts/etcd @@ -0,0 +1,9 @@ +# Etcd Upstart and SysVinit configuration file + +# Customize etcd location +# ETCD="/opt/bin/etcd" + +# Use ETCD_OPTS to modify the start/restart options +ETCD_OPTS="-listen-client-urls=http://127.0.0.1:4001" + +# Add more envionrment settings used by etcd here diff --git a/cluster/ubuntu/default_scripts/kube-apiserver b/cluster/ubuntu/default_scripts/kube-apiserver new file mode 100644 index 00000000000..a1721304d49 --- /dev/null +++ b/cluster/ubuntu/default_scripts/kube-apiserver @@ -0,0 +1,13 @@ +# Kube-Apiserver Upstart and SysVinit configuration file + +# Customize kube-apiserver binary location +# KUBE_APISERVER="/opt/bin/kube-apiserver" + +# Use KUBE_APISERVER_OPTS to modify the start/restart options +KUBE_APISERVER_OPTS="--address=127.0.0.1 \ +--port=8080 \ +--etcd_servers=http://127.0.0.1:4001 \ +--logtostderr=true \ +--portal_net=11.1.1.0/24" + +# Add more envionrment settings used by kube-apiserver here diff --git a/cluster/ubuntu/default_scripts/kube-controller-manager b/cluster/ubuntu/default_scripts/kube-controller-manager new file mode 100644 index 00000000000..10fe20bb84a --- /dev/null +++ b/cluster/ubuntu/default_scripts/kube-controller-manager @@ -0,0 +1,11 @@ +# Kube-Controller-Manager Upstart and SysVinit configuration file + +# Customize kube-controller-manager binary location +# KUBE_CONTROLLER_MANAGER="/opt/bin/kube-controller-manager" + +# Use KUBE_CONTROLLER_MANAGER_OPTS to modify the start/restart options +KUBE_CONTROLLER_MANAGER_OPTS="--master=127.0.0.1:8080 \ +--machines=127.0.0.1 \ +--logtostderr=true" + +# Add more envionrment settings used by kube-controller-manager here diff --git a/cluster/ubuntu/default_scripts/kube-proxy b/cluster/ubuntu/default_scripts/kube-proxy new file mode 100644 index 00000000000..82a41b80577 --- /dev/null +++ b/cluster/ubuntu/default_scripts/kube-proxy @@ -0,0 +1,10 @@ +# Kube-Proxy Upstart and SysVinit configuration file + +# Customize kube-proxy binary location +# KUBE_PROXY="/opt/bin/kube-proxy" + +# Use KUBE_PROXY_OPTS to modify the start/restart options +KUBE_PROXY_OPTS="--etcd_servers=http://127.0.0.1:4001 \ +--logtostderr=true" + +# Add more envionrment settings used by kube-apiserver here diff --git a/cluster/ubuntu/default_scripts/kube-scheduler b/cluster/ubuntu/default_scripts/kube-scheduler new file mode 100644 index 00000000000..3583c3719aa --- /dev/null +++ b/cluster/ubuntu/default_scripts/kube-scheduler @@ -0,0 +1,10 @@ +# Kube-Scheduler Upstart and SysVinit configuration file + +# Customize kube-apiserver binary location +# KUBE_SCHEDULER="/opt/bin/kube-apiserver" + +# Use KUBE_SCHEDULER_OPTS to modify the start/restart options +KUBE_SCHEDULER_OPTS="--logtostderr=true \ +--master=127.0.0.1:8080" + +# Add more envionrment settings used by kube-scheduler here diff --git a/cluster/ubuntu/default_scripts/kubelet b/cluster/ubuntu/default_scripts/kubelet new file mode 100644 index 00000000000..5b0e99afab1 --- /dev/null +++ b/cluster/ubuntu/default_scripts/kubelet @@ -0,0 +1,13 @@ +# Kubelet Upstart and SysVinit configuration file + +# Customize kubelet binary location +# KUBELET="/opt/bin/kubelet" + +# Use KUBELET_OPTS to modify the start/restart options +KUBELET_OPTS="--address=127.0.0.1 \ +--port=10250 \ +--hostname_override=127.0.0.1 \ +--etcd_servers=http://127.0.0.1:4001 \ +--logtostderr=true" + +# Add more envionrment settings used by kube-scheduler here diff --git a/cluster/ubuntu/init_conf/etcd.conf b/cluster/ubuntu/init_conf/etcd.conf new file mode 100644 index 00000000000..3fd00b649b4 --- /dev/null +++ b/cluster/ubuntu/init_conf/etcd.conf @@ -0,0 +1,31 @@ +description "Etcd service" +author "@jainvipin" + +# start after docker starts, stop before docker stops +start on started docker +stop on stopping docker + +respawn + +pre-start script + # see also https://github.com/jainvipin/kubernetes-ubuntu-start + ETCD=/opt/bin/$UPSTART_JOB + if [ -f /etc/default/$UPSTART_JOB ]; then + . /etc/default/$UPSTART_JOB + fi + if [ -f $ETCD ]; then + exit 0 + fi + echo "$ETCD binary not found, exiting" + exit 22 +end script + +script + # modify these in /etc/default/$UPSTART_JOB (/etc/default/docker) + ETCD=/opt/bin/$UPSTART_JOB + ETCD_OPTS="" + if [ -f /etc/default/$UPSTART_JOB ]; then + . /etc/default/$UPSTART_JOB + fi + exec "$ETCD" $ETCD_OPTS +end script diff --git a/cluster/ubuntu/init_conf/kube-apiserver.conf b/cluster/ubuntu/init_conf/kube-apiserver.conf new file mode 100644 index 00000000000..f2bbae522f7 --- /dev/null +++ b/cluster/ubuntu/init_conf/kube-apiserver.conf @@ -0,0 +1,30 @@ +description "Kube-Apiserver service" +author "@jainvipin" + +# start in conjunction with etcd +start on started etcd +stop on stopping etcd + +# respawn + +pre-start script + # see also https://github.com/jainvipin/kubernetes-start + KUBE_APISERVER=/opt/bin/$UPSTART_JOB + if [ -f /etc/default/$UPSTART_JOB ]; then + . /etc/default/$UPSTART_JOB + fi + if [ -f $KUBE_APISERVER ]; then + exit 0 + fi + exit 22 +end script + +script + # modify these in /etc/default/$UPSTART_JOB (/etc/default/docker) + KUBE_APISERVER=/opt/bin/$UPSTART_JOB + KUBE_APISERVER_OPTS="" + if [ -f /etc/default/$UPSTART_JOB ]; then + . /etc/default/$UPSTART_JOB + fi + exec "$KUBE_APISERVER" $KUBE_APISERVER_OPTS +end script diff --git a/cluster/ubuntu/init_conf/kube-controller-manager.conf b/cluster/ubuntu/init_conf/kube-controller-manager.conf new file mode 100644 index 00000000000..60dc7c9b25c --- /dev/null +++ b/cluster/ubuntu/init_conf/kube-controller-manager.conf @@ -0,0 +1,30 @@ +description "Kube-Controller-Manager service" +author "@jainvipin" + +# start in conjunction with etcd +start on started etcd +stop on stopping etcd + +# respawn + +pre-start script + # see also https://github.com/jainvipin/kubernetes-ubuntu-start + KUBE_CONTROLLER_MANAGER=/opt/bin/$UPSTART_JOB + if [ -f /etc/default/$UPSTART_JOB ]; then + . /etc/default/$UPSTART_JOB + fi + if [ -f $KUBE_CONTROLLER_MANAGER ]; then + exit 0 + fi + exit 22 +end script + +script + # modify these in /etc/default/$UPSTART_JOB (/etc/default/docker) + KUBE_CONTROLLER_MANAGER=/opt/bin/$UPSTART_JOB + KUBE_CONTROLLER_MANAGER_OPTS="" + if [ -f /etc/default/$UPSTART_JOB ]; then + . /etc/default/$UPSTART_JOB + fi + exec "$KUBE_CONTROLLER_MANAGER" $KUBE_CONTROLLER_MANAGER_OPTS +end script diff --git a/cluster/ubuntu/init_conf/kube-proxy.conf b/cluster/ubuntu/init_conf/kube-proxy.conf new file mode 100644 index 00000000000..0747a9d7205 --- /dev/null +++ b/cluster/ubuntu/init_conf/kube-proxy.conf @@ -0,0 +1,30 @@ +description "Kube-Proxy service" +author "@jainvipin" + +# start in conjunction with etcd +start on started etcd +stop on stopping etcd + +# respawn + +pre-start script + # see also https://github.com/jainvipin/kubernetes-start + KUBE_PROXY=/opt/bin/$UPSTART_JOB + if [ -f /etc/default/$UPSTART_JOB ]; then + . /etc/default/$UPSTART_JOB + fi + if [ -f $KUBE_PROXY ]; then + exit 0 + fi + exit 22 +end script + +script + # modify these in /etc/default/$UPSTART_JOB (/etc/default/docker) + KUBE_PROXY=/opt/bin/$UPSTART_JOB + KUBE_PROXY_OPTS="" + if [ -f /etc/default/$UPSTART_JOB ]; then + . /etc/default/$UPSTART_JOB + fi + exec "$KUBE_PROXY" $KUBE_PROXY_OPTS +end script diff --git a/cluster/ubuntu/init_conf/kube-scheduler.conf b/cluster/ubuntu/init_conf/kube-scheduler.conf new file mode 100644 index 00000000000..81ce9f07f9a --- /dev/null +++ b/cluster/ubuntu/init_conf/kube-scheduler.conf @@ -0,0 +1,30 @@ +description "Kube-Scheduler service" +author "@jainvipin" + +# start in conjunction with etcd +start on started etcd +stop on stopping etcd + +# respawn + +pre-start script + # see also https://github.com/jainvipin/kubernetes-start + KUBE_SCHEDULER=/opt/bin/$UPSTART_JOB + if [ -f /etc/default/$UPSTART_JOB ]; then + . /etc/default/$UPSTART_JOB + fi + if [ -f $KUBE_SCHEDULER ]; then + exit 0 + fi + exit 22 +end script + +script + # modify these in /etc/default/$UPSTART_JOB (/etc/default/docker) + KUBE_SCHEDULER=/opt/bin/$UPSTART_JOB + KUBE_SCHEDULER_OPTS="" + if [ -f /etc/default/$UPSTART_JOB ]; then + . /etc/default/$UPSTART_JOB + fi + exec "$KUBE_SCHEDULER" $KUBE_SCHEDULER_OPTS +end script diff --git a/cluster/ubuntu/init_conf/kubelet.conf b/cluster/ubuntu/init_conf/kubelet.conf new file mode 100644 index 00000000000..f7587c40d1c --- /dev/null +++ b/cluster/ubuntu/init_conf/kubelet.conf @@ -0,0 +1,30 @@ +description "Kubelet service" +author "@jainvipin" + +# start in conjunction with etcd +start on started etcd +stop on stopping etcd + +# respawn + +pre-start script + # see also https://github.com/jainvipin/kubernetes-ubuntu-start + KUBELET=/opt/bin/$UPSTART_JOB + if [ -f /etc/default/$UPSTART_JOB ]; then + . /etc/default/$UPSTART_JOB + fi + if [ -f $KUBELET ]; then + exit 0 + fi + exit 22 +end script + +script + # modify these in /etc/default/$UPSTART_JOB (/etc/default/docker) + KUBELET=/opt/bin/$UPSTART_JOB + KUBELET_OPTS="" + if [ -f /etc/default/$UPSTART_JOB ]; then + . /etc/default/$UPSTART_JOB + fi + exec "$KUBELET" $KUBELET_OPTS +end script diff --git a/cluster/ubuntu/initd_scripts/etcd b/cluster/ubuntu/initd_scripts/etcd new file mode 100755 index 00000000000..16fda422fb4 --- /dev/null +++ b/cluster/ubuntu/initd_scripts/etcd @@ -0,0 +1,100 @@ +#!/bin/sh +set -e + +### BEGIN INIT INFO +# Provides: etcd +# Required-Start: $docker +# Required-Stop: +# Should-Start: +# Should-Stop: +# Default-Start: +# Default-Stop: +# Short-Description: Start distrubted key/value pair service +# Description: +# http://www.github.com/coreos/etcd +### END INIT INFO + +export PATH=/sbin:/bin:/usr/sbin:/usr/bin:/usr/local/sbin:/usr/local/bin:/opt/bin: + +BASE=$(basename $0) + +# modify these in /etc/default/$BASE (/etc/default/etcd) +ETCD=/opt/bin/$BASE +# This is the pid file managed by etcd itself +ETCD_PIDFILE=/var/run/$BASE.pid +ETCD_LOGFILE=/var/log/$BASE.log +ETCD_OPTS="" +ETCD_DESC="Etcd" + +# Get lsb functions +. /lib/lsb/init-functions + +if [ -f /etc/default/$BASE ]; then + . /etc/default/$BASE +fi + +# see also init_is_upstart in /lib/lsb/init-functions (which isn't available in Ubuntu 12.04, or we'd use it) +if false && [ -x /sbin/initctl ] && /sbin/initctl version 2>/dev/null | grep -q upstart; then + log_failure_msg "$ETCD_DESC is managed via upstart, try using service $BASE $1" + exit 1 +fi + +# Check etcd is present +if [ ! -x $ETCD ]; then + log_failure_msg "$ETCD not present or not executable" + exit 1 +fi + +fail_unless_root() { + if [ "$(id -u)" != '0' ]; then + log_failure_msg "$ETCD_DESC must be run as root" + exit 1 + fi +} + +ETCD_START="start-stop-daemon \ +--start \ +--background \ +--quiet \ +--exec $ETCD \ +--make-pidfile \ +--pidfile $ETCD_PIDFILE \ +-- $ETCD_OPTS \ +>> $ETCD_LOGFILE 2>&1" + +ETCD_STOP="start-stop-daemon \ +--stop \ +--pidfile $ETCD_PIDFILE" + +case "$1" in + start) + fail_unless_root + log_begin_msg "Starting $ETCD_DESC: $BASE" + $ETCD_START + log_end_msg $? + ;; + + stop) + fail_unless_root + log_begin_msg "Stopping $ETCD_DESC: $BASE" + $ETCD_STOP + log_end_msg $? + ;; + + restart | force-reload) + fail_unless_root + log_begin_msg "Restarting $ETCD_DESC: $BASE" + $ETCD_STOP + $ETCD_START + log_end_msg $? + ;; + + status) + status_of_proc -p "$ETCD_PIDFILE" "$ETCD" "$ETCD_DESC" + ;; + + *) + echo "Usage: $0 {start|stop|restart|status}" + exit 1 + ;; +esac diff --git a/cluster/ubuntu/initd_scripts/kube-apiserver b/cluster/ubuntu/initd_scripts/kube-apiserver new file mode 100755 index 00000000000..eede582562b --- /dev/null +++ b/cluster/ubuntu/initd_scripts/kube-apiserver @@ -0,0 +1,99 @@ +#!/bin/sh +set -e + +### BEGIN INIT INFO +# Provides: kube-apiserver +# Required-Start: $etcd +# Required-Stop: +# Should-Start: +# Should-Stop: +# Default-Start: +# Default-Stop: +# Short-Description: Start distrubted key/value pair service +# Description: +# http://www.github.com/GoogleCloudPlatform/Kubernetes +### END INIT INFO + +export PATH=/sbin:/bin:/usr/sbin:/usr/bin:/usr/local/sbin:/usr/local/bin:/opt/bin: + +BASE=$(basename $0) + +# modify these in /etc/default/$BASE (/etc/default/kube-apiserver) +KUBE_APISERVER=/opt/bin/$BASE +# This is the pid file managed by kube-apiserver itself +KUBE_APISERVER_PIDFILE=/var/run/$BASE.pid +KUBE_APISERVER_LOGFILE=/var/log/$BASE.log +KUBE_APISERVER_OPTS="" +KUBE_APISERVER_DESC="Kube-Apiserver" + +# Get lsb functions +. /lib/lsb/init-functions + +if [ -f /etc/default/$BASE ]; then + . /etc/default/$BASE +fi + +# see also init_is_upstart in /lib/lsb/init-functions (which isn't available in Ubuntu 12.04, or we'd use it) +if [ -x /sbin/initctl ] && /sbin/initctl version 2>/dev/null | grep -q upstart; then + log_failure_msg "$KUBE_APISERVER_DESC is managed via upstart, try using service $BASE $1" + exit 1 +fi + +# Check kube-apiserver is present +if [ ! -x $KUBE_APISERVER ]; then + log_failure_msg "$KUBE_APISERVER not present or not executable" + exit 1 +fi + +fail_unless_root() { + if [ "$(id -u)" != '0' ]; then + log_failure_msg "$KUBE_APISERVER_DESC must be run as root" + exit 1 + fi +} + +KUBE_APISERVER_START="start-stop-daemon \ +--start \ +--background \ +--quiet \ +--exec $KUBE_APISERVER \ +--make-pidfile --pidfile $KUBE_APISERVER_PIDFILE \ +-- $KUBE_APISERVER_OPTS \ +>> $KUBE_APISERVER_LOGFILE 2>&1" + +KUBE_APISERVER_STOP="start-stop-daemon \ +--stop \ +--pidfile $KUBE_APISERVER_PIDFILE" + +case "$1" in + start) + fail_unless_root + log_begin_msg "Starting $KUBE_APISERVER_DESC: $BASE" + $KUBE_APISERVER_START + log_end_msg $? + ;; + + stop) + fail_unless_root + log_begin_msg "Stopping $KUBE_APISERVER_DESC: $BASE" + $KUBE_APISERVER_STOP + log_end_msg $? + ;; + + restart | force-reload) + fail_unless_root + log_begin_msg "Stopping $KUBE_APISERVER_DESC: $BASE" + $KUBE_APISERVER_STOP + $KUBE_APISERVER_START + log_end_msg $? + ;; + + status) + status_of_proc -p "$KUBE_APISERVER_PIDFILE" "$KUBE_APISERVER" "$KUBE_APISERVER_DESC" + ;; + + *) + echo "Usage: $0 {start|stop|restart|status}" + exit 1 + ;; +esac diff --git a/cluster/ubuntu/initd_scripts/kube-controller-manager b/cluster/ubuntu/initd_scripts/kube-controller-manager new file mode 100755 index 00000000000..3418e836643 --- /dev/null +++ b/cluster/ubuntu/initd_scripts/kube-controller-manager @@ -0,0 +1,99 @@ +#!/bin/sh +set -e + +### BEGIN INIT INFO +# Provides: kube-controller-manager +# Required-Start: $etcd +# Required-Stop: +# Should-Start: +# Should-Stop: +# Default-Start: +# Default-Stop: +# Short-Description: Start distrubted key/value pair service +# Description: +# http://www.github.com/GoogleCloudPlatform/Kubernetes +### END INIT INFO + +export PATH=/sbin:/bin:/usr/sbin:/usr/bin:/usr/local/sbin:/usr/local/bin:/opt/bin: + +BASE=$(basename $0) + +# modify these in /etc/default/$BASE (/etc/default/kube-controller-manager) +KUBE_CONTROLLER_MANAGER=/opt/bin/$BASE +# This is the pid file managed by kube-controller-manager itself +KUBE_CONTROLLER_MANAGER_PIDFILE=/var/run/$BASE.pid +KUBE_CONTROLLER_MANAGER_LOGFILE=/var/log/$BASE.log +KUBE_CONTROLLER_MANAGER_OPTS="" +KUBE_CONTROLLER_MANAGER_DESC="Kube-Controller-Manager" + +# Get lsb functions +. /lib/lsb/init-functions + +if [ -f /etc/default/$BASE ]; then + . /etc/default/$BASE +fi + +# see also init_is_upstart in /lib/lsb/init-functions (which isn't available in Ubuntu 12.04, or we'd use it) +if [ -x /sbin/initctl ] && /sbin/initctl version 2>/dev/null | grep -q upstart; then + log_failure_msg "$KUBE_CONTROLLER_MANAGER_DESC is managed via upstart, try using service $BASE $1" + exit 1 +fi + +# Check kube-controller-manager is present +if [ ! -x $KUBE_CONTROLLER_MANAGER ]; then + log_failure_msg "$KUBE_CONTROLLER_MANAGER not present or not executable" + exit 1 +fi + +fail_unless_root() { + if [ "$(id -u)" != '0' ]; then + log_failure_msg "$KUBE_CONTROLLER_MANAGER_DESC must be run as root" + exit 1 + fi +} + +KUBE_CONTROLLER_MANAGER_START="start-stop-daemon +--start --background \ +--quiet \ +--exec $KUBE_CONTROLLER_MANAGER \ +--make-pidfile \ +--pidfile $KUBE_CONTROLLER_MANAGER_PIDFILE \ +-- $KUBE_CONTROLLER_MANAGER_OPTS \ +>> "$KUBE_CONTROLLER_MANAGER_LOGFILE" 2>&1 + +KUBE_CONTROLLER_MANAGER_STOP="start-stop-daemon \ +--stop \ +--pidfile $KUBE_CONTROLLER_MANAGER_PIDFILE" + +case "$1" in + start) + fail_unless_root + log_begin_msg "Starting $KUBE_CONTROLLER_MANAGER_DESC: $BASE" + $KUBE_CONTROLLER_MANAGER_START + log_end_msg $? + ;; + + stop) + fail_unless_root + log_begin_msg "Stopping $KUBE_CONTROLLER_MANAGER_DESC: $BASE" + $KUBE_CONTROLLER_MANAGER_STOP + log_end_msg $? + ;; + + restart | force-reload) + fail_unless_root + log_daemon_message "Restarting $KUBE_CONTROLLER_MANAGER" || true + $KUBE_CONTROLLER_MANAGER_STOP + $KUBE_CONTROLLER_MANAGER_START + log_end_msg $? + ;; + + status) + status_of_proc -p "$KUBE_CONTROLLER_MANAGER_PIDFILE" "$KUBE_CONTROLLER_MANAGER" "$KUBE_CONTROLLER_MANAGER_DESC" + ;; + + *) + echo "Usage: $0 {start|stop|restart|status}" + exit 1 + ;; +esac diff --git a/cluster/ubuntu/initd_scripts/kube-proxy b/cluster/ubuntu/initd_scripts/kube-proxy new file mode 100755 index 00000000000..897c6fc2f7b --- /dev/null +++ b/cluster/ubuntu/initd_scripts/kube-proxy @@ -0,0 +1,99 @@ +#!/bin/sh +set -e + +### BEGIN INIT INFO +# Provides: kube-proxy +# Required-Start: $etcd +# Required-Stop: +# Should-Start: +# Should-Stop: +# Default-Start: +# Default-Stop: +# Short-Description: Start distrubted key/value pair service +# Description: +# http://www.github.com/GoogleCloudPlatform/Kubernetes +### END INIT INFO + +export PATH=/sbin:/bin:/usr/sbin:/usr/bin:/usr/local/sbin:/usr/local/bin:/opt/bin: + +BASE=$(basename $0) + +# modify these in /etc/default/$BASE (/etc/default/kube-proxy) +KUBE_PROXY=/opt/bin/$BASE +# This is the pid file managed by kube-proxy itself +KUBE_PROXY_PIDFILE=/var/run/$BASE.pid +KUBE_PROXY_LOGFILE=/var/log/$BASE.log +KUBE_PROXY_OPTS="" +KUBE_PROXY_DESC="Kube-Proxy" + +# Get lsb functions +. /lib/lsb/init-functions + +if [ -f /etc/default/$BASE ]; then + . /etc/default/$BASE +fi + +# see also init_is_upstart in /lib/lsb/init-functions (which isn't available in Ubuntu 12.04, or we'd use it) +if [ -x /sbin/initctl ] && /sbin/initctl version 2>/dev/null | grep -q upstart; then + log_failure_msg "$KUBE_PROXY_DESC is managed via upstart, try using service $BASE $1" + exit 1 +fi + +# Check kube-proxy is present +if [ ! -x $KUBE_PROXY ]; then + log_failure_msg "$KUBE_PROXY not present or not executable" + exit 1 +fi + +fail_unless_root() { + if [ "$(id -u)" != '0' ]; then + log_failure_msg "$KUBE_PROXY_DESC must be run as root" + exit 1 + fi +} + +KUBE_PROXY_START="start-stop-daemon \ +--start \ +--background \ +--quiet \ +--exec $KUBE_PROXY \ +--make-pidfile --pidfile $KUBE_PROXY_PIDFILE \ +-- $KUBE_PROXY_OPTS \ +>> $KUBE_PROXY_LOGFILE 2>&1" + +KUBE_PROXY_STOP="start-stop-daemon \ +--stop \ +--pidfile $KUBE_PROXY_PIDFILE" + +case "$1" in + start) + fail_unless_root + log_begin_msg "Starting $KUBE_PROXY_DESC: $BASE" + $KUBE_PROXY_START + log_end_msg $? + ;; + + stop) + fail_unless_root + log_begin_msg "Stopping $KUBE_PROXY_DESC: $BASE" + $KUBE_PROXY_STOP + log_end_msg $? + ;; + + restart | force-reload) + fail_unless_root + log_begin_msg "Stopping $KUBE_PROXY_DESC: $BASE" + $KUBE_PROXY_STOP + $KUBE_PROXY_START + log_end_msg $? + ;; + + status) + status_of_proc -p "$KUBE_PROXY_PIDFILE" "$KUBE_PROXY" "$KUBE_PROXY_DESC" + ;; + + *) + echo "Usage: $0 {start|stop|restart|status}" + exit 1 + ;; +esac diff --git a/cluster/ubuntu/initd_scripts/kube-scheduler b/cluster/ubuntu/initd_scripts/kube-scheduler new file mode 100755 index 00000000000..dd9131c5889 --- /dev/null +++ b/cluster/ubuntu/initd_scripts/kube-scheduler @@ -0,0 +1,99 @@ +#!/bin/sh +set -e + +### BEGIN INIT INFO +# Provides: kube-scheduler +# Required-Start: $etcd +# Required-Stop: +# Should-Start: +# Should-Stop: +# Default-Start: +# Default-Stop: +# Short-Description: Start distrubted key/value pair service +# Description: +# http://www.github.com/GoogleCloudPlatform/Kubernetes +### END INIT INFO + +export PATH=/sbin:/bin:/usr/sbin:/usr/bin:/usr/local/sbin:/usr/local/bin:/opt/bin: + +BASE=$(basename $0) + +# modify these in /etc/default/$BASE (/etc/default/kube-scheduler) +KUBE_SCHEDULER=/opt/bin/$BASE +# This is the pid file managed by kube-scheduler itself +KUBE_SCHEDULER_PIDFILE=/var/run/$BASE.pid +KUBE_SCHEDULER_LOGFILE=/var/log/$BASE.log +KUBE_SCHEDULER_OPTS="" +KUBE_SCHEDULER_DESC="Kube-Scheduler" + +# Get lsb functions +. /lib/lsb/init-functions + +if [ -f /etc/default/$BASE ]; then + . /etc/default/$BASE +fi + +# see also init_is_upstart in /lib/lsb/init-functions (which isn't available in Ubuntu 12.04, or we'd use it) +if [ -x /sbin/initctl ] && /sbin/initctl version 2>/dev/null | grep -q upstart; then + log_failure_msg "$KUBE_SCHEDULER_DESC is managed via upstart, try using service $BASE $1" + exit 1 +fi + +# Check kube-scheduler is present +if [ ! -x $KUBE_SCHEDULER ]; then + log_failure_msg "$KUBE_SCHEDULER not present or not executable" + exit 1 +fi + +fail_unless_root() { + if [ "$(id -u)" != '0' ]; then + log_failure_msg "$KUBE_SCHEDULER_DESC must be run as root" + exit 1 + fi +} + +KUBE_SCHEDULER_START="start-stop-daemon \ +--start \ +--background \ +--quiet \ +--exec $KUBE_SCHEDULER \ +--make-pidfile --pidfile $KUBE_SCHEDULER_PIDFILE \ +-- $KUBE_SCHEDULER_OPTS \ +>> $KUBE_SCHEDULER_LOGFILE 2>&1" + +KUBE_SCHEDULER_STOP="start-stop-daemon \ +--stop \ +--pidfile $KUBE_SCHEDULER_PIDFILE" + +case "$1" in + start) + fail_unless_root + log_begin_msg "Starting $KUBE_SCHEDULER_DESC: $BASE" + $KUBE_SCHEDULER_START + log_end_msg $? + ;; + + stop) + fail_unless_root + log_begin_msg "Stopping $KUBE_SCHEDULER_DESC: $BASE" + $KUBE_SCHEDULER_STOP + log_end_msg $? + ;; + + restart | force-reload) + fail_unless_root + log_begin_msg "Restarting $KUBE_SCHEDULER_DESC: $BASE" + $KUBE_SCHEDULER_STOP + $KUBE_SCHEDULER_START + log_end_msg $? + ;; + + status) + status_of_proc -p "$KUBE_SCHEDULER_PIDFILE" "$KUBE_SCHEDULER" "$KUBE_SCHEDULER_DESC" + ;; + + *) + echo "Usage: $0 {start|stop|restart|status}" + exit 1 + ;; +esac diff --git a/cluster/ubuntu/initd_scripts/kubelet b/cluster/ubuntu/initd_scripts/kubelet new file mode 100755 index 00000000000..c19c4d6c0c7 --- /dev/null +++ b/cluster/ubuntu/initd_scripts/kubelet @@ -0,0 +1,99 @@ +#!/bin/sh +set -e + +### BEGIN INIT INFO +# Provides: kubelet +# Required-Start: $etcd +# Required-Stop: +# Should-Start: +# Should-Stop: +# Default-Start: +# Default-Stop: +# Short-Description: Start distrubted key/value pair service +# Description: +# http://www.github.com/GoogleCloudPlatform/Kubernetes +### END INIT INFO + +export PATH=/sbin:/bin:/usr/sbin:/usr/bin:/usr/local/sbin:/usr/local/bin:/opt/bin: + +BASE=$(basename $0) + +# modify these in /etc/default/$BASE (/etc/default/kube-apiserver) +KUBELET=/opt/bin/$BASE +# This is the pid file managed by kube-apiserver itself +KUBELET_PIDFILE=/var/run/$BASE.pid +KUBELET_LOGFILE=/var/log/$BASE.log +KUBELET_OPTS="" +KUBELET_DESC="Kube-Apiserver" + +# Get lsb functions +. /lib/lsb/init-functions + +if [ -f /etc/default/$BASE ]; then + . /etc/default/$BASE +fi + +# see also init_is_upstart in /lib/lsb/init-functions (which isn't available in Ubuntu 12.04, or we'd use it) +if [ -x /sbin/initctl ] && /sbin/initctl version 2>/dev/null | grep -q upstart; then + log_failure_msg "$KUBELET_DESC is managed via upstart, try using service $BASE $1" + exit 1 +fi + +# Check kube-apiserver is present +if [ ! -x $KUBELET ]; then + log_failure_msg "$KUBELET not present or not executable" + exit 1 +fi + +fail_unless_root() { + if [ "$(id -u)" != '0' ]; then + log_failure_msg "$KUBELET_DESC must be run as root" + exit 1 + fi +} + +KUBELET_START="start-stop-daemon \ +--start \ +--background \ +--quiet \ +--exec $KUBELET \ +--make-pidfile --pidfile $KUBELET_PIDFILE \ +-- $KUBELET_OPTS \ +>> $KUBELET_LOGFILE 2>&1" + +KUBELET_STOP="start-stop-daemon \ +--stop \ +--pidfile $KUBELET_PIDFILE" + +case "$1" in + start) + fail_unless_root + log_begin_msg "Starting $KUBELET_DESC: $BASE" + $KUBELET_START + log_end_msg $? + ;; + + stop) + fail_unless_root + log_begin_msg "Stopping $KUBELET_DESC: $BASE" + $KUBELET_STOP + log_end_msg $? + ;; + + restart | force-reload) + fail_unless_root + log_begin_msg "Stopping $KUBELET_DESC: $BASE" + $KUBELET_STOP + $KUBELET_START + log_end_msg $? + ;; + + status) + status_of_proc -p "$KUBELET_PIDFILE" "$KUBELET" "$KUBELET_DESC" + ;; + + *) + echo "Usage: $0 {start|stop|restart|status}" + exit 1 + ;; +esac diff --git a/cluster/ubuntu/util.sh b/cluster/ubuntu/util.sh new file mode 100755 index 00000000000..61d27ba07ae --- /dev/null +++ b/cluster/ubuntu/util.sh @@ -0,0 +1,43 @@ +#!/bin/bash + +# Copyright 2014 Google Inc. All rights reserved. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +# attempt to warn user about kube and etcd binaries +PATH=$PATH:/opt/bin: + +if ! $(grep Ubuntu /etc/lsb-release > /dev/null 2>&1) +then + echo "warning: not detecting a ubuntu system" +fi + +if ! $(which etcd > /dev/null) +then + echo "warning: etcd binary is not found in the PATH: $PATH" +fi + +if ! $(which kube-apiserver > /dev/null) && ! $(which kubelet > /dev/null) +then + echo "warning: kube binaries are not found in the $PATH" +fi + +# copy /etc/init files +cp init_conf/* /etc/init/ + +# copy /etc/initd/ files +cp initd_scripts/* /etc/init.d/ + +# copy default configs +cp default_scripts/* /etc/default/ + diff --git a/docs/getting-started-guides/ubuntu_single_node.md b/docs/getting-started-guides/ubuntu_single_node.md new file mode 100644 index 00000000000..4c2f5bd9342 --- /dev/null +++ b/docs/getting-started-guides/ubuntu_single_node.md @@ -0,0 +1,50 @@ +## Getting started on Ubuntu + +This document describes how to get started to run kubernetes services on a single host (whihch is acting both as master and minion) for ubuntu systems. It consistes of three steps + +1. Make kubernetes and etcd binaries +2. Install upstart scripts +3. Customizing ubuntu launch + +### 1. Make kubernetes and etcd binaries +Either build or download the latest [kubernetest binaries] (https://github.com/GoogleCloudPlatform/kubernetes/blob/master/docs/getting-started-guides/binary_release.md) + +Copy the kube binaries into `/opt/bin` or a path of your choice + +Similarly pull an `etcd` binary from [etcd releases](https://github.com/coreos/etcd/releases) or build the `etcd` yourself using instructions at [https://github.com/coreos/etcd](https://github.com/coreos/etcd) + +Copy the `etcd` binary into `/opt/bin` or path of your choice + +### 2. Install upstart scripts +Running ubuntu/util.sh would install/copy the scripts for upstart to pick up. The script may warn you on some valid problems/conditions + +``` +$ cd kubernetes/cluster/ubuntu +$ sudo ./util.sh +``` + +After this the kubernetes and `etcd` services would be up and running. You can use `service start/stop/restart/force-reload` on the services. + +Luanching and scheduling containers using kubecfg can also be used at this point, as explained mentioned in the [examples](https://github.com/GoogleCloudPlatform/kubernetes/tree/master/examples/guestbook) + +### 3. Customizing the ubuntu launch +To customize the defaults you will need to tweak `/etc/default/kube*` files and restart the appropriate services. This is needed if the binaries are copied in a place other than `/opt/bin`. A run could look like + +``` +$ sudo cat /etc/default/etcd +# Etcd Upstart and SysVinit configuration file + +# Customize etcd location +# ETCD="/opt/bin/etcd" + +# Use ETCD_OPTS to modify the start/restart options +ETCD_OPTS="-listen-client-urls=http://127.0.0.1:4001" + +# Add more envionrment settings used by etcd here + +$ sudo service etcd status +etcd start/running, process 834 +$ sudo service etcd restart +etcd stop/waiting +etcd start/running, process 29050 +```