当您耗尽Kubernetes集群中的节点时会发生什么?
我想澄清一下,当您耗尽Kubernetes集群中的节点时,如何为维护做好准备: 以下是运行当您耗尽Kubernetes集群中的节点时会发生什么?,kubernetes,kubectl,Kubernetes,Kubectl,我想澄清一下,当您耗尽Kubernetes集群中的节点时,如何为维护做好准备: 以下是运行kubectl drain MY_NODE时我知道的内容: 节点被封锁 吊舱被优雅地关闭 您可以选择忽略守护程序吊舱,因为如果它们被关闭,它们将立即重新生成 但是,我不知道当一个节点被耗尽时会发生什么 问题: 豆荚怎么了?据我所知,库伯内特斯没有豆荚的“活迁移” pod是否会关闭,然后在另一个节点上自动启动?或者这取决于我的配置?(即,pod是否可以通过排水管关闭,而不是在另一个节点上启动) 我希望
kubectl drain MY_NODE
时我知道的内容:
- 节点被封锁
- 吊舱被优雅地关闭
- 您可以选择忽略守护程序吊舱,因为如果它们被关闭,它们将立即重新生成李>
- 豆荚怎么了?据我所知,库伯内特斯没有豆荚的“活迁移”李>
- pod是否会关闭,然后在另一个节点上自动启动?或者这取决于我的配置?(即,pod是否可以通过排水管关闭,而不是在另一个节点上启动)
我希望能对此以及任何最佳实践或建议做出澄清。提前感谢。默认情况下,kubectl排水管是非破坏性的,您必须重写以更改该行为。它使用以下默认值运行: 这些保护措施中的每一种都处理不同类别的潜在破坏(本地数据、裸吊舱、优雅终止、守护程序)。它还尊重pod中断预算,以遵守工作负载可用性。任何非裸pod都将由其各自的控制器(例如
守护程序控制器
,复制控制器
)在新节点上重新创建
这取决于您是否要覆盖该行为(例如,如果运行jenkins作业,您可能有一个空的pod。如果您通过设置
--force=true
进行覆盖,它将删除该pod,并且不会重新创建)。如果不重写它,节点将无限期地处于排放模式(--timeout=0s
)。我只想在的答案中添加一些内容:
您可能会发现这也很有用:
kubectl排水管时实际发生的情况
kubectl排水管
和--干运行
选项也可能是一个好主意,这样您可以在应用任何实际更改之前看到其结果,例如:
kubectl排水管foo——强制——干运行
但是,它不会显示有关现有本地数据或守护程序的任何错误,您可以在不使用--dry run
标志的情况下看到这些错误:
。。。错误:无法删除守护程序集管理的POD(使用--ignore守护程序以忽略).
在对节点执行维护之前,我们可以使用kubectl drain安全地将所有POD从节点中移出 如果要更新、修补或维护硬件/节点,应首先排空所有POD(将POD从一个节点迁移到另一个节点)kubectl drain 当kubectl排水管成功返回时,表明所有吊舱都已安全排出。然后可以安全地关闭节点 维护工作完成后,我们可以使用kubectl uncordon告诉Kubernetes,它可以继续在节点上调度新的POD
--delete-local-data=false
--force=false
--grace-period=-1
--ignore-daemonsets=false
--timeout=0s