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 算法

 

posted @ 2022-06-09 13:27  cptao  阅读(905)  评论(0编辑  收藏  举报