Pod 纵向自动扩缩

此页面简要介绍了 Pod 纵向自动扩缩,并为 VerticalPodAutoscaler 自定义资源和相关类型提供参考资料。

概览

Pod 纵向自动扩缩是一种自动扩缩工具,可帮助调整 Pod 的大小,以获取 Pod 所需的最佳 CPU 和内存资源。您无需为 Pod 中的容器设置最新的 CPU 请求和限制以及内存请求和限制,而是可以配置 Pod 纵向自动扩缩功能,以便为 CPU 和内存请求及限制提供建议值,也可以自动更新这些值。

为工作负载设置适当的资源请求和限制对于稳定性和费用效益至关重要。如果 Pod 资源大小低于工作负载所需的大小,则您的应用可能会受到限制,或者由于内存不足错误而发生故障。如果您的资源大小过大,则会造成浪费,并导致帐单增加。如需了解自动扩缩的最佳做法,请参阅在 GKE 上运行针对费用进行优化的 Kubernetes 应用的最佳做法

通过在 GKE 集群中启用 Pod 纵向自动扩缩并创建名为 VerticalPodAutoscaler 的自定义资源定义对象,即可配置 Pod 纵向自动扩缩。对于 Autopilot 集群,Pod 纵向自动扩缩默认处于启用状态;但是,您仍必须通过创建 VerticalPodAutoscaler 对象来配置 Pod 纵向自动扩缩。详细了解如何配置 Pod 纵向自动扩缩

优势

Pod 纵向自动扩缩功能具有以下优势:

  • 因为 Pod 完全用其所需,所以集群节点使用效率高。
  • Pod 会被安排到具有适当可用资源的节点上。
  • 您不必运行耗时的基准测试任务来确定 CPU 和内存请求的正确值。
  • 该自动扩缩程序可以随时调整 CPU 和内存请求,而无需您执行任何操作,所以维护时间更短。

Kubernetes 开源自动扩缩器相比,Google Kubernetes Engine (GKE) Pod 纵向自动扩缩功能具有以下优势:

  • 在确定推荐目标时,会考虑节点大小上限和资源配额。

  • 通知集群自动扩缩器以调整集群容量。

  • 使用历史数据,提供在启用 Pod 纵向自动扩缩器之前收集的指标。

  • 将 Pod 纵向自动扩缩器 Pod 作为控制层面进程运行,而不是作为工作器节点上的部署运行。

限制

  • Pod 纵向自动扩缩功能不会根据资源使用量突然增加生成建议。相反,它会在较长时间段内提供稳定的建议。如果资源使用量突然增加,请使用水平 Pod 自动扩缩器

  • Pod 纵向自动扩缩功能支持每个集群最多 500 个 VerticalPodAutoscaler 对象。

  • 如需将 Pod 纵向自动扩缩与Pod 横向自动扩缩结合使用,请使用多维 Pod 自动扩缩。您还可以配合自定义外部指标来使用 Pod 纵向自动扩缩功能和 Pod 横向自动扩缩功能。

  • Pod 纵向自动扩缩目前还无法用于 JVM 工作负载,因为对此类工作负载的实际内存用量的了解有限。

API 参考文档

这是 v1 API 参考文档。我们强烈建议您使用此版本的 API。

VerticalPodAutoscaler v1 autoscaling.k8s.io

字段

TypeMeta

API 组、版本和种类。

metadata

ObjectMeta

标准对象元数据

spec

VerticalPodAutoscalerSpec

VerticalPodAutoscaler 的预期行为。

status

VerticalPodAutoscalerStatus

最近观察到的 VerticalPodAutoscaler 的状态。

VerticalPodAutoscalerSpec v1 autoscaling.k8s.io

字段
targetRef

CrossVersionObjectReference

引用用于管理一组 Pod 以供自动扩缩器控制的控制器,例如 Deployment 或 StatefulSet 控制器。您可以将 VerticalPodAutoscaler 指向任何具有 Scale 子资源的控制器。一般而言,VerticalPodAutoscaler 从控制器的 ScaleStatus 中检索 Pod 集合。如果是 DaemonSet 等一些众所周知的控制器,VerticalPodAutoscaler 会从控制器的规范中检索 Pod 集合。

