mirror of
https://github.com/k3s-io/k3s.git
synced 2026-06-09 08:55:19 -04:00
feat: add support for runit as a process supervisor
Signed-off-by: John Martin <john.itvn@gmail.com>
This commit is contained in:
parent
c0b1314d15
commit
21de005bc4
1 changed files with 102 additions and 6 deletions
108
install.sh
108
install.sh
|
|
@ -115,7 +115,7 @@ fatal()
|
|||
exit 1
|
||||
}
|
||||
|
||||
# --- fatal if no systemd or openrc ---
|
||||
# --- fatal if no systemd, openrc, or runit ---
|
||||
verify_system() {
|
||||
if [ -x /sbin/openrc-run ]; then
|
||||
HAS_OPENRC=true
|
||||
|
|
@ -125,7 +125,11 @@ verify_system() {
|
|||
HAS_SYSTEMD=true
|
||||
return
|
||||
fi
|
||||
fatal 'Can not find systemd or openrc to use as a process supervisor for k3s'
|
||||
if [ -d /etc/sv ] || [ -d /etc/runit/sv ] || type sv > /dev/null 2>&1; then
|
||||
HAS_RUNIT=true
|
||||
return
|
||||
fi
|
||||
fatal 'Can not find systemd, openrc, or runit to use as a process supervisor for k3s'
|
||||
}
|
||||
|
||||
# --- add quotes to command arguments ---
|
||||
|
|
@ -250,7 +254,7 @@ setup_env() {
|
|||
UNINSTALL_K3S_SH=${UNINSTALL_K3S_SH:-${BIN_DIR}/${SYSTEM_NAME}-uninstall.sh}
|
||||
KILLALL_K3S_SH=${KILLALL_K3S_SH:-${BIN_DIR}/k3s-killall.sh}
|
||||
|
||||
# --- use service or environment location depending on systemd/openrc ---
|
||||
# --- use service or environment location depending on systemd/openrc/runit ---
|
||||
if [ "${HAS_SYSTEMD}" = true ]; then
|
||||
FILE_K3S_SERVICE=${SYSTEMD_DIR}/${SERVICE_K3S}
|
||||
FILE_K3S_ENV=${SYSTEMD_DIR}/${SERVICE_K3S}.env
|
||||
|
|
@ -258,6 +262,16 @@ setup_env() {
|
|||
$SUDO mkdir -p /etc/rancher/k3s
|
||||
FILE_K3S_SERVICE=/etc/init.d/${SYSTEM_NAME}
|
||||
FILE_K3S_ENV=/etc/rancher/k3s/${SYSTEM_NAME}.env
|
||||
elif [ "${HAS_RUNIT}" = true ]; then
|
||||
$SUDO mkdir -p /etc/rancher/k3s
|
||||
# Determine runit service directory
|
||||
if [ -d /etc/runit/sv ]; then
|
||||
RUNIT_SERVICE_DIR=/etc/runit/sv
|
||||
else
|
||||
RUNIT_SERVICE_DIR=/etc/sv
|
||||
fi
|
||||
FILE_K3S_SERVICE=${RUNIT_SERVICE_DIR}/${SYSTEM_NAME}/run
|
||||
FILE_K3S_ENV=/etc/rancher/k3s/${SYSTEM_NAME}.env
|
||||
fi
|
||||
|
||||
# --- get hash of config & exec for currently installed k3s ---
|
||||
|
|
@ -794,6 +808,10 @@ for service in /etc/init.d/k3s*; do
|
|||
[ -x $service ] && $service stop
|
||||
done
|
||||
|
||||
for service in /etc/sv/k3s* /etc/runit/sv/k3s*; do
|
||||
[ -d $service ] && sv stop $(basename $service) 2>/dev/null || true
|
||||
done
|
||||
|
||||
pschildren() {
|
||||
ps -e -o ppid= -o pid= | \
|
||||
sed -e 's/^\s*//g; s/\s\s*/\t/g;' | \
|
||||
|
|
@ -892,6 +910,12 @@ fi
|
|||
if command -v rc-update; then
|
||||
rc-update delete ${SYSTEM_NAME} default
|
||||
fi
|
||||
if command -v sv; then
|
||||
sv stop ${SYSTEM_NAME} 2>/dev/null || true
|
||||
rm -rf /var/service/${SYSTEM_NAME}
|
||||
rm -rf /etc/sv/${SYSTEM_NAME}
|
||||
rm -rf /etc/runit/sv/${SYSTEM_NAME}
|
||||
fi
|
||||
|
||||
rm -f ${FILE_K3S_SERVICE}
|
||||
rm -f ${FILE_K3S_ENV}
|
||||
|
|
@ -901,7 +925,7 @@ remove_uninstall() {
|
|||
}
|
||||
trap remove_uninstall EXIT
|
||||
|
||||
if (ls ${SYSTEMD_DIR}/k3s*.service || ls /etc/init.d/k3s*) >/dev/null 2>&1; then
|
||||
if (ls ${SYSTEMD_DIR}/k3s*.service || ls /etc/init.d/k3s* || ls /etc/sv/k3s*/run || ls /etc/runit/sv/k3s*/run) >/dev/null 2>&1; then
|
||||
set +x; echo 'Additional k3s services installed, skipping uninstall of k3s'; set -x
|
||||
exit
|
||||
fi
|
||||
|
|
@ -1014,9 +1038,12 @@ EOF
|
|||
|
||||
# --- write openrc service file ---
|
||||
create_openrc_service_file() {
|
||||
LOG_FILE=/var/log/${SYSTEM_NAME}.log
|
||||
LOG_DIR=/var/log/${SYSTEM_NAME}
|
||||
LOG_FILE=${LOG_DIR}/${SYSTEM_NAME}.log
|
||||
|
||||
info "openrc: Creating service file ${FILE_K3S_SERVICE}"
|
||||
$SUDO mkdir -p ${LOG_DIR}
|
||||
$SUDO chmod 0755 ${LOG_DIR}
|
||||
$SUDO tee ${FILE_K3S_SERVICE} >/dev/null << EOF
|
||||
#!/sbin/openrc-run
|
||||
|
||||
|
|
@ -1049,8 +1076,54 @@ set +o allexport
|
|||
EOF
|
||||
$SUDO chmod 0755 ${FILE_K3S_SERVICE}
|
||||
|
||||
$SUDO mkdir -p /etc/logrotate.d
|
||||
$SUDO tee /etc/logrotate.d/${SYSTEM_NAME} >/dev/null << EOF
|
||||
${LOG_FILE} {
|
||||
missingok
|
||||
notifempty
|
||||
copytruncate
|
||||
}
|
||||
EOF
|
||||
}
|
||||
|
||||
# --- write runit service file ---
|
||||
create_runit_service_file() {
|
||||
LOG_DIR=/var/log/${SYSTEM_NAME}
|
||||
LOG_FILE=${LOG_DIR}/${SYSTEM_NAME}.log
|
||||
|
||||
info "runit: Creating service directory ${RUNIT_SERVICE_DIR}/${SYSTEM_NAME}"
|
||||
$SUDO mkdir -p ${RUNIT_SERVICE_DIR}/${SYSTEM_NAME}/log
|
||||
|
||||
info "runit: Creating run script ${FILE_K3S_SERVICE}"
|
||||
$SUDO tee ${FILE_K3S_SERVICE} >/dev/null << EOF
|
||||
#!/bin/sh
|
||||
exec 2>&1
|
||||
|
||||
[ -f /etc/environment ] && . /etc/environment
|
||||
[ -f ${FILE_K3S_ENV} ] && . ${FILE_K3S_ENV}
|
||||
|
||||
export PATH="/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin"
|
||||
|
||||
# Load kernel modules
|
||||
$SUDO modprobe br_netfilter 2>/dev/null || true
|
||||
$SUDO modprobe overlay 2>/dev/null || true
|
||||
|
||||
exec ${BIN_DIR}/k3s $(escape_dq "${CMD_K3S_EXEC}")
|
||||
EOF
|
||||
$SUDO chmod 0755 ${FILE_K3S_SERVICE}
|
||||
|
||||
info "runit: Creating log run script"
|
||||
$SUDO tee ${RUNIT_SERVICE_DIR}/${SYSTEM_NAME}/log/run >/dev/null << EOF
|
||||
#!/bin/sh
|
||||
exec svlogd -tt ${LOG_DIR}
|
||||
EOF
|
||||
$SUDO chmod 0755 ${RUNIT_SERVICE_DIR}/${SYSTEM_NAME}/log/run
|
||||
$SUDO mkdir -p ${LOG_DIR}
|
||||
$SUDO chmod 0755 ${LOG_DIR}
|
||||
|
||||
$SUDO mkdir -p /etc/logrotate.d
|
||||
$SUDO tee /etc/logrotate.d/${SYSTEM_NAME} >/dev/null << EOF
|
||||
${LOG_DIR}/* {
|
||||
missingok
|
||||
notifempty
|
||||
copytruncate
|
||||
|
|
@ -1058,10 +1131,11 @@ ${LOG_FILE} {
|
|||
EOF
|
||||
}
|
||||
|
||||
# --- write systemd or openrc service file ---
|
||||
# --- write systemd, openrc, or runit service file ---
|
||||
create_service_file() {
|
||||
[ "${HAS_SYSTEMD}" = true ] && create_systemd_service_file && restore_systemd_service_file_context
|
||||
[ "${HAS_OPENRC}" = true ] && create_openrc_service_file
|
||||
[ "${HAS_RUNIT}" = true ] && create_runit_service_file
|
||||
return 0
|
||||
}
|
||||
|
||||
|
|
@ -1098,6 +1172,26 @@ openrc_start() {
|
|||
$SUDO ${FILE_K3S_SERVICE} restart
|
||||
}
|
||||
|
||||
# --- enable and start runit service ---
|
||||
runit_enable() {
|
||||
info "runit: Enabling ${SYSTEM_NAME} service"
|
||||
# Create symlink to enable the service
|
||||
if [ -d /var/service ]; then
|
||||
$SUDO ln -sf ${RUNIT_SERVICE_DIR}/${SYSTEM_NAME} /var/service/${SYSTEM_NAME}
|
||||
elif [ -d /service ]; then
|
||||
$SUDO ln -sf ${RUNIT_SERVICE_DIR}/${SYSTEM_NAME} /service/${SYSTEM_NAME}
|
||||
elif [ -d /etc/runit/runsvdir/default ]; then
|
||||
$SUDO ln -sf ${RUNIT_SERVICE_DIR}/${SYSTEM_NAME} /etc/runit/runsvdir/default/${SYSTEM_NAME}
|
||||
fi
|
||||
}
|
||||
|
||||
runit_start() {
|
||||
info "runit: Starting ${SYSTEM_NAME}"
|
||||
# Wait for runsv to pick up the service
|
||||
sleep 2
|
||||
$SUDO sv restart ${SYSTEM_NAME} 2>/dev/null || $SUDO sv start ${SYSTEM_NAME}
|
||||
}
|
||||
|
||||
has_working_xtables() {
|
||||
if $SUDO sh -c "command -v \"$1-save\"" 1> /dev/null && $SUDO sh -c "command -v \"$1-restore\"" 1> /dev/null; then
|
||||
if $SUDO $1-save 2>/dev/null | grep -q '^-A CNI-HOSTPORT-MASQ -j MASQUERADE$'; then
|
||||
|
|
@ -1121,6 +1215,7 @@ service_enable_and_start() {
|
|||
|
||||
[ "${HAS_SYSTEMD}" = true ] && systemd_enable
|
||||
[ "${HAS_OPENRC}" = true ] && openrc_enable
|
||||
[ "${HAS_RUNIT}" = true ] && runit_enable
|
||||
|
||||
[ "${INSTALL_K3S_SKIP_START}" = true ] && return
|
||||
|
||||
|
|
@ -1138,6 +1233,7 @@ service_enable_and_start() {
|
|||
|
||||
[ "${HAS_SYSTEMD}" = true ] && systemd_start
|
||||
[ "${HAS_OPENRC}" = true ] && openrc_start
|
||||
[ "${HAS_RUNIT}" = true ] && runit_start
|
||||
return 0
|
||||
}
|
||||
|
||||
|
|
|
|||
Loading…
Reference in a new issue