Kubernetes 节点摘除指南

目录

一、安全摘除节点的标准流程

[1. 确认节点名称及状态](#1. 确认节点名称及状态)

[2. 标记节点为不可调度](#2. 标记节点为不可调度)

[3. 排空(Drain)节点](#3. 排空(Drain)节点)

[4. 删除节点](#4. 删除节点)

二、验证节点是否成功摘除

[1. 检查节点列表](#1. 检查节点列表)

[2. 检查节点详细信息](#2. 检查节点详细信息)

[3. 验证 Pod 状态](#3. 验证 Pod 状态)

三、彻底清理节点(可选)

[1. 停止并重置 kubelet](#1. 停止并重置 kubelet)

[2. 清理残留文件](#2. 清理残留文件)

[3. 删除证书(如果使用 kubeadm)](#3. 删除证书(如果使用 kubeadm))

四、常见问题

[1. 节点状态一直为 NotReady](#1. 节点状态一直为 NotReady)

[2. 无法删除节点](#2. 无法删除节点)


一、安全摘除节点的标准流程

1. 确认节点名称及状态

首先通过以下命令获取节点列表:

复制代码
kubectl get nodes -o wide

找到需摘除的节点名称,并确认其状态为 Ready 。若节点已异常(如 NotReady),需先排查问题或强制操作。

2. 标记节点为不可调度

使用 cordon 命令阻止新 Pod 调度到该节点:

复制代码
kubectl cordon <node-name>

验证节点状态:

复制代码
kubectl get nodes <node-name>
#输出中 "STATUS" 应为 "SchedulingDisabled"
3. 排空(Drain)节点

在移除节点前,需确保该节点上的 Pod 被安全迁移到其他节点,避免服务中断。

复制代码
kubectl drain <node-name> --ignore-daemonsets --delete-emptydir-data
  • --ignore-daemonsets:忽略 DaemonSet 管理的 Pod(如日志收集组件)。

  • --delete-emptydir-data :删除使用 emptyDir 卷的 Pod 数据。

  • 注意 :如果存在无法自动迁移的 Pod(如没有副本的裸 Pod),需手动处理或添加 --force 参数。

4. 删除节点

驱逐完成后,执行以下命令从集群中移除节点:

复制代码
kubectl delete node <node-name>

二、验证节点是否成功摘除

1. 检查节点列表

使用 get nodes 确认节点已消失:

复制代码
kubectl get nodes
  • 如果节点已成功删除,列表中不再显示该节点。

  • 如果节点仍在列表中但状态为 NotReady,可能需检查网络或手动清理。

2. 检查节点详细信息
复制代码
kubectl describe node <node-name>
  • 若节点已删除,会返回错误

复制代码
  Error from server (NotFound): nodes "<node-name>" not found。
3. 验证 Pod 状态

检查原节点上的 Pod 是否已重新调度到其他节点:

复制代码
kubectl get pods -o wide | grep node1
# 应无输出,表示所有 Pod 已迁移

三、彻底清理节点(可选)

如果节点需要从物理/虚拟环境中永久移除,还需在节点本机执行以下操作:

1. 停止并重置 kubelet
复制代码
systemctl stop kubelet
kubeadm reset -f
2. 清理残留文件
复制代码
rm -rf /etc/kubernetes/*
rm -rf ~/.kube/config
3. 删除证书(如果使用 kubeadm)
复制代码
rm -rf /etc/kubernetes/pki/

四、常见问题

1. 节点状态一直为 NotReady
  • 检查节点网络是否正常。

  • 检查节点上的 kubelet 是否在运行:

    复制代码
    systemctl status kubelet
2. 无法删除节点
  • 确认已执行 kubectl drain

  • 强制删除节点(谨慎操作):

    复制代码
    kubectl delete node <node-name> --force --grace-period=0

    通过以上步骤,可以安全摘除 Kubernetes 集群中的节点并验证结果。

相关推荐
Gold Steps.2 小时前
从0到1认识ElasticStack
elk·云原生·es
❀͜͡傀儡师3 小时前
如何使用k8s安装redis呢
redis·容器·kubernetes
云道轩11 小时前
llm-d:面向Kubernetes的高性能分布式LLM推理框架
分布式·容器·kubernetes
徐传良14 小时前
03.搭建K8S集群
云原生·容器·kubernetes
Ares-Wang15 小时前
kubernetes》》k8s》》kubectl proxy 命令后面加一个&
云原生·容器·kubernetes
容器魔方15 小时前
议程一览 | KubeCon China 2025 华为云精彩前瞻
云原生·容器·云计算
藥瓿亭17 小时前
2024 CKA模拟系统制作 | Step-By-Step | 16、题目搭建-sidecar 代理容器日志
linux·运维·docker·云原生·容器·kubernetes·cka
一ge科研小菜鸡18 小时前
构建云原生安全治理体系:挑战、策略与实践路径
安全·云原生
上海运维Q先生20 小时前
Cilium动手实验室: 精通之旅---4.Cilium Gateway API - Lab
云原生·k8s·cilium
探索云原生21 小时前
开源 vGPU 方案:HAMi,实现细粒度 GPU 切分
ai·云原生·kubernetes·gpu