mirror of
https://github.com/kairos-io/provider-rke2.git
synced 2025-09-23 19:07:17 +00:00
Merge pull request #62 from kairos-io/rke2-reset
PE-4727: Add uninstall scripts for rke2
This commit is contained in:
141
scripts/rke2-killall.sh
Executable file
141
scripts/rke2-killall.sh
Executable file
@@ -0,0 +1,141 @@
|
||||
#!/bin/sh
|
||||
|
||||
# Ensure the script is run as root
|
||||
if [ ! $(id -u) -eq 0 ]; then
|
||||
echo "$(basename "${0}"): must be run as root" >&2
|
||||
exit 1
|
||||
fi
|
||||
|
||||
# Function to find child processes of a given parent process
|
||||
pschildren() {
|
||||
ps -e -o ppid= -o pid= | \
|
||||
sed -e 's/^\s*//g; s/\s\s*/\t/g;' | \
|
||||
grep -w "^$1" | \
|
||||
cut -f2
|
||||
}
|
||||
|
||||
# Function to recursively build a process tree starting from a given process
|
||||
pstree() {
|
||||
for pid in "$@"; do
|
||||
echo ${pid}
|
||||
for child in $(pschildren ${pid}); do
|
||||
pstree ${child}
|
||||
done
|
||||
done
|
||||
}
|
||||
|
||||
# Function to kill all processes in a tree starting from a given parent process
|
||||
killtree() {
|
||||
kill -9 $(
|
||||
{ set +x; } 2>/dev/null;
|
||||
pstree "$@";
|
||||
set -x;
|
||||
) 2>/dev/null
|
||||
}
|
||||
|
||||
# Function to find containerd-shim processes related to RKE2
|
||||
getshims() {
|
||||
COLUMNS=2147483647 ps -e -o pid= -o args= | sed -e 's/^ *//; s/\s\s*/\t/;' | grep -w "${RKE2_DATA_DIR}"'/data/[^/]*/bin/containerd-shim' | cut -f1
|
||||
}
|
||||
|
||||
# Function to unmount and remove directories
|
||||
do_unmount_and_remove() {
|
||||
{ set +x; } 2>/dev/null
|
||||
MOUNTS=
|
||||
while read ignore mount ignore; do
|
||||
MOUNTS="${mount}\n${MOUNTS}"
|
||||
done </proc/self/mounts
|
||||
MOUNTS=$(printf ${MOUNTS} | grep "^$1" | sort -r)
|
||||
if [ -n "${MOUNTS}" ]; then
|
||||
set -x
|
||||
umount ${MOUNTS}
|
||||
rm -rf --one-file-system ${MOUNTS}
|
||||
else
|
||||
set -x
|
||||
fi
|
||||
}
|
||||
|
||||
# Load custom environment variables from /etc/spectro/environment if it exists
|
||||
if [ -f /etc/spectro/environment ]; then
|
||||
. /etc/spectro/environment
|
||||
fi
|
||||
|
||||
# Ensure STYLUS_ROOT does not have a trailing slash
|
||||
STYLUS_ROOT="${STYLUS_ROOT%/}"
|
||||
|
||||
# Determine the base paths, use default if STYLUS_ROOT is not set
|
||||
RKE2_DATA_DIR=${STYLUS_ROOT}/var/lib/rancher/rke2
|
||||
RUN_DIR=/run/k3s
|
||||
KUBELET_PODS_DIR=${STYLUS_ROOT}/var/lib/kubelet/pods
|
||||
NETNS_CNI_DIR=/run/netns/cni-
|
||||
CNI_DIR=${STYLUS_ROOT}/var/lib/cni/
|
||||
|
||||
export PATH=$PATH:${RKE2_DATA_DIR}/bin
|
||||
|
||||
set -x
|
||||
|
||||
# Stop RKE2 services
|
||||
systemctl stop rke2-server.service || true
|
||||
systemctl stop rke2-agent.service || true
|
||||
|
||||
# Kill all relevant processes
|
||||
killtree $({ set +x; } 2>/dev/null; getshims; set -x)
|
||||
|
||||
# Unmount and remove directories
|
||||
do_unmount_and_remove "${RUN_DIR}"
|
||||
do_unmount_and_remove "${KUBELET_PODS_DIR}"
|
||||
do_unmount_and_remove "${NETNS_CNI_DIR}"
|
||||
|
||||
# Delete network interface(s) that match 'master cni0'
|
||||
ip link show 2>/dev/null | grep 'master cni0' | while read ignore iface ignore; do
|
||||
iface=${iface%%@*}
|
||||
[ -z "$iface" ] || ip link delete $iface
|
||||
done
|
||||
|
||||
# Delete additional network interfaces
|
||||
ip link delete cni0
|
||||
ip link delete flannel.1
|
||||
ip link delete flannel.4096
|
||||
ip link delete flannel-v6.1
|
||||
ip link delete flannel-v6.4096
|
||||
ip link delete flannel-wg
|
||||
ip link delete flannel-wg-v6
|
||||
ip link delete vxlan.calico
|
||||
ip link delete vxlan-v6.calico
|
||||
ip link delete cilium_vxlan
|
||||
ip link delete cilium_net
|
||||
ip link delete cilium_wg0
|
||||
ip link delete kube-ipvs0
|
||||
|
||||
# Delete nodeLocalDNS objects
|
||||
if [ -d /sys/class/net/nodelocaldns ]; then
|
||||
for i in $(ip address show nodelocaldns | grep inet | awk '{print $2}'); do
|
||||
iptables-save | grep -v $i | iptables-restore
|
||||
done
|
||||
ip link delete nodelocaldns || true
|
||||
fi
|
||||
|
||||
# Remove directories related to CNI and pod logs
|
||||
rm -rf ${CNI_DIR} ${STYLUS_ROOT}/var/log/pods/ ${STYLUS_ROOT}/var/log/containers
|
||||
|
||||
# Remove pod manifest files for RKE2 components
|
||||
POD_MANIFESTS_DIR=${RKE2_DATA_DIR}/agent/pod-manifests
|
||||
|
||||
rm -f "${POD_MANIFESTS_DIR}/etcd.yaml" \
|
||||
"${POD_MANIFESTS_DIR}/kube-apiserver.yaml" \
|
||||
"${POD_MANIFESTS_DIR}/kube-controller-manager.yaml" \
|
||||
"${POD_MANIFESTS_DIR}/cloud-controller-manager.yaml" \
|
||||
"${POD_MANIFESTS_DIR}/kube-scheduler.yaml" \
|
||||
"${POD_MANIFESTS_DIR}/kube-proxy.yaml"
|
||||
|
||||
# Cleanup iptables created by CNI plugins or Kubernetes (kube-proxy)
|
||||
iptables-save | grep -v KUBE- | grep -v CNI- | grep -v cali- | grep -v cali: | grep -v CILIUM_ | grep -v flannel | iptables-restore
|
||||
ip6tables-save | grep -v KUBE- | grep -v CNI- | grep -v cali- | grep -v cali: | grep -v CILIUM_ | grep -v flannel | ip6tables-restore
|
||||
|
||||
set +x
|
||||
|
||||
# Provide a message for additional iptables cleanup if needed
|
||||
echo 'If this cluster was upgraded from an older release of the Canal CNI, you may need to manually remove some flannel iptables rules:'
|
||||
echo -e '\texport cluster_cidr=YOUR-CLUSTER-CIDR'
|
||||
echo -e '\tiptables -D POSTROUTING -s $cluster_cidr -j MASQUERADE --random-fully'
|
||||
echo -e '\tiptables -D POSTROUTING ! -s $cluster_cidr -d -j MASQUERADE --random-fully'
|
135
scripts/rke2-uninstall.sh
Executable file
135
scripts/rke2-uninstall.sh
Executable file
@@ -0,0 +1,135 @@
|
||||
#!/bin/sh
|
||||
set -ex
|
||||
|
||||
# Ensure the script is run as root
|
||||
if [ ! $(id -u) -eq 0 ]; then
|
||||
echo "$(basename "${0}"): must be run as root" >&2
|
||||
exit 1
|
||||
fi
|
||||
|
||||
# Load custom environment variables from /etc/spectro/environment if it exists
|
||||
if [ -f /etc/spectro/environment ]; then
|
||||
. /etc/spectro/environment
|
||||
fi
|
||||
|
||||
# Ensure STYLUS_ROOT does not have a trailing slash
|
||||
STYLUS_ROOT="${STYLUS_ROOT%/}"
|
||||
|
||||
# Set RKE2_DATA_DIR, defaulting to /var/lib/rancher/rke2 if STYLUS_ROOT is not set
|
||||
RKE2_DATA_DIR=${STYLUS_ROOT}/var/lib/rancher/rke2
|
||||
|
||||
# Function to check if the target directory is a mountpoint
|
||||
check_target_mountpoint() {
|
||||
mountpoint -q "$1"
|
||||
}
|
||||
|
||||
# Function to check if the target directory is read-only
|
||||
check_target_ro() {
|
||||
touch "$1"/.rke2-ro-test && rm -rf "$1"/.rke2-ro-test
|
||||
test $? -ne 0
|
||||
}
|
||||
|
||||
# OS check and INSTALL_RKE2_ROOT setup
|
||||
. /etc/os-release
|
||||
if [ -r /etc/redhat-release ] || [ -r /etc/centos-release ] || [ -r /etc/oracle-release ] || [ -r /etc/amazon-linux-release ]; then
|
||||
# If redhat/oracle family OS is detected, check whether RKE2 was installed via yum or tar.
|
||||
if rpm -q rke2-common >/dev/null 2>&1; then
|
||||
INSTALL_RKE2_ROOT=${STYLUS_ROOT}/usr
|
||||
else
|
||||
INSTALL_RKE2_ROOT=${STYLUS_ROOT}/usr/local
|
||||
fi
|
||||
# Check if the OS is SUSE
|
||||
elif [ "${ID_LIKE%%[ ]*}" = "suse" ]; then
|
||||
if rpm -q rke2-common >/dev/null 2>&1; then
|
||||
INSTALL_RKE2_ROOT=${STYLUS_ROOT}/usr
|
||||
if [ -x /usr/sbin/transactional-update ]; then
|
||||
transactional_update="transactional-update -c --no-selfupdate -d run"
|
||||
fi
|
||||
elif check_target_mountpoint "${STYLUS_ROOT}/usr/local" || check_target_ro "${STYLUS_ROOT}/usr/local"; then
|
||||
INSTALL_RKE2_ROOT=${STYLUS_ROOT}/opt/rke2
|
||||
else
|
||||
INSTALL_RKE2_ROOT=${STYLUS_ROOT}/usr/local
|
||||
fi
|
||||
# Default to /usr for other OSes
|
||||
else
|
||||
INSTALL_RKE2_ROOT=${STYLUS_ROOT}/usr
|
||||
fi
|
||||
|
||||
# Uninstall killall script
|
||||
uninstall_killall() {
|
||||
_killall="$(dirname "$0")/rke2-killall.sh"
|
||||
if [ -e "${_killall}" ]; then
|
||||
eval "${_killall}"
|
||||
fi
|
||||
}
|
||||
|
||||
# Disable services
|
||||
uninstall_disable_services() {
|
||||
if command -v systemctl >/dev/null 2>&1; then
|
||||
systemctl disable rke2-server || true
|
||||
systemctl disable rke2-agent || true
|
||||
systemctl reset-failed rke2-server || true
|
||||
systemctl reset-failed rke2-agent || true
|
||||
systemctl daemon-reload
|
||||
fi
|
||||
}
|
||||
|
||||
# Remove files
|
||||
uninstall_remove_files() {
|
||||
if [ -r /etc/redhat-release ] || [ -r /etc/centos-release ] || [ -r /etc/oracle-release ] || [ -r /etc/amazon-linux-release ]; then
|
||||
yum remove -y "rke2-*"
|
||||
rm -f ${STYLUS_ROOT}/etc/yum.repos.d/rancher-rke2*.repo
|
||||
fi
|
||||
|
||||
if [ "${ID_LIKE%%[ ]*}" = "suse" ]; then
|
||||
if rpm -q rke2-common >/dev/null 2>&1; then
|
||||
uninstall_cmd="zypper remove -y rke2-server rke2-agent rke2-common rke2-selinux"
|
||||
if [ "${TRANSACTIONAL_UPDATE=false}" != "true" ] && [ -x /usr/sbin/transactional-update ]; then
|
||||
uninstall_cmd="transactional-update -c --no-selfupdate -d run $uninstall_cmd"
|
||||
fi
|
||||
$uninstall_cmd
|
||||
rm -f ${STYLUS_ROOT}/etc/zypp/repos.d/rancher-rke2*.repo
|
||||
fi
|
||||
fi
|
||||
|
||||
$transactional_update find "${INSTALL_RKE2_ROOT}/lib/systemd/system" -name rke2-*.service -type f -delete
|
||||
$transactional_update find "${INSTALL_RKE2_ROOT}/lib/systemd/system" -name rke2-*.env -type f -delete
|
||||
find ${STYLUS_ROOT}/etc/systemd/system -name rke2-*.service -type f -delete
|
||||
$transactional_update rm -f "${INSTALL_RKE2_ROOT}/bin/rke2"
|
||||
$transactional_update rm -f "${INSTALL_RKE2_ROOT}/bin/rke2-killall.sh"
|
||||
$transactional_update rm -rf "${INSTALL_RKE2_ROOT}/share/rke2"
|
||||
|
||||
# Removing directories with STYLUS_ROOT support
|
||||
rm -rf ${STYLUS_ROOT}/etc/rancher/rke2
|
||||
rm -rf ${STYLUS_ROOT}/etc/rancher/node
|
||||
rm -d ${STYLUS_ROOT}/etc/rancher || true
|
||||
rm -rf ${STYLUS_ROOT}/etc/cni
|
||||
rm -rf ${STYLUS_ROOT}/opt/cni/bin
|
||||
rm -rf ${STYLUS_ROOT}/var/lib/kubelet || true
|
||||
rm -rf "${RKE2_DATA_DIR}"
|
||||
rm -d ${STYLUS_ROOT}/var/lib/rancher || true
|
||||
|
||||
if type fapolicyd >/dev/null 2>&1; then
|
||||
if [ -f ${STYLUS_ROOT}/etc/fapolicyd/rules.d/80-rke2.rules ]; then
|
||||
rm -f ${STYLUS_ROOT}/etc/fapolicyd/rules.d/80-rke2.rules
|
||||
fi
|
||||
fagenrules --load
|
||||
systemctl try-restart fapolicyd
|
||||
fi
|
||||
}
|
||||
|
||||
# Remove uninstall script
|
||||
uninstall_remove_self() {
|
||||
$transactional_update rm -f "${INSTALL_RKE2_ROOT}/bin/rke2-uninstall.sh"
|
||||
}
|
||||
|
||||
# Remove SELinux policies
|
||||
uninstall_remove_policy() {
|
||||
semodule -r rke2 || true
|
||||
}
|
||||
|
||||
uninstall_killall
|
||||
trap uninstall_remove_self EXIT
|
||||
uninstall_disable_services
|
||||
uninstall_remove_files
|
||||
uninstall_remove_policy
|
Reference in New Issue
Block a user