当您耗尽Kubernetes集群中的节点时,我想澄清一些维护准备工作:
当您运行kubectl drain MY_NODE
时,这就是我所知道的:
我对节点耗尽时会发生什么感到困惑。
问题:
我希望对此有所澄清,以及任何最佳做法或建议。预先感谢。
答案 0 :(得分:0)
默认情况下,<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<script src="https://code.highcharts.com/highcharts.js"></script>
<script src="https://code.highcharts.com/modules/broken-axis.js"></script>
<div id="container" style="min-width: 310px; height: 400px; margin: 0 auto"></div>
是非破坏性的,您必须重写以更改该行为。它使用以下默认值运行:
kubectl drain
每个保护措施都涉及不同类别的潜在破坏(本地数据,裸荚,正常终止,守护程序)。它还尊重容器中断预算以遵守工作负载可用性。任何非裸豆荚都将由其各自的控制器(例如 --delete-local-data=false
--force=false
--grace-period=-1
--ignore-daemonsets=false
--timeout=0s
,daemonset controller
)在新节点上重新创建。
由您决定是否要覆盖该行为(例如,如果运行jenkins作业,您可能会拥有裸豆荚。如果通过设置replication controller
进行覆盖,它将删除该豆荚,并且不会重新创建该豆荚)。如果不覆盖它,则该节点将无限期处于耗尽模式(--force=true
)。
答案 1 :(得分:0)
我只想在eamon1234的答案中添加一些内容:
您可能会发现它也很有用:
Link到官方文档(以防默认标志更改等)。根据它:
'drain'逐出或删除除镜像pod之外的所有pod 无法通过API服务器删除)。如果有 由DaemonSet管理的广告连播,如果没有 --ignore-daemonsets,并且无论它不会删除任何由DaemonSet管理的Pod,因为这些Pod会立即 替换为DaemonSet控制器,该控制器会忽略无法计划的 标记。是否有既不是镜像容器也不是镜像容器的容器 由ReplicationController,ReplicaSet,DaemonSet,StatefulSet管理 或Job,则除非您使用--force,否则排水将不会删除任何吊舱。 如果一个或多个Pod的管理资源丢失,--force也将允许删除操作进行。
简单的chart说明了使用kubectl drain
时实际发生的情况。
将kubectl drain
与--dry-run
选项一起使用也是一个好主意,因此您可以在应用任何实际更改之前先查看其结果,例如:
kubectl drain foo --force --dry-run
但是,它不会显示有关现有本地数据或守护程序集的任何错误,您可以使用--dry-run
标志来查看这些错误:
... error: cannot delete DaemonSet-managed Pods (use --ignore-daemonsets to ignore) ...
答案 2 :(得分:0)
在对节点执行维护之前,我们可以使用 kubectl排水安全地从节点上逐出所有吊舱。
如果要在硬件/节点上进行更新或打补丁或进行任何形式的维护,则应先排干所有Pod(将Pod从一个节点迁移到另一个节点) kubectl排水
当kubectl排水管成功返回时,表明所有吊舱已被安全逐出。然后放下节点很安全
维护工作结束后,我们可以使用 kubectl uncordon 告诉Kubernetes,它可以继续将新的pod调度到该节点上。