Pod 驱逐是在 Kubernetes 上运行工作负载的正常行为。VCI 在一些计划或计划外的事件期间,包括不限于节点升级、节点宕机、节点资源运营等场景,可能会驱逐用户的 Pod 工作负载,以确保您使用的底层节点保持健康的状态,以及优化节点资源使用效率。为了保障您应用服务的可用性,我们提供了一系列防护策略,需要您针对您自身业务的特点进行自定义配置。
包括但不限于以下场景中,VCI 可能会发起对业务 Pod 的驱逐操作:
针对上述驱逐场景,VCI 将其分成如下两类:
干扰预算机制(Pod Disruption Budgets,简称 PDB)是 Kubernetes 提供的应用级别驱逐防护策略,用于保证驱逐场景 Workload 层面的服务可用性。它可以对任意支持 Scale子资源 的 Workload 类型生效,包括原生的 Deployment 或者您自定义的 CRD。为 Pod 设置 PDB 相关操作,请参见 Kubernetes 官网文档。
VCI 的运维防护策略可按如下说明配置:
vci.volcengine.com/evict-min-available
,value 为百分比(默认为 50%),表示驱逐后允许可用的 Pod 的最小数量。更多操作说明,请参见 通过配置 vci-profile 使用 VCI。如上两种防护策略可以同时存在于同一个集群,并同时生效。
对于一些不可中断的计算型任务,如果您期望这类 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
进行配置,事件内容将标识具体执行运维操作的时间:
level | reason | message |
---|---|---|
Warning | EvictNotification | The pod will be evicted by VCI after {second}, reason: {} |
实例驱逐的 Kubernetes 事件内容如下:
level | reason | message |
---|---|---|
Warning | Evicted | Pod has been evicted by VCI, reason: {} |
防护策略不允许驱逐或驱逐执行失败等情况下,Pod 驱逐被取消的 Kubernetes 事件内容如下:
level | reason | message |
---|---|---|
Warning | EvictCanceled | The pod evict by VCI is canceled, reason {} |
您可以通过事件中心配置相应的告警规则。详细操作,请参见 事件监控。
VCI 实例运维防护策略和运维处理策略所支持的 Annotation 配置如下表所示。多 VCI 实例情况下,您可以通过 vci-profile 进行全局配置。详细操作,请参见 通过配置 vci-profile 使用 VCI。
配置项 | 默认值 | 含义 |
---|---|---|
vci.volcengine.com/evict-min-available | 50% | 主动运维时,被驱逐后允许可用的 Pod 的最小数量百分比。 |
vci.volcengine.com/evict-notification-time | 600 | 主动运维时,提前通知用户的时间,单位为秒(s)。 |
vci.volcengine.com/evict-delay-time | 0 | 主动运维时,延迟执行驱逐的时长,单位为秒(s)。 |