slackbuilds/system/k3s/config/rc.k3s

140 lines
3.7 KiB
Bash

#!/usr/bin/env bash
### BEGIN INIT INFO
# Provides: k3s
# Required-Start: $network $remote_fs $syslog
# Required-Stop: $network $remote_fs $syslog
# Default-Start: 2 3 4 5
# Default-Stop: 0 1 6
# Short-Description: Lightweight Kubernetes Distribution
### END INIT INFO
PATH=/sbin:/bin:/usr/sbin:/usr/bin:/usr/local/sbin:/usr/local/bin
BASE=k3s
DAEMON_DIR=/usr/bin
DAEMON="$BASE server"
PID=/var/run/$BASE.pid
SOCK=/run/k3s/containerd/containerd.sock
ENVFILE=/etc/rancher/$BASE/$BASE.service.env
# Load environment variables
[ -r $ENVFILE ] && . $ENVFILE
do_start() {
# Load kernel modules
/sbin/modprobe br_netfilter || true
/sbin/modprobe overlay || true
$DAEMON_DIR/$DAEMON > /dev/null 2>&1 &
pidof "$DAEMON" > $PID
sleep 7
if [ -f $PID ]; then
echo "$BASE has started."
else
echo "$BASE failed to start. Please restart the daemon."
fi
}
do_stop() {
if [ -f $PID ]; then
echo "Stopping $BASE.."
kill $(ps aux | grep "$SOCK" | awk '{print $2}') \
$(cat $PID) > /dev/null 2>&1
sleep 2
ip link delete flannel.1 > /dev/null 2>&1
rm -f $PID
echo "$BASE has stopped."
else
killall "$DAEMON" > /dev/null 2>&1 || echo "$BASE is not running."
fi
}
do_restart() {
do_stop > /dev/null
do_start > /dev/null
echo "$BASE has restarted."
}
do_stat() {
if [ -s $PID ]; then
echo "$BASE is running: $(cat $PID)"
else
echo "$BASE is not running."
fi
}
case "$1" in
start)
echo "Starting $BASE.."
do_start
;;
stop)
do_stop
;;
killall)
# This option is merged from killall script, good idea to have it here!
echo "Stopping $BASE and cleaning up resources.."
if [ ! -f $PID ]; then
do_start > /dev/null
fi
sleep 5
pschildren() {
ps -e -o ppid= -o pid= | \
sed -e 's/^\s*//g; s/\s\s*/\t/g;' | \
grep -w "^$1" | \
cut -f2
}
pstree() {
for pid in $@; do
echo $pid
for child in $(pschildren $pid); do
pstree $child
done
done
}
killtree() {
kill -9 $(
{ set +x; } 2>/dev/null;
pstree $@;
set -x;
) 2>/dev/null
}
getshims() {
ps -e -o pid= -o args= | sed -e 's/^ *//; s/\s\s*/\t/;' | grep -w 'k3s/data/[^/]*/bin/containerd-shim' | cut -f1
}
killtree $({ set +x; } 2>/dev/null; getshims; set -x)
do_unmount_and_remove() {
awk -v path="$1" '$2 ~ ("^" path) { print $2 }' /proc/self/mounts | sort -r | xargs -r -t -n 1 sh -c 'umount "$0" && rm -rf "$0"'
}
sleep 2
do_unmount_and_remove '/run/k3s'
do_unmount_and_remove '/var/lib/rancher/k3s'
do_unmount_and_remove '/var/lib/kubelet/pods'
do_unmount_and_remove '/run/netns/cni-'
ip netns show 2>/dev/null | grep cni- | xargs -r -t -n 1 ip netns delete
ip link show 2>/dev/null | grep 'master cni0' | while read ignore iface ignore; do
iface=${iface%%@*}
[ -z "$iface" ] || ip link delete $iface
done
ip link delete cni0
ip link delete flannel.1
rm -rf /var/lib/cni/
iptables-save | grep -v 'KUBE-\|CNI-' | iptables-restore
do_stop > /dev/null
echo "Done."
;;
status)
do_stat
;;
restart)
echo "Restarting $BASE.."
do_restart
;;
*)
echo "Usage: $0 {start|stop|killall|status|restart}" >&2
exit 1
;;
esac