kubernetes - 如何获取可用于 HPA 的指标列表?
问题描述
我想使用HPA扩展应用程序
基于对指标的支持
HPA能够从
metrics.k8s.io(资源指标)
custom.metrics.k8s.io(自定义指标)
external.metrics.k8s.io(外部指标)
我如何检查可用的指标?我怎么能自己尝试这个API?有可能吗?
附言
根据建议的答案,我执行了命令:
kubectl get --raw https://MY-KUBE-APISERVER-IP:6443/apis/metrics.k8s.io/v1beta1/namespaces/default/pods
回应是:
{
"items": [
{
"metadata": {
"name": "prometheus-adapter-69fcdd56bc-2plh7",
"namespace": "default",
"selfLink": "/\r\napis/metrics.k8s.io/v1beta1/namespaces/default/pods/prometheus-adapter-69fcdd56bc-2plh7",
"creationTimestamp": "2020-02-05T10:56:02Z"
},
"timestamp": "2020-02-05T10:55:22Z",
"window": "30s",
"containers": [
{
"name": "prometheus-adapter",
"usage": {
"cpu": "15\r\n31939n",
"memory": "10408Ki"
}
}
]
},
{
"metadata": {
"name": "stackdriver-exporter-76fdbc9d8f-c285l",
"namespace": "default",
"selfLink": "/apis/metrics.k8s.io/v1beta1/namespaces/default/pods/stackdriver-exporter-76fdbc9d8f-c285l",
"creationTimestamp": "2020-0\r\n2-05T10:56:02Z"
},
"timestamp": "2020-02-05T10:55:22Z",
"window": "30s",
"containers": [
{
"name": "stackdriver-exporter",
"usage": {
"cpu": "79340n",
"memory": "2000Ki"
}
}
]
}
],
"kind": "PodMetricsList",
"apiVersion": "metrics.k8s.io/v1beta1",
"metadata": {
"selfLink": "/apis/metrics.k8s.io/v1beta1/namespaces/default/pods"
}
}
$ kubectl top pods
NAME CPU(cores) MEMORY(bytes)
prometheus-adapter-69fcdd56bc-2plh7 2m 10Mi
stackdriver-exporter-76fdbc9d8f-c285l 1m 1Mi
但我仍然没有看到所有可用于 HPA 的指标
解决方案
指标服务器通过以下 API 公开指标。
/nodes
- 所有节点指标;type []NodeMetrics
/nodes/{node}
- 指定节点的指标;type NodeMetrics
/namespaces/{namespace}/pods
- 命名空间内的所有 pod 指标,支持所有命名空间;type []PodMetrics
/namespaces/{namespace}/pods/{pod}
- 指定 pod 的指标;type PodMetrics
例如,您可以查看以下可用指标
$ kubectl get --raw https://KUBE-APISERVER-IP:6443/apis/metrics.k8s.io/v1beta1
{
"kind": "APIResourceList",
"apiVersion": "v1",
"groupVersion": "metrics.k8s.io/v1beta1",
"resources": [
{
"name": "nodes",
"singularName": "",
"namespaced": false,
"kind": "NodeMetrics",
"verbs": [
"get",
"list"
]
},
{
"name": "pods",
"singularName": "",
"namespaced": true,
"kind": "PodMetrics",
"verbs": [
"get",
"list"
]
}
]
}
$ kubectl get --raw https://KUBE-APISERVER-IP:6443/apis/metrics.k8s.io/v1beta1/namespaces/default/pods
{
"kind": "PodMetricsList",
"apiVersion": "metrics.k8s.io/v1beta1",
"metadata": {
"selfLink": "/apis/metrics.k8s.io/v1beta1/namespaces/default/pods"
},
"items": []
}
$ kubectl get --raw https://KUBE-APISERVER-IP:6443/apis/metrics.k8s.io/v1beta1/namespaces/kube-system/pods
{
"kind": "PodMetricsList",
"apiVersion": "metrics.k8s.io/v1beta1",
"metadata": {
"selfLink": "/apis/metrics.k8s.io/v1beta1/namespaces/kube-system/pods"
},
"items": [
{
"metadata": {
"name": "coredns-bcccf59f-jfl6x",
"namespace": "kube-system",
"selfLink": "/apis/metrics.k8s.io/v1beta1/namespaces/kube-system/pods/coredns-bcccf59f-jfl6x",
"creationTimestamp": "2021-02-17T20:31:29Z"
},
"timestamp": "2021-02-17T20:30:27Z",
"window": "30s",
"containers": [
{
"name": "coredns",
"usage": {
"cpu": "1891053n",
"memory": "8036Ki"
}
}
]
},
{
"metadata": {
"name": "coredns-bcccf59f-vmfvv",
"namespace": "kube-system",
"selfLink": "/apis/metrics.k8s.io/v1beta1/namespaces/kube-system/pods/coredns-bcccf59f-vmfvv",
"creationTimestamp": "2021-02-17T20:31:29Z"
},
"timestamp": "2021-02-17T20:30:25Z",
"window": "30s",
"containers": [
{
"name": "coredns",
"usage": {
"cpu": "1869226n",
"memory": "8096Ki"
}
}
]
}
]
}
您还可以使用kubectl top pods
内部调用上述 API 的命令。
自定义指标
这些由供应商开发的适配器提供,可用的指标取决于适配器。一旦您知道指标名称,您就可以使用API来访问它。
您可以如下查看可用指标并获取指标名称。
kubectl get --raw https://KUBE-APISERVER-IP:6443/apis/custom.metrics.k8s.io/v1beta1
外部指标
这些由供应商开发的适配器提供,可用的指标取决于适配器。一旦您知道指标名称,您就可以使用API来访问它。
您可以如下查看可用指标并获取指标名称。
kubectl get --raw https://KUBE-APISERVER-IP:6443/apis/external.metrics.k8s.io/v1beta1
编辑:
您已经拥有 Prometheus 适配器,但如果该指标未作为自定义指标公开以供 HPA 使用,那么您需要公开所需的指标。请参阅本指南。
推荐阅读
- java - Spring Framework - 如何将目录作为资源注入?
- javascript - 格式化 *ngFor 的 httpclient 响应?
- sql-server - 如何从 Excel 复制记录并粘贴到 SSMS V 17 以更新现有记录
- docker - Docker swarm 无法解析其他节点上的服务名称
- java - Android Studio 中的 SQLite 数据库返回 NullPointerException
- reactjs - 无法从 coinmarketcap (reactjs) 引用对象
- python - 将 cx_Freeze msi 添加到路径
- python - 注释中不允许使用 OuterRef?
- python - 将 JSON 响应从 Ruby 映射到 Python
- javascript - 将 API 密钥设置为 XMLHttpRequest 的标头