Merge pull request 'dev1' (#10) from dev1 into main

Reviewed-on: #10
This commit is contained in:
ysh 2025-07-18 11:16:42 +08:00
commit 7a4e301092
2 changed files with 108 additions and 74 deletions

View File

@ -20,6 +20,7 @@ echo 'force-confold' > /etc/dpkg/dpkg.cfg.d/force-confold
# 优化仅停止packagekit不mask # 优化仅停止packagekit不mask
systemctl stop packagekit systemctl stop packagekit
echo "########## 安装K8S必须root用户下执行 ###########" echo "########## 安装K8S必须root用户下执行 ###########"
# 检查是否为root用户 # 检查是否为root用户
if [ "$(id -u)" != "0" ]; then if [ "$(id -u)" != "0" ]; then
@ -27,6 +28,9 @@ if [ "$(id -u)" != "0" ]; then
exit 1 exit 1
fi fi
echo "########## 先清理K8S缓存/环境 ###########"
/opt/k8s_uninstall.sh || log_error "清理K8S环境失败,请检查脚本或手动清理残留"
# 新ubuntu18.04设备环境先换阿里源: # 新ubuntu18.04设备环境先换阿里源:
cp /etc/apt/sources.list /etc/apt/sources.list.bak cp /etc/apt/sources.list /etc/apt/sources.list.bak
tee /etc/apt/sources.list << EOF tee /etc/apt/sources.list << EOF
@ -378,7 +382,7 @@ if lspci | grep -i nvidia > /dev/null 2>&1; then
fi fi
# 5. 验证 CUDA 安装 # 5. 验证 CUDA 安装
nvcc -V # nvcc -V
log_info "nvidia-container-runtime 配置完成,containerd已重启" log_info "nvidia-container-runtime 配置完成,containerd已重启"
fi fi
@ -536,8 +540,8 @@ if [ "$1" == "master" ]; then
kubectl apply -f /opt/kube-flannel.yml || log_error "本地安装flannel网络插件失败" kubectl apply -f /opt/kube-flannel.yml || log_error "本地安装flannel网络插件失败"
log_info "正在安装MetricsServer插件" log_info "正在安装MetricsServer插件"
kubectl apply -f /opt/components.yaml || log_error "本地安装MetricsServer插件失败" kubectl apply -f /opt/components.yaml || log_error "本地安装MetricsServer插件失败"
log_info "正在安装Ingress-nginx-controller插件" # log_info "正在安装Ingress-nginx-controller插件"
kubectl apply -f /opt/ingress-nginx-controller.yaml || log_error "本地安装ingress-nginx-controller插件失败" # kubectl apply -f /opt/ingress-nginx-controller.yaml || log_error "本地安装ingress-nginx-controller插件失败"
log_info "正在安装GPU模式必要插件" log_info "正在安装GPU模式必要插件"
kubectl apply -f /opt/nvidia-device-plugin.yml || log_error "本地安装GPU模式必要插件失败" kubectl apply -f /opt/nvidia-device-plugin.yml || log_error "本地安装GPU模式必要插件失败"
log_info "正在安装nfs-client-provisioner插件" log_info "正在安装nfs-client-provisioner插件"

View File

@ -1,87 +1,117 @@
#!/bin/bash #!/bin/bash
set -euo pipefail
# 停止K8s相关服务 # 定义颜色输出函数
echo "停止K8s相关服务..." red_echo() {
ps -aux | grep Opera | grep -v grep | awk '{print $2}' | xargs kill -9 echo -e "\033[31m$1\033[0m"
systemctl stop kubelet }
echo "移除缓存忘卡配置" green_echo() {
ip link delete cni0 echo -e "\033[32m$1\033[0m"
systemctl stop kube-apiserver }
yellow_echo() {
echo -e "\033[33m$1\033[0m"
}
systemctl stop nfs-kernel-server # ========================
rm -rf /k8sdata/* # 清理流程
# ========================
cleanup_steps() {
# 1. 停止服务
green_echo "1. 停止K8s及容器运行时服务..."
systemctl stop kubelet kube-apiserver kube-controller-manager kube-scheduler kube-proxy etcd nfs-kernel-server containerd docker &> /dev/null || true
systemctl disable kubelet kube-apiserver kube-controller-manager kube-scheduler kube-proxy etcd nfs-kernel-server containerd docker &> /dev/null || true
# 执行kubeadm reset # 2. 清理进程
echo "执行kubeadm reset..." green_echo "2. 清理K8s相关进程..."
kubeadm reset -f ps -aux | grep -E 'kube|etcd|containerd|docker' | grep -v grep | awk '{print $2}' | xargs -r kill -9 &> /dev/null || true
apt-get purge kubelet kubectl kubeadm kubernetes-cni -y --allow-change-held-packages # 3. 清理网络资源
rm -rf /etc/cni/net.d green_echo "3. 清理CNI网络资源..."
ip link delete cni0 &> /dev/null || true
ip link delete flannel.1 &> /dev/null || true
rm -rf /var/lib/cni/networks/* /var/lib/cni/loader/* /etc/cni/net.d/* &> /dev/null || true
rm -rf /var/lib/kubelet /var/lib/kubernetes # 4. kubeadm reset
rm -rf /etc/kubernetes/manifests green_echo "4. 执行kubeadm reset..."
rm -rf /etc/kubernetes/pki kubeadm reset -f &> /dev/null || true
rm -rf /etc/kubernetes
rm -rf /var/lib/etcd
rm -rf /var/lib/cni
rm -rf /var/lib/docker
rm -rf /var/lib/containerd
rm -rf /var/lib/etcd
rm -rf /var/lib/kubelet
rm -rf /var/lib/kube-proxy
# 删除K8s配置文件
echo "删除K8s配置文件..."
sudo rm -rf /etc/kubernetes
# 删除K8s相关二进制文件假设在/usr/local/bin # 5. 卸载软件包
echo "删除K8s相关二进制文件..." green_echo "5. 卸载K8s及容器运行时软件包..."
sudo rm /usr/local/bin/kube* apt-get purge -y kubelet kubectl kubeadm kubernetes-cni cri-tools containerd.io docker-ce docker-ce-cli &> /dev/null || true
apt-get autoremove -y &> /dev/null || true
# 清理Containerd数据谨慎操作 # 6. 清理配置和数据目录
echo "清理Containerd数据..." green_echo "6. 清理配置和数据目录..."
sudo rm -rf /var/lib/containerd /usr/bin/containerd* rm -rf /etc/kubernetes /var/lib/kubelet /var/lib/kubernetes /var/lib/etcd /var/lib/kubeadm /var/lib/kube-proxy /var/lib/containerd /var/lib/docker &> /dev/null || true
sudo apt purge -y containerd containerd.io cri-tools --allow-change-held-packages
rm -rf /etc/containerd /var/lib/containerd /run/containerd
rm -f /etc/systemd/system/multi-user.target.wants/containerd.service
rm /lib/systemd/system/containerd.service
systemctl daemon-reload
# 清理iptables规则 # 7. 清理systemd服务残留
echo "清理iptables规则..." green_echo "7. 清理systemd服务残留..."
# sudo iptables -F && sudo iptables -t nat -F && sudo iptables -t mangle -F && sudo iptables -X rm -f /lib/systemd/system/{containerd,docker,kubelet}.service &> /dev/null || true
# ipvsadm --clear rm -f /etc/systemd/system/multi-user.target.wants/{containerd,docker,kubelet}.service &> /dev/null || true
apt autoremove -y systemctl daemon-reload &> /dev/null || true
apt autoclean -y
apt clean -y
apt update -y
# 停止docker # 8. 清理网络规则
echo "停止docker并清理..." green_echo "8. 清理iptables和ipvs规则..."
docker rmi $(docker images -q) iptables -F && iptables -t nat -F && iptables -t mangle -F && iptables -X &> /dev/null || true
docker stop $(docker ps -aq) && docker rm $(docker ps -aq) && sudo systemctl stop docker ipvsadm --clear &> /dev/null || true
sudo systemctl stop docker.service
sudo systemctl stop docker.socket
rm -rf /etc/docker/daemon.json
rm -rf /usr/bin/docker-compose
# 清理Docker # 9. 清理源和kubeconfig
apt-get purge docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin docker-ce-rootless-extras -y --allow-change-held-packages green_echo "9. 清理软件源和kubeconfig..."
apt purge -y containerd.io containerd rm -rf /etc/apt/sources.list.d/{docker,kubernetes,kuboard}* &> /dev/null || true
rm -rf $HOME/.kube/config &> /dev/null || true
# 检查并删除当前root用户的kubeconfig文件 # 10. 更新软件包缓存
echo "检查并删除当前root用户的kubeconfig文件..." green_echo "10. 更新软件包缓存..."
sudo rm -rf $HOME/.kube/config apt-get update &> /dev/null || true
}
# kubord # ========================
echo "清理kuboard相关配置..." # 验证清理结果
sed -i '/\/opt \*(rw,sync,no_root_squash)/d' /etc/exports # ========================
verify_cleanup() {
green_echo "\n开始验证清理结果..."
local is_clean=true
rm -rf /etc/apt/sources.list.d/docker* # 检查关键服务状态
rm -rf /etc/apt/sources.list.d/kubernetes* for service in kubelet docker containerd; do
rm -rf /etc/apt/sources.list.d/kuboard* if systemctl is-active "$service" &> /dev/null; then
red_echo " ❌ 服务 $service 仍在运行"
is_clean=false
else
green_echo " ✔️ 服务 $service 已停止"
fi
done
apt autoremove -y # 检查关键命令是否残留
apt autoclean -y for cmd in kubectl kubeadm docker containerd; do
apt clean -y if command -v "$cmd" &> /dev/null; then
red_echo " ❌ 命令 $cmd 仍存在"
is_clean=false
else
green_echo " ✔️ 命令 $cmd 已移除"
fi
done
echo "恭喜你!!! K8s相关内容已清理, 可准备重新安装。" # 检查关键目录是否残留
for dir in /etc/kubernetes /var/lib/kubelet /var/lib/containerd /var/lib/docker; do
if [ -d "$dir" ]; then
red_echo " ❌ 目录 $dir 未完全清理"
is_clean=false
else
green_echo " ✔️ 目录 $dir 已删除"
fi
done
# 最终结果
if $is_clean; then
green_echo "\n🎉 清理成功环境已准备好重新安装K8s。"
else
red_echo "\n❌ 清理不彻底,请手动检查残留项!"
fi
}
# ========================
# 执行清理和验证
# ========================
cleanup_steps
verify_cleanup