我们将 HPA 与 GKE 中 Java 应用程序的自定义指标结合使用。不过,我们想使用
untyped
指标。
到目前为止,我们做到了:
然后我们创建了一些 HPA 来响应 JVM 堆使用的总内存。它起作用了,豆荚被放大和缩小:
apiVersion: autoscaling/v2
kind: HorizontalPodAutoscaler
metadata:
name: my-autoscale
namespace: somenamespace
spec:
maxReplicas: 3
metrics:
- pods:
metric:
name: prometheus.googleapis.com|jvm_memory_bytes_used|gauge
selector:
matchLabels:
metric.labels.area: heap
target:
averageValue: 2G
type: AverageValue
type: Pods
minReplicas: 1
scaleTargetRef:
apiVersion: apps/v1
kind: Deployment
name: my-java-app
现在,我们想让它响应
java_lang_threading_threadcount
指标。根据它的描述,是untyped
:
# HELP java_lang_threading_threadcount java.lang:name=null,type=Threading,attribute=ThreadCount
# TYPE java_lang_threading_threadcount untyped
java_lang_threading_threadcount 123.0
按照 Stackdriver adatper 的文档说明,我转到 Metrics Explorer 并获取指标的全名:
因此,完全限定的指标名称是
prometheus.googleapis.com/java_lang_threading_threadcount/unknown
。
我将其添加到 HPA 规范并应用它:
apiVersion: autoscaling/v2
kind: HorizontalPodAutoscaler
metadata:
name: my-autoscale
namespace: somenamespace
spec:
maxReplicas: 3
metrics:
- pods:
metric:
name: prometheus.googleapis.com|java_lang_threading_threadcount|unknown
selector:
matchLabels:
metric.labels.area: heap
target:
averageValue: 200
type: AverageValue
type: Pods
minReplicas: 1
scaleTargetRef:
apiVersion: apps/v1
kind: Deployment
name: my-java-app
但是没有用:我收到了这条消息:
$ k get hpa -o yaml my-autoscale | grep unable -A7
message: 'the HPA was unable to compute the replica count: unable to get metric
prometheus.googleapis.com|java_lang_threading_threadcount|unknown: unable to
fetch metrics from custom metrics API: googleapi: Error 404: Cannot find metric(s)
that match type = "prometheus.googleapis.com/java_lang_threading_threadcount/unknown"
label = area label = pod. If a metric was created recently, it could take up
to 10 minutes to become available. Please try again soon., notFound'
reason: FailedGetPodsMetric
status: "False"
type: ScalingActive
如果不是的话,指标的名称应该是什么
prometheus.googleapis.com/java_lang_threading_threadcount/unknown
?
指标的名称实际上是正确的。问题是我们忘记了在斑点中与之前的指标一起使用的指标标签!
- pods:
metric:
name: prometheus.googleapis.com|java_lang_threading_threadcount|unknown
selector:
matchLabels:
metric.labels.area: heap
target:
通过删除度量标签,我们让 HPA 发挥作用。