updatePolicy

PodUpdatePolicy

指定在 Pod 启动时是否应用推荐的更新,以及在 Pod 的生命周期内是否应用推荐的更新。

resourcePolicy

PodResourcePolicy

指定如何为各个容器调整 CPU 和内存请求的政策。 资源政策可用于设置针对各个容器的建议约束。如果未指定,自动扩缩器将计算 Pod 中所有容器的推荐资源,且不受其他限制。

VerticalPodAutoscalerList v1 autoscaling.k8s.io

字段

TypeMeta

API 组、版本和种类。

metadata

ObjectMeta

标准对象元数据

items

VerticalPodAutoscaler array

VerticalPodAutoscaler 对象的列表。

PodUpdatePolicy v1 autoscaling.k8s.io

字段
updateMode

string

指定在 Pod 启动时是否应用推荐的更新,以及在 Pod 的生命周期内是否应用推荐的更新。可能的值为“关闭”、“初始”、“重新创建”和“自动”。

PodResourcePolicy v1 autoscaling.k8s.io

字段
containerPolicies

ContainerResourcePolicy array

各个容器的一系列资源政策。 每个命名容器最多只能有 1 个条目,可以选择性地使用 `containerName =“*”单个通配符条目,该条目可以处理所有不具有单独政策的容器。

ContainerResourcePolicy v1 autoscaling.k8s.io

字段
containerName

string

政策适用的容器的名称。如果未指定,则政策将用作默认政策。

mode

ContainerScalingMode

指定在容器启动时是否将推荐的更新应用于容器,以及在容器的生命周期内是否应用推荐的更新。可能的值为“关闭”和“自动”。

minAllowed

ResourceList

指定容器允许的最小 CPU 请求和内存请求。

maxAllowed

ResourceList

指定容器允许的最大 CPU 请求和内存请求。

ControlledResources

[]ResourceName

指定将由 VerticalPodAutoscaler 计算(且可能会应用)的建议类型。如果为空,则默认使用 [ResourceCPU, ResourceMemory]

VerticalPodAutoscalerStatus v1 autoscaling.k8s.io

字段
recommendation

RecommendedPodResources

最近推荐的 CPU 和内存请求。

conditions

VerticalPodAutoscalerCondition array

描述 VerticalPodAutoscaler 的当前状态。

RecommendedPodResources v1 autoscaling.k8s.io

字段
containerRecommendation

RecommendedContainerResources array

针对各个容器的一系列资源推荐。

RecommendedContainerResources v1 autoscaling.k8s.io

字段
containerName

string

推荐适用的容器的名称。

target

ResourceList

容器的推荐 CPU 请求和内存请求。

lowerBound

ResourceList

容器的最小推荐 CPU 请求和内存请求。该数量不足以保证应用的稳定性。使用较小的 CPU 和内存请求运行可能会对性能或可用性产生重大影响。

upperBound

ResourceList

容器的最大推荐 CPU 请求和内存请求。高于推荐值的 CPU 和内存请求可能会被浪费。

uncappedTarget

ResourceList

由自动调节程序计算的最新资源推荐基于实际资源使用情况,而不考虑 ContainerResourcePolicy。如果实际资源使用情况会导致目标违反 ContainerResourcePolicy,则可能与限定的建议不同。此字段不会影响实际的资源分配,而是仅用于指示状态。

VerticalPodAutoscalerCondition v1 autoscaling.k8s.io

字段
type

VerticalPodAutoscalerConditionType

正在描述的条件的类型。可能的值为“RecommendationProvided”、“LowConfidence”、“NoPodsMatched”和“FetchingHistory”。

status

ConditionStatus

条件的状态。可能的值为True、False和Unknown。

lastTransitionTime

Time

条件上次从一种状态转换到另一种状态的时间。

reason

string

上次从一种状态转换到另一种状态的原因。

message

string

人类可读的字符串,提供有关上次从一种状态转换到另一种状态的详细信息。

后续步骤