k8s中清空一个node上所有pod

有时候可能会在生产环境中的k8s的node节点对docker文件daemon.json进行更改并且重启或者node节点出现其他故障,但是该node节点上有很多pod还在跑着,这时候就需要用到drain和uncordon两个命令

drain:释放排空node上所有pod,并且不接收新的pod进程
uncordon:恢复node,恢复接收新的pod进程

kubectl drain在对节点执行维护之前,可以使用从节点安全地逐出所有pod.安全驱逐允许pod的容器优雅地终止并且将遵守您指定的PodDisruptionBudgets.

注意:默认情况下,kubectl drain将忽略节点上无法杀死的某些系统窗格; 有关更多详细信息,请参阅kubectl drain文档.

当kubectl drain成功返回时,表示所有pod(除了前一段中所述排除的那些)已被安全驱逐(尊重所需的正常终止期,并且不违反任何应用程序级别的中断SLO).然后通过关闭其物理机器来关闭节点是安全的,或者如果在云平台上运行,则删除其虚拟机.

一般流程:

确定要排空的节点的名称
kubectl get nodes

 查看获取pod名字
kubectl get pods

#命令node节点开始释放所有pod,并且不接收新的pod进程

kubectl drain [node-name] --force --ignore-daemonsets --delete-local-data

#这时候把需要做的事情做一下。比如上面说的更改docker文件daemon.json或者说node节点故障需要进行的处理操作

#然后恢复node,恢复接收新的pod进程

kubectl uncordon [node-name]
kubectl get nodes
 

#查看获取pod名字

kubectl get pods

drain的参数
–force
当一些pod不是经 ReplicationController, ReplicaSet, Job, DaemonSet 或者 StatefulSet 管理的时候
就需要用–force来强制执行 (例如:kube-proxy)

–ignore-daemonsets
无视DaemonSet管理下的Pod

–delete-local-data
如果有mount local volumn的pod,会强制杀掉该pod并把料清除掉
另外如果跟本身的配置讯息有冲突时,drain就不会执行

例如
你在一个运行了三个replica的statefulSet中设定了PodDisruptionBudget,而minAvaliability又设成了2,当正在运行的pod数量等于或者少于2的时候,drain就会停止执行.

在master 执行
1, 不可调度
kubectl cordon k8s-node-1
kubectl uncordon k8s-node-1 #取消

2,驱逐已经运行的业务容器

kubectl drain --ignore-daemonsets k8s-node-1

3,如果想删除node 节点,则进行这个步骤

kubectl delete node k8s-node-1

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

_c G

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值