k8s 自定義HPA指標-container 網絡流量
除了基于 CPU 和內存來進行自動擴縮容之外,我們還可以根據自定義的監控指標來進行。這個我們就需要使用 Prometheus Adapter,Prometheus 用于監控應用的負載和集群本身的各種指標,Prometheus Adapter 可以幫我們使用 Prometheus 收集的指標并使用它們來制定擴展策略,這些指標都是通過 APIServer 暴露的,而且 HPA 資源對象也可以很輕易的直接使用。下面直接說如何配置使用容器的網絡出入流量進配置HPA。
1、k8s 集群配置prometheus監控,本司采用rancher管理的k8s集群,在rancher中web直接配置就可完成,此處不再贅述。
2、為prometheus配置一個可以訪問的域名,后面 prometheus-adapter 需要調用。
3、配置 prometheus-adapter
$ helm repo add prometheus-community https://prometheus-community.github.io/helm-charts $ helm repo update $ helm install --namespace cattle-prometheus --name prometheus-adapter prometheus-community/prometheus-adapter --set prometheus.url=http://demo.prome.com --set prometheus.port=80 --set logLevel=6
4、檢查配置是否生效
kubectl get --raw /apis/custom.metrics.k8s.io/v1beta1|jq . # 輸出如下內容 { "kind": "APIResourceList", "apiVersion": "v1", "groupVersion": "custom.metrics.k8s.io/v1beta1", "resources": [ { "name": "nodes/nginx_ingress_controller_nginx_process_virtual_memory_bytes", "singularName": "", "namespaced": false, "kind": "MetricValueList", "verbs": [ "get" ] }, { "name": "pods/alertmanager_http_response_size_bytes_bucket", "singularName": "", "namespaced": true, "kind": "MetricValueList", "verbs": [ "get" ] }, { "name": "jobs.batch/alertmanager_oversize_gossip_message_duration_seconds_bucket", "singularName": "", "namespaced": true, "kind": "MetricValueList", "verbs": [ "get" ] } ......
5、 修改 prometheus-adapter configmap配置文件,新增如下信息:
- seriesQuery: 'container_network_receive_bytes_total{namespace!="",pod_name!=""}' resources: overrides: namespace: {resource: "namespace"} pod_name: {resource: "pod"} name: matches: "^(.*)" as: "container_network_receive_bytes_total_3m" metricsQuery: 'sum(rate(<<.Series>>{<<.LabelMatchers>>}[3m])) by (<<.GroupBy>>)' - seriesQuery: 'container_network_transmit_bytes_total{namespace!="",pod_name!=""}' resources: overrides: namespace: {resource: "namespace"} pod_name: {resource: "pod"} name: matches: "^(.*)" as: "container_network_transmit_bytes_total_3m" metricsQuery: 'sum(rate(<<.Series>>{<<.LabelMatchers>>}[3m])) by (<<.GroupBy>>)'
6、配置HPA

保存后:

如上圖,保存后 "000m" 會被省略掉。m 代表毫秒,m前面是數字是字節。
至此,配置完成。
7、HPA 算法

浙公網安備 33010602011771號