cordon节点drain驱逐节点delete节点详解

Kubernetes集群架构:k8scloude1作为master节点,k8scloude2,k8scloude3作为worker节点,本文介绍cordon节点,drain驱逐节点,delete 节点,在对k8s集群节点执行维护(例如内核升级、硬件维护等)时候会用到。,cordon节点,drain驱逐节点,delete 节点的前提是已经有一套可以正常运行的Kubernetes集群,关于Kubernetes(k8s)集群的安装部署,可以查看博客《Centos7 安装部署Kubernetes(k8s)集群》,cordon 节点会使其停止调度,会将node状态调为SchedulingDisabled,之后再创建新pod,新pod不会被调度到该节点,原有的pod不会受到影响,仍正常对外提供服务。,创建目录存放yaml文件,使用–dry-run生成deploy配置文件,修改deploy配置文件,replicas: 5表示副本数为 5,deploy将创建5个pod,创建deploy和使用pod yaml文件创建pod,查看pod,可以看到deploy生成5个pod(nginx-6cf858f6cf-XXXXXXX),还有一个pod1。,假设某天要对k8scloude2进行维护测试,不希望k8scloude2节点上被分配新的pod,可以对某个节点执行cordon之后,此节点就不会再调度新的pod了,cordon k8scloude2节点,k8scloude2节点变为SchedulingDisabled状态,kubectl scale deploy命令使nginx deploy的副本数扩展为10个,查看pod,可以发现新生成的pod都被调度到到k8scloude3上,某个节点被cordon之后,新的pod将不被调度到该节点,原先的pod不变。,来个极端的例子,先把deploy的副本数变为0,再变为10,此时所有的pod都运行在k8scloude3节点了。,要让节点恢复调度pod,uncordon即可。,uncordon k8scloude2节点,k8scloude2节点状态变为Ready,恢复调度。,在对节点执行维护(例如内核升级、硬件维护等)之前, 可以使用 kubectl drain 从节点安全地逐出所有 Pods。 安全的驱逐过程允许 Pod 的容器 体面地终止, 并确保满足指定的 PodDisruptionBudgets,PodDisruptionBudget 是一个对象,用于定义可能对一组 Pod 造成的最大干扰。。,说明: 默认情况下, kubectl drain 将忽略节点上不能杀死的特定系统 Pod;,'drain' 驱逐或删除除镜像 pod 之外的所有 pod(不能通过 API 服务器删除)。如果有 daemon set-managed pods,drain 不会在没有 –ignore-daemonsets 的情况下继续进行,并且无论如何它都不会删除任何 daemon set-managed pods,因为这些 pods 将立即被 daemon set 控制器替换,它会忽略不可调度的标记。如果有任何 pod 既不是镜像 pod,也不是由复制控制器、副本集、守护程序集、有状态集或作业管理的,那么除非您使用 –force,否则 drain 不会删除任何 pod。如果一个或多个 pod 的管理资源丢失, –force 也将允许继续删除。,kubectl drain 的成功返回,表明所有的 Pods(除了上一段中描述的被排除的那些), 已经被安全地逐出(考虑到期望的终止宽限期和你定义的 PodDisruptionBudget)。 然后就可以安全地关闭节点, 比如关闭物理机器的电源,如果它运行在云平台上,则删除它的虚拟机。,查看node状态和pod,drain驱逐节点:drain=cordon+evicted,drain k8scloude2节点,–delete-emptydir-data删除数据,–ignore-daemonsets忽略daemonsets,查看pod,k8scloude2节点被drain之后,pod都调度到了k8scloude3节点。,节点被drain驱逐的本质就是删除节点上的pod,k8scloude2节点被drain驱逐之后,k8scloude2上运行的pod会被删除。,deploy是一个控制器,会监控pod的副本数,当k8scloude2上的pod被驱逐之后,副本数少于10,于是在可调度的节点创建pod,补足副本数。,单独的pod不具备再生性,删除之后就真删除了,如果k8scloude3被驱逐,则pod pod1会被删除,其他可调度节点也不会再生一个pod1。,查看node节点状态,要取消drain某个节点,直接uncordon即可,没有undrain操作。,uncordon k8scloude2节点,节点恢复调度,把deploy副本数变为0,再变为10,再观察pod分布,k8scloude2节点恢复可调度pod状态,删除deploy,删除pod。,delete 删除节点就直接把一个节点就k8s集群中删除了,delete 节点之前需要先drain 节点。,关于delete节点以及重装节点的详细内容,请查看博客《模拟重装Kubernetes(k8s)集群:删除k8s集群然后重装》,kubectl drain 安全驱逐节点上面所有的 pod,–ignore-daemonsets往往需要指定的,这是因为deamonset会忽略SchedulingDisabled标签(使用kubectl drain时会自动给节点打上不可调度SchedulingDisabled标签),因此deamonset控制器控制的pod被删除后,可能马上又在此节点上启动起来,这样就会成为死循环。因此这里忽略daemonset。,k8scloude3变为SchedulingDisabled,删除节点k8scloude3,以上就是cordon节点drain驱逐节点delete节点的详细内容,更多关于cordon drain delete节点详解的资料请关注其它相关文章!
返回顶部
跳到底部

Copyright 2011-2024 南京追名网络科技有限公司 苏ICP备2023031119号-6 乌徒帮 All Rights Reserved Powered by Z-BlogPHP Theme By open开发

请先 登录 再评论,若不是会员请先 注册