在 Kubernetes 中为 Statefulset 应用 HPA?

Posted

技术标签:

【中文标题】在 Kubernetes 中为 Statefulset 应用 HPA?【英文标题】:apply HPA for Statefulset in kubernetes? 【发布时间】:2019-07-06 21:53:37 【问题描述】:

我正在尝试在 kubernetes 环境中为我的 statefulset(用于 elasticsearch)设置 HPA。我计划使用 cpu 利用率来扩展 statefulset。我已经从https://github.com/stefanprodan/k8s-prom-hpa/tree/master/metrics-server 创建了度量服务器。

我的有状态集的 HPA yaml 如下:

apiVersion: autoscaling/v2beta1
kind: HorizontalPodAutoscaler
metadata:
  name: dz-es-cluster
spec:
  scaleTargetRef:
    apiVersion: extensions/v1beta1
    kind: StatefulSet
    name: dz-es-cluster
  minReplicas: 2
  maxReplicas: 3
  metrics:
  - type: Resource
    resource:
      name: cpu
      targetAverageUtilization: 80

但是在 hpa 中得到如下输出:

Conditions:
  Type         Status  Reason          Message
  ----         ------  ------          -------
  AbleToScale  False   FailedGetScale  the HPA controller was unable to get the target's current scale: the server could not find the requested resource
Events:
  Type     Reason          Age                From                       Message
  ----     ------          ----               ----                       -------
  Warning  FailedGetScale  1m (x71 over 36m)  horizontal-pod-autoscaler  the server could not find the requested resource

有人请帮帮我..

【问题讨论】:

我的kubernetes版本是“v1.8.15” 你能分享kubectl top nodes的输出吗? @PrafullLadha,这些就是输出。 root@ip:~# kubectl top nodes NAME CPU(cores) CPU% MEMORY(bytes) MEMORY% ip-***-20-32-***.ec2.internal 1454m 9% 18392Mi 28% ip-***-20-34-***.ec2.internal 2130m 13% 31761Mi 49% 您的指标服务器运行良好。您是否在 statefulset.xml 中指定了 resources 部分。这是 HPA 工作所需的部分。 kubernetes.io/docs/concepts/configuration/… 我的 statefulset yaml 中有一个资源条目,CPU 限制设置为 1,请求设置为 0.25。是的,我的指标服务器运行良好。我通过自动缩放我的一个部署测试了它的工作。问题仅与 statefulset 相关。 【参考方案1】:

kubernetes 1.9 中添加了对使用 HPA 自动缩放 statefulsets 的支持,因此您的版本不支持它。在 kubernetes 1.9 之后,您可以使用以下方法自动扩展 statefulset:

apiVersion: autoscaling/v1
kind: HorizontalPodAutoscaler
metadata:
  name: YOUR_HPA_NAME
spec:
  maxReplicas: 3
  minReplicas: 1
  scaleTargetRef:
    apiVersion: apps/v1
    kind: StatefulSet
    name: YOUR_STATEFUL_SET_NAME
  targetCPUUtilizationPercentage: 80

更多信息请参考以下链接:

https://github.com/kubernetes/kubernetes/issues/44033

【讨论】:

以上是关于在 Kubernetes 中为 Statefulset 应用 HPA?的主要内容,如果未能解决你的问题,请参考以下文章

在 Kubernetes Init 容器中为 Kubernetes 主容器创建环境变量

如何在 Kubernetes 中为容器设置 ulimit?

在 Kubernetes 中为 kubectl 创建用户

在 podTemplate 中为 kubernetes-plugin 配置时未安装 hostPathVolume

有没有办法在 kubernetes 部署(或 statefulset)中为每个 pod 创建一个持久卷?

如何在 Ignite XML 配置中为 Kubernetes IP Finder 设置 Master Url