Horizo​​ntal Pod Autoscaler中API版本v2beta1和v2beta2之间的区别?

Aja*_*ity 5 openshift autoscaling kubernetes

https://kubernetes.io/docs/tasks/run-application/horizo​​ntal-pod-autoscale-walkthrough/中的Kubernetes Horizo​​ntal Pod Autoscaler演练说明了我们可以对自定义指标执行自动缩放。我不了解的是何时使用两个API版本:v2beta1和v2beta2。如果有人能解释,我将非常感激。

提前致谢。

Pra*_*dha 8

最初的指标自动缩放/ V2beta1不允许您基于自定义指标来缩放Pod。这仅允许您根据应用程序的使用CPU和扩展来扩展应用memory程序

第二个指标自动缩放/ V2beta2允许用户基于自定义指标自动缩放。它允许基于来自Kubernetes外部的指标进行自动缩放。此API中添加了新的外部指标来源。

metrics:
  - type: Resource
    resource:
      name: cpu
      target:
        type: Utilization
        averageUtilization: 50
Run Code Online (Sandbox Code Playgroud)

它将基于度量标准名称和标签选择器来标识要自动缩放的特定度量标准。这些指标可以来自任何地方,例如堆栈驱动程序或Prometheus监视应用程序,并且可以根据您想扩展应用程序的Prometheus的查询得出。

始终最好使用V2beta2api,因为它可以在CPU和内存以及自定义指标上进行缩放,而V2beta1 API仅可以在内部指标上进行缩放。

我在答案中提到的代码段表示如何在V2beta2API中指定目标CPU利用率

  • GKE 教程使用 v2beta1 和自定义指标:https://cloud.google.com/kubernetes-engine/docs/tutorials/custom-metrics-autoscaling (6认同)
  • 我使用 Prometheus 的自定义指标进行缩放,它与 autoscaling/V2beta1 一起使用。 (4认同)
  • 您知道如何安装/启用 v2beta2 吗?当我运行 `kubectl api-versions` 时它没有出现在列表中 (2认同)
  • 我使用 Prometheus 适配器(https://github.com/DirectXMan12/k8s-prometheus-adapter)扩展了 Prometheus 的自定义指标,并且它与 autoscaling/V2beta1 一起使用 (2认同)
  • 外部指标支持与 v2beta2 无关。检查规格以了解详尽的差异。我们可以注意到的一项重大变化与 v2beta2 中 .spec.behavior 的引入有关 (2认同)

eri*_*sas 5

更新:v2beta1在 1.19 中已弃用,您应该v2beta2继续使用。

此外,在 1.18 中v2beta2添加了新的 api 字段spec.behavior它允许您定义 pod 的缩放速度有多快或多慢。


最初,这两个版本在功能上是相同的,但具有不同的 API。

autoscaling/v2beta2 在 Kubernetes 1.12 版中发布,发行说明指出:

  • 我们发布了 autoscaling/v2beta2,它清理和统一了 API

“清理和统一 API”指的是v2beta2始终使用MetricIdentifierMetricTarget对象的事实:

spec:
  metrics:
    external:
      metric: MetricIdentifier
      target: MetricTarget
    object:
      describedObject: CrossVersionObjectReference
      metric: MetricIdentifier
      target: MetricTarget
    pods:
      metric: MetricIdentifier
      target: MetricTarget
    resource:
      name: string
      target: MetricTarget
    type: string
Run Code Online (Sandbox Code Playgroud)

在 中v2beta1,这些字段具有完全不同的规范,这使得(在我看来)更难弄清楚如何使用。


Kubernetes 1.12 关于 v2beta1 字段的参考:

https://v1-16.docs.kubernetes.io/docs/reference/generated/kubernetes-api/v1.12/#metricspec-v2beta1-autoscaling

Kubernetes 1.12 关于 v2beta2 字段的参考:

https://v1-16.docs.kubernetes.io/docs/reference/generated/kubernetes-api/v1.12/#metricspec-v2beta2-autoscaling