【详解】K8S集群卸载清理

举报
皮牙子抓饭 发表于 2025/08/17 23:16:24 2025/08/17
【摘要】 K8S集群卸载清理在Kubernetes(简称K8S)的生命周期中,可能会遇到需要卸载和清理集群的情况。无论是为了迁移、升级还是彻底删除不再使用的资源,正确的卸载和清理过程对于保持环境的整洁和安全至关重要。本文将详细介绍如何安全地卸载K8S集群,并清理所有相关的资源。准备工作在开始卸载K8S集群之前,确保你有足够的权限执行这些操作。通常,这需要root用户或具有相应权限的用户账号。此外,确保...

K8S集群卸载清理

在Kubernetes(简称K8S)的生命周期中,可能会遇到需要卸载和清理集群的情况。无论是为了迁移、升级还是彻底删除不再使用的资源,正确的卸载和清理过程对于保持环境的整洁和安全至关重要。本文将详细介绍如何安全地卸载K8S集群,并清理所有相关的资源。

准备工作

在开始卸载K8S集群之前,确保你有足够的权限执行这些操作。通常,这需要root用户或具有相应权限的用户账号。此外,确保所有依赖于该K8S集群的服务都已经停止并迁移到其他环境,以避免服务中断。

卸载K8S集群

1. 停止所有应用

首先,需要停止在K8S集群上运行的所有应用和服务。可以通过以下命令列出所有的命名空间和它们中的资源:

kubectl get namespaces
kubectl get all --all-namespaces

然后,逐个删除这些资源,例如:

kubectl delete deployment <deployment-name> -n <namespace>
kubectl delete service <service-name> -n <namespace>

2. 删除命名空间

确认所有资源都被删除后,可以删除所有自定义的命名空间:

kubectl delete namespace <namespace-name>

3. 清理K8S组件

接下来,需要卸载K8S的核心组件。如果你是通过​​kubeadm​​安装的K8S,可以使用以下命令来重置节点:

kubeadm reset

这将移除Kubernetes组件并清理网络配置。

4. 清理网络配置

K8S使用CNI插件来管理网络,如Flannel、Calico等。根据你所使用的CNI插件,可能需要手动清理网络配置。例如,如果使用的是Flannel,可以执行:

sudo rm -rf /var/lib/cni/
sudo ip link delete cni0
sudo ip link delete flannel.1

5. 卸载Docker或其他容器运行时

如果你使用的是Docker作为容器运行时,可以考虑卸载Docker以释放系统资源:

sudo apt-get remove docker-ce docker-ce-cli containerd.io

或者,如果你使用的是其他容器运行时,参考相应的文档进行卸载。

6. 清理存储卷

最后,不要忘记清理任何持久化存储卷。这些卷可能存储在本地磁盘或外部存储服务中。确保所有数据已经备份,然后删除这些卷:

kubectl get pv
kubectl delete pv <pv-name>

验证卸载

完成上述步骤后,可以通过检查系统状态来验证K8S集群是否已成功卸载:

  • 检查是否有残留的K8S进程:
ps aux | grep kube
  • 检查网络接口:
ip a
  • 检查文件系统中是否有残留的K8S文件:
sudo find / -name "kube*"

正确地卸载和清理K8S集群不仅有助于保持系统的清洁,还可以防止潜在的安全风险。希望本文提供的步骤能帮助你在需要时顺利地完成K8S集群的卸载和清理工作。在 Kubernetes (K8S) 集群中,卸载和清理资源是一个重要的维护任务。这包括删除命名空间、Pods、Deployments、Services 等资源。以下是一些常见的卸载和清理操作的示例代码,使用 ​​kubectl​​ 命令行工具来执行这些操作。

1. 删除命名空间

删除一个命名空间会自动删除该命名空间下的所有资源。

kubectl delete namespace <namespace-name>

例如,删除名为 ​​my-namespace​​ 的命名空间:

kubectl delete namespace my-namespace

2. 删除特定资源

删除 Deployment
kubectl delete deployment <deployment-name> -n <namespace-name>

例如,删除 ​​my-deployment​​:

kubectl delete deployment my-deployment -n my-namespace
删除 Pod
kubectl delete pod <pod-name> -n <namespace-name>

例如,删除 ​​my-pod​​:

kubectl delete pod my-pod -n my-namespace
删除 Service
kubectl delete service <service-name> -n <namespace-name>

例如,删除 ​​my-service​​:

kubectl delete service my-service -n my-namespace

3. 批量删除资源

可以使用 ​​kubectl delete​​ 命令的 ​​-l​​ 参数来批量删除具有特定标签的资源。

删除具有特定标签的所有 Pods
kubectl delete pods -l app=my-app -n <namespace-name>

例如,删除 ​​app=my-app​​ 标签的所有 Pods:

kubectl delete pods -l app=my-app -n my-namespace
删除具有特定标签的所有 Deployments
kubectl delete deployments -l app=my-app -n <namespace-name>

例如,删除 ​​app=my-app​​ 标签的所有 Deployments:

