在 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 主容器创建环境变量
在 podTemplate 中为 kubernetes-plugin 配置时未安装 hostPathVolume