diff --git a/roles/kubernetes/node/templates/deb-kubelet.initd.j2 b/roles/kubernetes/node/templates/deb-kubelet.initd.j2 index 647500979..4f823ca76 100644 --- a/roles/kubernetes/node/templates/deb-kubelet.initd.j2 +++ b/roles/kubernetes/node/templates/deb-kubelet.initd.j2 @@ -39,13 +39,6 @@ DAEMON_USER=root # do_start() { - # Avoid a potential race at boot time when both monit and init.d start - # the same service - PIDS=$(pidof $DAEMON) - for PID in ${PIDS}; do - kill -9 $PID - done - # Return # 0 if daemon has been started # 1 if daemon was already running diff --git a/roles/kubernetes/node/templates/rh-kubelet.initd.j2 b/roles/kubernetes/node/templates/rh-kubelet.initd.j2 index 8b7b9e775..2394b515d 100644 --- a/roles/kubernetes/node/templates/rh-kubelet.initd.j2 +++ b/roles/kubernetes/node/templates/rh-kubelet.initd.j2 @@ -1,4 +1,4 @@ -#!/bin/sh +#!/bin/bash # # /etc/rc.d/init.d/kubelet # @@ -22,22 +22,13 @@ . /etc/rc.d/init.d/functions prog="kubelet" -exec="{{ bin_dir }}/$prog" +exec="/usr/local/bin/$prog" pidfile="/var/run/$prog.pid" lockfile="/var/lock/subsys/$prog" logfile="/var/log/$prog" [ -e /etc/kubernetes/$prog ] && . /etc/kubernetes/$prog -prestart() { - service cgconfig status > /dev/null - - if [[ $? != 0 ]]; then - service cgconfig start - fi - -} - start() { if [ ! -x $exec ]; then if [ ! -e $exec ]; then @@ -51,11 +42,11 @@ start() { check_for_cleanup if ! [ -f $pidfile ]; then - prestart printf "Starting $prog:\t" echo "\n$(date)\n" >> $logfile $exec $DAEMON_ARGS &>> $logfile & pid=$! + echo $pid >> $pidfile touch $lockfile success echo diff --git a/roles/network_plugin/tasks/calico.yml b/roles/network_plugin/tasks/calico.yml index 2cf3e2b2c..95803daf2 100644 --- a/roles/network_plugin/tasks/calico.yml +++ b/roles/network_plugin/tasks/calico.yml @@ -44,30 +44,24 @@ run_once: true delegate_to: "{{ groups['etcd'][0] }}" +- name: Calico | Write calico-node configuration + template: src=calico/calico.conf.j2 dest=/usr/libexec/kubernetes/kubelet-plugins/net/exec/calico/calico_kubernetes.ini + notify: restart calico-node + - name: Calico | Write calico-node systemd init file template: src=calico/calico-node.service.j2 dest=/etc/systemd/system/calico-node.service - register: newservice - notify: - - reload systemd - - restart calico-node + when: init_system == "systemd" + notify: restart calico-node -- name: Calico | daemon-reload - command: systemctl daemon-reload - when: newservice|changed - changed_when: False +- name: Calico | Write calico-node initd script + template: src=calico/deb-calico.initd.j2 dest=/etc/init.d/calico-node owner=root mode=755 + when: init_system == "sysvinit" and ansible_os_family == "Debian" + notify: restart calico-node + +- name: Calico | Write calico-node initd script + template: src=calico/rh-calico.initd.j2 dest=/etc/init.d/calico-node owner=root mode=755 + when: init_system == "sysvinit" and ansible_os_family == "RedHat" + notify: restart calico-node - name: Calico | Enable calico-node service: name=calico-node enabled=yes state=started - -- name: Calico | Disable node mesh - shell: calicoctl bgp node-mesh off - environment: - ETCD_AUTHORITY: "{{ groups['etcd'][0] }}:2379" - when: peer_with_router|default(false) and inventory_hostname in groups['kube-node'] - -- name: Calico | Configure peering with router(s) - shell: calicoctl node bgp peer add {{ item.router_id }} as {{ item.as }} - environment: - ETCD_AUTHORITY: "{{ groups['etcd'][0] }}:2379" - with_items: peers - when: peer_with_router|default(false) and inventory_hostname in groups['kube-node'] diff --git a/roles/network_plugin/templates/calico/deb-calico.initd.j2 b/roles/network_plugin/templates/calico/deb-calico.initd.j2 new file mode 100644 index 000000000..a71e03cfc --- /dev/null +++ b/roles/network_plugin/templates/calico/deb-calico.initd.j2 @@ -0,0 +1,114 @@ +#!/bin/bash +# +### BEGIN INIT INFO +# Provides: calico-node +# Required-Start: $local_fs $network $syslog +# Required-Stop: +# Default-Start: 2 3 4 5 +# Default-Stop: 0 1 6 +# Short-Description: Calico docker container +# Description: +# Runs calico as a docker container +### END INIT INFO + +PATH=/sbin:/usr/sbin:/bin:/usr/bin +DESC="Calico-node Docker" +NAME=calico-node +DAEMON=/usr/local/bin/calicoctl +DAEMON_ARGS="" +DOCKER=$(which docker) +SCRIPTNAME=/etc/init.d/$NAME +DAEMON_USER=root + +# Exit if the binary is not present +[ -x "$DAEMON" ] || exit 0 + +# Exit if the docker package is not installed +[ -x "$DOCKER" ] || exit 0 + +# Read configuration variable file if it is present +[ -r /etc/network-environment ] && . /etc/network-environment + +# Define LSB log_* functions. +# Depend on lsb-base (>= 3.2-14) to ensure that this file is present +# and status_of_proc is working. +. /lib/lsb/init-functions + +do_status() +{ + if [ $($DOCKER ps | awk '{ print $2 }' | grep calico/node | wc -l) -eq 1 ]; then + return 0 + else + return 1 + fi +} + +# Function that starts the daemon/service +# +do_start() +{ + do_status + retval=$? + if [ $retval -ne 0 ]; then + ${DAEMON} node --ip=${DEFAULT_IPV4} >>/dev/null && return 0 || return 2 + else + return 1 + fi +} + +# +# Function that stops the daemon/service +# +do_stop() +{ + ${DAEMON} node stop >> /dev/null || ${DAEMON} node stop --force >> /dev/null +} + + +case "$1" in + start) + log_daemon_msg "Starting $DESC" "$NAME" + do_start + case "$?" in + 0|1) log_end_msg 0 || exit 0 ;; + 2) log_end_msg 1 || exit 1 ;; + esac + ;; + stop) + log_daemon_msg "Stopping $DESC" "$NAME" + if do_stop; then + log_end_msg 0 + else + log_failure_msg "Can't stop calico-node" + log_end_msg 1 + fi + ;; + status) + if do_status; then + log_end_msg 0 + else + log_failure_msg "Calico-node is not running" + log_end_msg 1 + fi + ;; + + restart|force-reload) + log_daemon_msg "Restarting $DESC" "$NAME" + if do_stop; then + if do_start; then + log_end_msg 0 + exit 0 + else + rc="$?" + fi + else + rc="$?" + fi + log_failure_msg "Can't restart Calico-node" + log_end_msg ${rc} + ;; + *) + echo "Usage: $SCRIPTNAME {start|stop|status|restart|force-reload}" >&2 + exit 3 + ;; +esac diff --git a/roles/network_plugin/templates/calico/rh-calico.initd.j2 b/roles/network_plugin/templates/calico/rh-calico.initd.j2 new file mode 100644 index 000000000..5aa1ee9fa --- /dev/null +++ b/roles/network_plugin/templates/calico/rh-calico.initd.j2 @@ -0,0 +1,130 @@ +#!/bin/bash +# +# /etc/rc.d/init.d/calico-node +# +# chkconfig: 2345 95 95 +# description: Daemon for calico-node (http://www.projectcalico.org/) + +### BEGIN INIT INFO +# Provides: calico-node +# Required-Start: $local_fs $network $syslog cgconfig +# Required-Stop: +# Should-Start: +# Should-Stop: +# Default-Start: 2 3 4 5 +# Default-Stop: 0 1 6 +# Short-Description: start and stop calico-node +# Description: +# Manage calico-docker container +### END INIT INFO + +# Source function library. +. /etc/rc.d/init.d/functions + +prog="calicoctl" +exec="/usr/local/bin/$prog" +dockerexec="$(which docker)" +logfile="/var/log/$prog" + +[ -e /etc/network-environment ] && for i in $(cat /etc/network-environment | egrep '(^$|^#)'); do export $i; done + +do_status() +{ + if [ $($dockerexec ps | awk '{ print $2 }' | grep calico/node | wc -l) -ne 1 ]; then + return 1 + fi +} + +do_start() { + if [ ! -x $exec ]; then + if [ ! -e $exec ]; then + echo "calico-node executable $exec not found" + else + echo "You do not have permission to execute the calico-node executable $exec" + fi + exit 5 + fi + + [ -x "$dockerexec" ] || exit 0 + + do_status + retval=$? + if [ $retval -ne 0 ]; then + printf "Starting $prog:\t" + echo "\n$(date)\n" >> $logfile + $exec node --ip=${DEFAULT_IPV4} &>>$logfile + success + echo + else + echo -n "calico-node's already running" + success + exit 0 + fi +} + +do_stop() { + echo -n $"Stopping $prog: " + $exec node stop >> /dev/null || $exec node stop --force >> /dev/null + retval=$? + echo + return $retval +} + +restart() { + do_stop + do_start +} + +reload() { + restart +} + +force_reload() { + restart +} + +case "$1" in + start) + do_start + case "$?" in + 0|1) success || exit 0 ;; + 2) failure || exit 1 ;; + esac + ;; + stop) + echo -n "Stopping $DESC" "$NAME" + if do_stop; then + success + echo + else + echo -n "Can't stop calico-node" + failure + echo + fi + ;; + restart) + $1 + ;; + reload) + $1 + ;; + force-reload) + force_reload + ;; + status) + if do_status; then + echo -n "Calico-node is running" + success + echo + else + echo -n "Calico-node is not running" + failure + echo + fi + ;; + *) + echo $"Usage: $0 {start|stop|status|restart|reload|force-reload}" + exit 2 +esac + +exit $?