kubectl delete deployments -l app=my-app -n my-namespace

4. 清理未使用的资源

清理未使用的 PVC(PersistentVolumeClaims)
kubectl get pvc --all-namespaces | grep "Released" | awk '{print $2}' | xargs -I {} kubectl delete pvc {} -n {}
清理未使用的 PV(PersistentVolumes)
kubectl get pv | grep "Released" | awk '{print $1}' | xargs kubectl delete pv

5. 使用脚本进行自动化清理

可以编写一个脚本来自动化这些清理操作。以下是一个简单的 Bash 脚本示例:

#!/bin/bash

NAMESPACE="my-namespace"
LABEL="app=my-app"

# 删除具有特定标签的所有 Pods
kubectl delete pods -l ${LABEL} -n ${NAMESPACE}

# 删除具有特定标签的所有 Deployments
kubectl delete deployments -l ${LABEL} -n ${NAMESPACE}

# 删除具有特定标签的所有 Services
kubectl delete services -l ${LABEL} -n ${NAMESPACE}

# 删除命名空间
kubectl delete namespace ${NAMESPACE}

# 清理未使用的 PVC
kubectl get pvc --all-namespaces | grep "Released" | awk '{print $2}' | xargs -I {} kubectl delete pvc {} -n {}

# 清理未使用的 PV
kubectl get pv | grep "Released" | awk '{print $1}' | xargs kubectl delete pv

将上述脚本保存为 ​​cleanup.sh​​,然后赋予执行权限并运行:

chmod +x cleanup.sh
./cleanup.sh

这些示例代码和脚本可以帮助你有效地管理和清理 Kubernetes 集群中的资源。根据实际需求,你可以进一步定制和扩展这些脚本。在 Kubernetes (K8S) 集群中进行卸载和清理操作是一个细致且重要的过程,以确保不会留下任何残留的资源或配置,避免对未来的部署造成影响。下面是一些常见的步骤和相关的命令,用于卸载和清理 K8S 集群。

1. 删除所有命名空间中的资源

首先,你需要删除所有命名空间中的资源。这可以通过以下命令实现:

kubectl delete all --all-namespaces

这条命令会删除所有命名空间中的 Pod、Service、Deployment 等资源。如果你只想删除特定类型的资源,可以使用更具体的命令,例如:

kubectl delete pods --all-namespaces

2. 删除所有命名空间

删除了所有资源后,可以删除除 ​​kube-system​​ 和 ​​default​​ 之外的所有命名空间:

kubectl get namespaces -o json | jq '.items[] | select(.metadata.name != "kube-system" and .metadata.name != "default") | .metadata.name' -r | xargs kubectl delete namespace

3. 清理 ​​kube-system​​ 命名空间

​kube-system​​ 命名空间包含了 Kubernetes 系统组件,通常不应该被删除。但是,你可以清理这个命名空间中不再需要的资源,比如完成的任务、失败的 Pod 等:

kubectl -n kube-system delete pods --field-selector status.phase=Failed
kubectl -n kube-system delete pods --field-selector status.phase=Succeeded

4. 清理存储卷

如果使用了持久化存储卷(Persistent Volumes, PVs),确保这些存储卷也被清理:

kubectl get pv | grep Released | awk '{print $1}' | xargs kubectl delete pv

5. 卸载 K8S 组件

如果你需要完全卸载 Kubernetes 集群,包括 Master 节点和 Worker 节点上的所有组件,可以使用特定的卸载脚本。这些脚本通常由安装 Kubernetes 的工具提供,例如 ​​kubeadm​​:

# 在所有节点上执行
kubeadm reset

# 清理 Docker 相关的资源
systemctl stop kubelet
systemctl stop docker
rm -rf /var/lib/cni/
rm -rf /var/lib/kubelet/*
rm -rf /etc/cni/
rm -rf /etc/kubernetes/*

# 重启 Docker 服务
systemctl start docker

6. 清理网络配置

如果使用了特定的网络插件(如 Flannel、Calico 等),可能还需要手动清理网络配置:

# 清理 Flannel 网络
ip link delete cni0
ip link delete flannel.1

# 清理 Calico 网络
calicoctl node stop
calicoctl node remove <hostname>

7. 检查并清理剩余文件

最后,检查并删除任何剩余的 Kubernetes 配置文件和日志文件:

rm -rf /etc/kubernetes/
rm -rf /var/log/kubernetes/

注意事项

  • 备份数据:在执行任何删除操作之前,确保你已经备份了所有重要数据。
  • 确认操作:在生产环境中执行这些命令时,务必小心确认每一步操作,以免误删重要资源。
  • 文档参考:具体的操作可能会因 Kubernetes 版本和安装方式的不同而有所差异,建议参考官方文档或安装工具的文档。

通过以上步骤,你可以有效地卸载和清理 Kubernetes 集群,确保环境的干净和安全。

【声明】本内容来自华为云开发者社区博主,不代表华为云及华为云开发者社区的观点和立场。转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息,否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。