Kubernetes HPA 与 Prometheus Node-Exporter 的指标
Posted
技术标签:
【中文标题】Kubernetes HPA 与 Prometheus Node-Exporter 的指标【英文标题】:Kubernetes HPA with metrics from Prometheus Node-Exporter 【发布时间】:2019-03-18 01:08:14 【问题描述】:我有一个运行我的一些工作负载的 kubernetes v1.12.1 集群。我想设置 HPA,以便我可以根据来自 Prometheus Node-Exporter 的指标来扩展特定的 POD。
我的第一个问题是,是否可以对“POD”度量命名空间之外的度量执行 HPA?如果是这样,那么这就是我想要做的其余部分。我已经设置 Prometheus Node-Exporter 来收集机器/节点指标并将它们发送到 Prometheus。 Prometheus 通过 prometheus 适配器将这些发送到 Kubernetes。我想根据这些节点指标值之一执行 POD 自动缩放。
例如,如果:node_netstat_Udp_NoPorts >= '1',我会想扩展一个额外的 POD。另一个如果 node_sockstat_udp_mem >= '87380' 我还想横向扩展并对主机执行轻微的内核级别修改。
我遇到的问题是,我找不到任何关于如何为 POD 设置 HPA 的示例,其中自定义指标不属于“POD”指标命名空间。
正如您在下面我的 API get 命令中看到的那样,这些指标向我公开。
<pre>
ᐅ kubectl get --raw /apis/custom.metrics.k8s.io/v1beta1|jq .|grep -i udp
"name": "jobs.batch/node_netstat_Udp_InErrors",
"name": "roles.rbac.authorization.k8s.io/node_netstat_Udp6_NoPorts",
"name":
"roles.rbac.authorization.k8s.io/node_netstat_UdpLite6_InErrors",
"name": "jobs.batch/node_netstat_Udp_InDatagrams",
"name": "jobs.batch/node_sockstat_UDP_mem_bytes",
"name": "jobs.batch/node_sockstat_UDP_inuse",
"name":
"roles.rbac.authorization.k8s.io/node_netstat_Udp_InDatagrams",
"name": "jobs.batch/node_sockstat_UDP_mem",
"name": "jobs.batch/node_netstat_Udp_NoPorts",
"name": "roles.rbac.authorization.k8s.io/node_sockstat_UDP_mem",
"name": "roles.rbac.authorization.k8s.io/node_netstat_Udp_NoPorts",
"name": "jobs.batch/node_netstat_Udp6_OutDatagrams",
"name": "jobs.batch/node_netstat_Udp6_NoPorts",
"name": "jobs.batch/node_netstat_UdpLite6_InErrors",
"name": "roles.rbac.authorization.k8s.io/node_netstat_Udp6_InErrors",
"name":
"roles.rbac.authorization.k8s.io/node_netstat_Udp6_InDatagrams",
"name":
"roles.rbac.authorization.k8s.io/node_netstat_Udp6_OutDatagrams",
"name": "roles.rbac.authorization.k8s.io/node_sockstat_UDP_inuse",
"name":
"roles.rbac.authorization.k8s.io/node_sockstat_UDP_mem_bytes",
"name": "jobs.batch/node_netstat_Udp6_InDatagrams",
"name": "jobs.batch/node_netstat_Udp_OutDatagrams",
"name":
"roles.rbac.authorization.k8s.io/node_netstat_UdpLite_InErrors",
"name": "jobs.batch/node_netstat_UdpLite_InErrors",
"name":
"roles.rbac.authorization.k8s.io/node_sockstat_UDPLITE_inuse",
"name": "jobs.batch/node_netstat_Udp6_InErrors",
"name":
"roles.rbac.authorization.k8s.io/node_netstat_Udp_OutDatagrams",
"name": "jobs.batch/node_sockstat_UDPLITE_inuse",
"name": "roles.rbac.authorization.k8s.io/node_netstat_Udp_InErrors"
</pre>
我只是不明白如何将其中一个添加到 HPA 描述符中:
apiVersion:自动缩放/v2beta2 种类:HorizontalPodAutoscaler 元数据: 名称:atl 命名空间:黑洞 规格: 规模目标参考: api版本:应用程序/v1 种类:部署 名称:真棒应用 minReplicas: 1 最大副本数:10 指标: - 类型:资源 资源:?????? 姓名: ??????????? 目标: ???????????如果有人能帮助我指出正确的方向,那就太好了。
谢谢!
【问题讨论】:
如果您的指标来自节点导出器,为什么它们都与工作和角色相关联?您的 Prometheus Adapter 配置是什么(或者您使用的是哪个 Custom Metrics API 服务器)? 【参考方案1】:文档有点粗略,但我相信你会使用这样的东西:
apiVersion: autoscaling/v2beta2
kind: HorizontalPodAutoscaler
metadata:
name: atl
namespace: blackhole
spec:
scaleTargetRef:
apiVersion: apps/v1
kind: Deployment
name: awesome-app
minReplicas: 1
maxReplicas: 10
metrics:
- type: Object
object:
metric:
name: node_sockstat_UDP_inuse
describedObject:
apiVersion: extensions/v1beta1
kind: Job
name: your-job-name
target:
kind: Value
value: 20
根据docs type: Resource
默认情况下仅限于 CPU 和内存指标。
【讨论】:
谢谢,我会试试这个。非常感谢!以上是关于Kubernetes HPA 与 Prometheus Node-Exporter 的指标的主要内容,如果未能解决你的问题,请参考以下文章
Docker&Kubernetes ❀ Kubernetes集群Pod控制器 - Horizontal Pod Autoscaler(HPA)
Kubernetes HPA 与 Prometheus Node-Exporter 的指标