您现在的位置是:首页 >技术教程 >使 kube-prometheus 支持自定义指标HPA网站首页技术教程
使 kube-prometheus 支持自定义指标HPA
简介使 kube-prometheus 支持自定义指标HPA
kube-prometheus 安装之后,虽然安装了prometheus-adapter,但默认是没有注册这个apiservice:v1beta1.custom.metrics.k8s.io,所以默认无法支持自定义指标。
我们可以使用如下yaml 手动注册这个apiservice(这里需要注意service的名prometheus-adapter和namespace要与实际安装的环境对应,如下是kube-prometheus默认值):
apiVersion: apiregistration.k8s.io/v1
kind: APIService
metadata:
labels:
app.kubernetes.io/component: metrics
app.kubernetes.io/name: prometheus-adapter
app.kubernetes.io/part-of: prometheus-adapter
app.kubernetes.io/version: v0.10.0
name: v1beta1.custom.metrics.k8s.io
spec:
group: custom.metrics.k8s.io
groupPriorityMinimum: 100
insecureSkipTLSVerify: true
service:
name: prometheus-adapter
namespace: monitoring
port: 443
version: v1beta1
versionPriority: 100
然后编辑prometheus-adapter的配置文件
kubectl -n monitoring edit cm adapter-config -o yaml
在文件中加入如下内容中rules部分,注意对齐格式。(自定义指标根据自己的实际情况写。可参考这篇文章https://cloud.tencent.com/document/product/457/50125):
apiVersion: v1
data:
config.yaml: |-
"resourceRules":
......
rules:
- metricsQuery: sum(rate(<<.Series>>{<<.LabelMatchers>>}[1m])) by (<<.GroupBy>>)
name:
as: httpserver_requests_qps
matches: httpserver_requests_total
resources:
template: <<.Resource>>
seriesQuery: httpserver_requests_total
修改配置文件之后重启prometheus-adapter pod 以使用新的配置文件
kubectl rollout restart deployment prometheus-adapter -n monitoring
待prometheus-adapter pod成功启动,等待大约几分钟后,使用如下命令,可以查看到 Custom Metrics API 返回配置的 QPS 相关指标。
kubectl get --raw "/apis/custom.metrics.k8s.io/v1beta1"
# 查看具体pod的指标
kubectl get --raw /apis/custom.metrics.k8s.io/v1beta1/namespaces/default/pods/*/httpserver_requests_qps | jq .
然后创建一个HPA(参数值根据实际情况修改)
apiVersion: autoscaling/v2
kind: HorizontalPodAutoscaler
metadata:
name: httpserver
spec:
minReplicas: 1
maxReplicas: 20
scaleTargetRef:
apiVersion: apps/v1
kind: Deployment
name: httpserver
metrics:
- type: Pods
pods:
metric:
name: httpserver_requests_qps
target:
averageValue: 50
type: AverageValue
之后可以通过如下命令验证,如果TARGETS中有值,例如如下的399m而不是<unknown>
则说明已经能够获取到自定义指标了。
kubectl get hpa
# kubectl get hpa
NAME REFERENCE TARGETS MINPODS MAXPODS REPLICAS AGE
httpserver Deployment/httpserver 399m/50 1 10 1 81m
打压
# 获取这个web应用对应的svc的ip地址,在宿主机执行如下命令打压力
for i in {1..100000}; do curl 192.168.152.244/test > /dev/null -s; done;
再通过如下命令观察HPA是否有效。
kubectl get hpa
kubectl get po
风语者!平时喜欢研究各种技术,目前在从事后端开发工作,热爱生活、热爱工作。