0
点赞
收藏
分享

微信扫一扫

k8s排空节点升级

场景:指定节点node0030升级内存(8G-->16G)

升级流程

1.排空节点并停止调度

kubectl drain node0030 --force

k8s排空节点升级_节点删除

由于节点中存在使用localpv的pod以及由DaemonSet控制的pod,无法直接排空,因此需要加上特定参数进行排空

kubectl drain node0030 --delete-local-data=true --ignore-daemonsets=true --force

2.升级节点配置

阿里云控制台直接操作,图略

3.恢复节点

节点配置升级重启完成后,执行下方指令,将节点恢复调度

kubectl uncordon node0030

总结及扩展

1.cordon 停止调度

影响最小,只会将node调为​​SchedulingDisabled​​状态,之后再创建pod时,不会被调度到该节点,节点上旧有的pod不会受到影响,仍正常对外提供服务

停止调度

kubectl cordon node_name

恢复调度

kubectl uncordon node_name

2.drain 排空节点

首先,驱逐node上的pod,在其他节点重新创建。

接着,将节点调为​​SchedulingDisabled​​状态。

一般执行节点排空的流程如下:

1) 封锁节点,先让节点变的不可调度

kubectl cordon <node name>

2) 对节点执行维护操作之前(例如:内核升级,硬件维护等),可以使用 kubectl drain 安全驱逐节点上面所有的 pod。

安全驱逐的方式将会允许 pod 里面的容器遵循指定的​​PodDisruptionBudgets​​执行优雅的中止。

注: 默认情况下,kubectl drain 会忽略那些不能杀死的系统类型的 pod,具体请参考kubectl drain 

kubectl drain 返回成功表明所有的 pod (除了前面排除的那些)已经被安全驱逐(遵循期望优雅的中止期,并且没有违反任何应用程序级别的中断预算)。

然后,通过对物理机断电或者在云平台上删除节点所在的虚拟机,都能安全的将节点移除。

3) 恢复调度pod

kubectl uncordon <node name>

drain的参数

--force

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

--ignore-daemonsets=true

无视DaemonSet管理下的Pod

--delete-local-data

如果有mount local volumn的pod,会强制杀掉该pod并把数据清除掉

另外如果跟本身的配置讯息有冲突时,drain就不会执行。

3.delete 删除节点

首先,驱逐node上的pod,从其他节点重新创建。

然后,从master节点删除该node,master对其不可见,失去对其控制,master不可对其恢复。

恢复调度

需进入node节点,重启kubelet 基于node的自注册功能,节点重新恢复使用

systemctl restart kubelet

delete是一个比较粗暴的命令,它会将被删node上的pod直接驱逐,由其他node创建(针对replicaset),然后将被删节点从master管理范围内移除,master对其失去管理控制,若想使node重归麾下,必须在node节点重启kubelet ​

举报

相关推荐

0 条评论