Kubernetes HPA使用Prometheus Node-Exporter的指标

时间:2018-10-12 19:06:57

标签: kubernetes prometheus

我有一个运行某些工作负载的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: 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: Resource                                                                                                                
       resource:  ????????                                                                                                                   
         name:  ???????????                                                                                                           
         target:  ???????????

如果有人可以帮助我指出正确的方向,那将很棒。

谢谢!

1 个答案:

答案 0 :(得分: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和内存指标。