如何停止RKE K8s工作节点kubelet服务以模拟节点NotReady状态
RKE环境模拟节点NotReady状态验证污点与容忍度的操作方法
RKE部署的Kubernetes集群中,kubelet以容器化方式托管运行,未注册为systemd系统服务,因此执行systemctl stop kubelet.service会触发Unit kubelet.service not loaded报错。
可根据验证场景选择以下两种操作方式:
模拟真实节点故障场景
- 登录需要置为NotReady状态的目标节点,执行命令查询kubelet容器ID:
docker ps --filter "name=kubelet" -q - 停止查询到的kubelet容器:
docker stop $(docker ps --filter "name=kubelet" -q) - 等待40秒-2分钟,控制平面判定节点失联后,会自动给节点添加
node.kubernetes.io/not-ready:NoSchedule、node.kubernetes.io/unreachable:NoSchedule污点,此时即可验证容忍度的调度、驱逐逻辑。 - 验证完成后恢复节点状态,启动kubelet容器即可:
docker start $(docker ps --filter "name=kubelet" -a -q)
- 登录需要置为NotReady状态的目标节点,执行命令查询kubelet容器ID:
快速验证污点/容忍度匹配逻辑(无需模拟真实故障)
如果仅需要验证污点与容忍度的匹配规则,不需要还原节点故障的完整链路,可以直接手动给目标节点打对应污点:- 执行命令添加NotReady污点:
kubectl taint nodes <你的目标节点名> node.kubernetes.io/not-ready=:NoSchedule - 验证完成后删除该污点即可恢复:
kubectl taint nodes <你的目标节点名> node.kubernetes.io/not-ready:NoSchedule-
- 执行命令添加NotReady污点:
注意:若需要验证NotReady节点上的Pod驱逐逻辑,需要等待默认5分钟的Pod驱逐超时时间(由kube-controller-manager的
pod-eviction-timeout参数控制,RKE默认值为5分钟),节点刚进入NotReady状态时不会立刻驱逐存量Pod。
内容的提问来源于stack exchange,提问作者Ashok
相关产品推荐
相关产品推荐

