当耗尽Kubernetes集群中的节点时会发生什么?

时间:2019-07-03 01:31:43

标签: kubernetes kubectl

当您耗尽Kubernetes集群中的节点时,我想澄清一些维护准备工作:

当您运行kubectl drain MY_NODE时,这就是我所知道的:

  • 节点被封锁
  • Pod已正常关闭
  • 您可以选择忽略Daemonset吊舱,因为如果将其关闭,它们将立即重新生成。

我对节点耗尽时会发生什么感到困惑。

问题:

  • 豆荚怎么办?据我所知,Kubernetes中没有Pod的“实时迁移”。
  • 是否会关闭Pod,然后在另一个节点上自动启动它?还是这取决于我的配置? (即,是否可以通过排水将豆荚关闭而不在另一个节点上启动)

我希望对此有所澄清,以及任何最佳做法或建议。预先感谢。

3 个答案:

答案 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的答案中添加一些内容:

您可能会发现它也很有用:

  1. Link到官方文档(以防默认标志更改等)。根据它:

      

    'drain'逐出或删除除镜像pod之外的所有pod   无法通过API服务器删除)。如果有   由DaemonSet管理的广告连播,如果没有   --ignore-daemonsets,并且无论它不会删除任何由DaemonSet管理的Pod,因为这些Pod会立即   替换为DaemonSet控制器,该控制器会忽略无法计划的   标记。是否有既不是镜像容器也不是镜像容器的容器   由ReplicationController,ReplicaSet,DaemonSet,StatefulSet管理   或Job,则除非您使用--force,否则排水将不会删除任何吊舱。   如果一个或多个Pod的管理资源丢失,--force也将允许删除操作进行。

  2. 简单的chart说明了使用kubectl drain时实际发生的情况。

  3. 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调度到该节点上。