Kubernetes Pod Horizo​​ntal Autoscaler pod 和对象选择器字段是字符串吗?

Posted

技术标签:

【中文标题】Kubernetes Pod Horizo​​ntal Autoscaler pod 和对象选择器字段是字符串吗?【英文标题】:Kubernetes Pod Horizontal Autoscaler pod and object selector field is a string? 【发布时间】:2020-10-29 13:37:04 【问题描述】:

https://kubernetes.io/docs/tasks/run-application/horizontal-pod-autoscale-walkthrough/ 的 HPA 文档提供了 selector 属性的两个示例,一个用于 pod,另一个用于对象度量类型。这些示例之一是嵌套对象,另一个是字符串。例如:

- type: External
  external:
    metric:
      name: queue_messages_ready
      selector: "queue=worker_tasks"
    target:
      type: AverageValue
      averageValue: 30

type: Object
object:
  metric:
    name: http_requests
    selector: matchLabels: verb: GET

https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.18/#metricidentifier-v2beta2-autoscaling 的 API 文档为 selector 字段提供此描述:

选择器是给定指标的标准 kubernetes 标签选择器的字符串编码形式

这是否意味着您可以将selector 属性定义为字符串(例如selector: "matchLabels: verb: GET")以及嵌套对象?

【问题讨论】:

【参考方案1】:

原来选择器必须是地图,否则会出现以下错误:

error: error validating "customresource.yml": error validating data: ValidationError(HorizontalPodAutoscaler.spec.metrics[0].object.metric.selector): invalid type for io.k8s.apimachinery.pkg.apis.meta.v1.LabelSelector: got "string", expected "map"; if you choose to ignore these errors, turn validation off with --validate=false 

这也适用于外部指标类型,因此 K8s 文档在提供传递字符串的示例时似乎不正确。

【讨论】:

以上是关于Kubernetes Pod Horizo​​ntal Autoscaler pod 和对象选择器字段是字符串吗?的主要内容,如果未能解决你的问题,请参考以下文章

Kubernetes Horizo​​ntal Pod Autoscaler 如何计算多容器 Pod 的 CPU 利用率?

如何在 Kubernetes Horizo​​ntal Pod Autoscaling 中排除一些容器的指标

难以使用外部指标配置 Horizo​​ntal Pod Autoscaler

Kubernetes pod cpu 使用率计算方法 HPA

如何防止在 Kubernetes 中由 HPA 创建的特定时间段内新扩展的 Pod 缩减?

使用 Horizo​​ntal Pod Autoscaling 以及资源请求和限制