You need to enable JavaScript to run this app.
导航
VCI Pod 驱逐及防护
最近更新时间:2024.07.01 18:05:03首次发布时间:2024.06.20 11:24:32

Pod 驱逐是在 Kubernetes 上运行工作负载的正常行为。VCI 在一些计划或计划外的事件期间,包括不限于节点升级、节点宕机、节点资源运营等场景,可能会驱逐用户的 Pod 工作负载,以确保您使用的底层节点保持健康的状态,以及优化节点资源使用效率。为了保障您应用服务的可用性,我们提供了一系列防护策略,需要您针对您自身业务的特点进行自定义配置。

场景说明

包括但不限于以下场景中,VCI 可能会发起对业务 Pod 的驱逐操作:

  • 节点异常(NotReady):VCI 业务节点由系统管理,用户不需要感知,但用户的业务 Pod 仍需调度和运行在这些节点上。当某个节点宕机或者处于 NotReady 状态时,VCI 将会开启节点自愈流程,此时节点上的 Pod 将会被驱逐。
  • 节点升级:升级节点内核或其他模块时,可能需要触发节点重启操作。在节点重启前,VCI 会先对节点上的所有 Pod 进行驱逐。
  • 资源调度运营:VCI 为了优化资源使用效率,会不定期进行资源运维操作,此时可能会对资源上的一些 Pod 进行驱逐,以进行资源碎片整合等资源效率优化操作。

针对上述驱逐场景,VCI 将其分成如下两类:

  • 异常场景下的被动驱逐:包括节点异常的场景。该场景下,由于已经发生异常并且正在进行自愈,因此对于此类场景中的 Pod 驱逐动作,VCI 不会 做过多防护。
  • 正常场景下的主动驱逐:包括节点升级和资源调度运营。该场景下,由于 Pod 和节点处于正常状态,所以对此类场景的驱逐动作,VCI 会提供一些防护策略。

驱逐防护说明

干扰预算机制

干扰预算机制(Pod Disruption Budgets,简称 PDB)是 Kubernetes 提供的应用级别驱逐防护策略,用于保证驱逐场景 Workload 层面的服务可用性。它可以对任意支持 Scale子资源 的 Workload 类型生效,包括原生的 Deployment 或者您自定义的 CRD。为 Pod 设置 PDB 相关操作,请参见 Kubernetes 官网文档

VCI 防护策略

VCI 的运维防护策略可按如下说明配置:

  • 集群级别配置:通过 vci-profile 文件,配置 Annotation key 为vci.volcengine.com/evict-min-available,value 为百分比(默认为 50%),表示驱逐后允许可用的 Pod 的最小数量。更多操作说明,请参见 通过配置 vci-profile 使用 VCI
  • 应用级别配置:直接通过 Kubernetes PDB 中的 minAvailable 语义配置,详细操作,请参见 Kubernetes 官网文档

如上两种防护策略可以同时存在于同一个集群,并同时生效。

期望运行时长保障

对于一些不可中断的计算型任务,如果您期望这类 Pod 在一定时间内不被主动驱逐,您可以预估一个计算任务执行的最长时间,并通过在 Pod 上添加 Annotation key 为:vci.volcengine.com/evict-delay-time, value 为具体时长(单位为秒)的方式设置期望运行时长。例如:为 Pod 添加 Annotation:vci.volcengine.com/evict-delay-time: 3600,则 VCI 会对该 Pod 发起的主动驱逐进行延后处理,以Pod.Status.StartAt为时间基准,确保 Pod 在此 3600 秒(即 1 小时)之后,才能被主动驱逐。

驱逐通知

VCI 针对驱逐场景下的应用可用性防护,提供了丰富的策略。除宕机等非计划内的被动驱逐场景以外,VCI 默认只按您设置的防护策略和期望运行时长保障进行驱逐动作,并在驱逐前几分钟通过 Kubernetes Event 向您的集群推送事件通知。驱逐通知分为以下三个部分:

  • 主动运维实施前会对受影响的 VCI 实例(Pod)发送实例驱逐通知,该事件的提前通知时间可通过 Annotation:vci.volcengine.com/evict-notification-time进行配置,事件内容将标识具体执行运维操作的时间:

    levelreasonmessage
    WarningEvictNotificationThe pod will be evicted by VCI after {second}, reason: {}
  • 实例驱逐的 Kubernetes 事件内容如下:

    levelreasonmessage
    WarningEvictedPod has been evicted by VCI, reason: {}
  • 防护策略不允许驱逐或驱逐执行失败等情况下,Pod 驱逐被取消的 Kubernetes 事件内容如下:

    levelreasonmessage
    WarningEvictCanceledThe pod evict by VCI is canceled, reason {}

您可以通过事件中心配置相应的告警规则。详细操作,请参见 事件监控

配置信息

VCI 实例运维防护策略和运维处理策略所支持的 Annotation 配置如下表所示。多 VCI 实例情况下,您可以通过 vci-profile 进行全局配置。详细操作,请参见 通过配置 vci-profile 使用 VCI

配置项默认值含义
vci.volcengine.com/evict-min-available50%主动运维时,被驱逐后允许可用的 Pod 的最小数量百分比。
vci.volcengine.com/evict-notification-time600主动运维时,提前通知用户的时间,单位为秒(s)。
vci.volcengine.com/evict-delay-time0主动运维时,延迟执行驱逐的时长,单位为秒(s)。