Загрузка...

Блог

Удаление и переустановка кластера Kubernetes

Удаление и переустановка кластера Kubernetes

В блоке ниже — полное удаление Kubernetes с узла: все ресурсы, CNI, kubelet, конфигурация, данные etcd и kubelet, iptables и сетевые интерфейсы CNI.

Что делает скрипт

ЭтапДействие
СервисыОстановка kubelet
РесурсыУдаление подов (в т.ч. статических манифестов)
КонфигурацияУдаление /etc/kubernetes, /var/lib/etcd, /var/lib/kubelet
Процессы и портыЗавершение процессов K8s, освобождение портов 6443, 10250, 2379, 2380
СетьОчистка iptables и интерфейсов CNI

Скрипт удаления кластера

Сохраните код в файл и выполните от root (sudo bash файл). После выполнения узел полностью очищен от Kubernetes; установку заново см. в статье «Установка single-node кластера Kubernetes».

#!/bin/bash
# Полное удаление Kubernetes кластера
set -e
echo "=== Полное удаление Kubernetes кластера ==="
if [ "$EUID" -ne 0 ]; then echo "Ошибка: запустите от root (sudo)"; exit 1; fi

if [ -f "$HOME/.kube/config" ]; then export KUBECONFIG="$HOME/.kube/config"
elif [ -f "/etc/kubernetes/super-admin.conf" ]; then export KUBECONFIG="/etc/kubernetes/super-admin.conf"
fi

if command -v kubectl >/dev/null 2>&1; then
    echo "1. Удаление ресурсов из кластера..."
    kubectl delete namespace llm 2>/dev/null || true
    kubectl delete namespace kubernetes-dashboard 2>/dev/null || true
    for ns in $(kubectl get namespaces -o jsonpath='{.items[*].metadata.name}' 2>/dev/null | grep -v -E '^(kube-system|kube-public|kube-node-lease|default)$'); do
        echo "  Удаление namespace: $ns"
        kubectl delete namespace "$ns" --timeout=30s 2>/dev/null || true
    done
    kubectl delete -f https://raw.githubusercontent.com/flannel-io/flannel/master/Documentation/kube-flannel.yml 2>/dev/null || true
    kubectl delete daemonset --all -n kube-system 2>/dev/null || true
    kubectl delete deployment --all -n kube-system 2>/dev/null || true
fi

echo "2. Остановка kubelet..."
systemctl stop kubelet 2>/dev/null || true
systemctl disable kubelet 2>/dev/null || true
sleep 3
rm -rf /etc/kubernetes/manifests/*.yaml 2>/dev/null || true
sleep 2
pkill -9 kube-apiserver 2>/dev/null || true
pkill -9 kube-controller-manager 2>/dev/null || true
pkill -9 kube-scheduler 2>/dev/null || true
pkill -9 etcd 2>/dev/null || true
pkill -9 kubelet 2>/dev/null || true
pkill -9 kube-proxy 2>/dev/null || true
sleep 2

echo "2.2. Проверка портов..."
if netstat -tuln 2>/dev/null | grep -q ":6443"; then
    lsof -ti:6443 | xargs -r kill -9 2>/dev/null || true
    fuser -k 6443/tcp 2>/dev/null || true
    sleep 2
fi
if netstat -tuln 2>/dev/null | grep -q ":10250"; then
    lsof -ti:10250 | xargs -r kill -9 2>/dev/null || true
    fuser -k 10250/tcp 2>/dev/null || true
    sleep 2
fi

echo "3. Удаление конфигурации kubeadm..."
kubeadm reset -f 2>/dev/null || true
echo "4. Очистка iptables..."
iptables -F && iptables -t nat -F && iptables -t mangle -F && iptables -X 2>/dev/null || true
ip6tables -F && ip6tables -t nat -F && ip6tables -t mangle -F && ip6tables -X 2>/dev/null || true
echo "5. Очистка IPVS..."
ipvsadm -C 2>/dev/null || true
echo "6. Удаление конфигурационных файлов..."
rm -rf /etc/cni/net.d /var/lib/cni /var/lib/etcd /etc/kubernetes ~/.kube /root/.kube /run/flannel
rm -f /etc/systemd/system/kubelet.service /etc/systemd/system/kubelet.service.d/10-kubeadm.conf
systemctl daemon-reload
echo "8. Очистка containerd..."
if command -v ctr >/dev/null 2>&1; then
    ctr -n k8s.io images ls -q | xargs -r ctr -n k8s.io images rm 2>/dev/null || true
    ctr -n k8s.io containers ls -q | xargs -r ctr -n k8s.io containers rm 2>/dev/null || true
fi
echo "9. Очистка сетевых интерфейсов..."
ip link delete cni0 2>/dev/null || true
ip link delete flannel.1 2>/dev/null || true
ip link delete docker0 2>/dev/null || true
modprobe -r ip_vs_rr ip_vs_wrr ip_vs_sh ip_vs nf_conntrack 2>/dev/null || true
echo ""
echo "=== Кластер полностью удален ==="
echo "Установку заново см. в статье «Установка single-node кластера Kubernetes»."

Когда использовать

Для полной переустановки кластера или перед сносом окружения. Перед запуском убедитесь, что нужные данные вынесены или есть резервные копии.

Запуск

Выполните сохранённый код от root: sudo bash путь/к/файлу. После этого можно заново выполнить установку кластера по статье «Установка single-node кластера Kubernetes».

Итого: Один скрипт полностью сносит кластер; после него — чистая установка с нуля.