基于Dolphin插件提供容器网络指标实现应用弹性伸缩
一 背景
鉴于kubernetes组件暴露的容器网络指标有限,cadvisor只暴露了基本的容器网络指标。在给应用配置弹性伸缩策略时,容器网络相关的指标选择局限性比较大。
二 简介
通过CCE 网络指标插件提供的多种容器网络指标结合prometheus插件配置应用自定义指标弹性伸缩策略。
CCE容器网络扩展指标插件(dolphin)是一款容器网络流量监控管理插件,支持Pod粒度和flow粒度的IP、UDP和TCP协议监控。监控信息已适配Prometheus格式,可以通过调用Prometheus接口查看监控数据。
关于dolphin能监控哪些网络指标,可前往官网查看:
https://support.huaweicloud.com/usermanual-cce/cce_10_0371.html
三 实践演示
3.1 前提准备
- 创建集群 集群类型必须为turbo集群
- 创建节点 节点os须为HCE2.0 或者Eurlos2.9
- CCE插件市场安装插件Dolphin和Kube-prometheus-stack
3.2 创建dolphin监控任务
- 通过创建MonitorPolicy的方式下发监控任务,dolphin 组件会根据相关配置采集节点上容器的网络流量指标
apiVersion: crd.dolphin.io/v1 kind: MonitorPolicy metadata: name: monitor-test #监控任务名 namespace: kube-system #必填,namespace必须为kube-system spec: selector: #选填,配置dolphin插件监控的后端,形如labelSelector格式,默认将监控本节点所有容器 matchExpressions: - key: app operator: In values: - depart-a podLabel: [app] #选填,用户标签 ip4Tx: #选填,ipv4发送报文数和发送字节数这两个指标的开关,默认不开 enable: true ip4Rx: #选填,ipv4接收报文数和接收字节数这两个指标的开关,默认不开 enable: true ip4TxInternet: #选填,ipv4发送公网报文数和发送公网字节数这两个指标的开关,默认不开 enable: true monitor: ip: ipReceive: aggregateType: pod #选填,支持填写"pod"或"flow",分别表示pod粒度监控或流粒度监控 ipSend: aggregateType: pod #选填,支持填写"pod"或"flow",分别表示pod粒度监控或流粒度监控 tcp: tcpReceive: aggregateType: pod #选填,支持填写"pod"或"flow",分别表示pod粒度监控或流粒度监控 tcpSend: aggregateType: pod #选填,支持填写"pod"或"flow",分别表示pod粒度监控或流粒度监控 tcpRetrans: aggregateType: pod #选填,支持填写"pod"或"flow",分别表示pod粒度监控或流粒度监控 tcpRtt: aggregateType: pod #选填,支持填写"flow",表示流粒度监控,单位:微秒 tcpNewConnection: aggregateType: pod #选填,支持填写"pod",表示pod粒度监控 tcpDrop: aggregateType: pod #选填,支持填写"pod"或"flow",分别表示pod粒度监控或流粒度监控 tcpConnectionFailure: aggregateType: pod #选填,支持填写"pod",表示pod粒度监控 udp: udpReceive: aggregateType: pod #选填,支持填写"pod"或"flow",分别表示pod粒度监控或流粒度监控 udpSend: aggregateType: pod #选填,支持填写"pod"或"flow",分别表示pod粒度监控或流粒度监控
- 确认dolphin监控任务生效,访问dolphin metrics端口查看相关指标
3.3 配置Prometheus指标采集任务
-
通过配置PodMonitor,Prometheus就会自动采集CCE容器网络扩展指标
apiVersion: monitoring.coreos.com/v1 kind: PodMonitor metadata: name: dolphin namespace: monitoring spec: namespaceSelector: matchNames: - kube-system jobLabel: podmonitor-dolphin podMetricsEndpoints: - interval: 15s path: /metrics port: dolphin tlsConfig: insecureSkipVerify: true metricRelabelings: - sourceLabels: [exported_pod] targetLabel: kubernetes_namespace regex: (.*)/(.*) action: replace replacement: $1 - sourceLabels: [exported_pod] targetLabel: kubernetes_pod regex: (.*)/(.*) action: replace replacement: $2 selector: matchLabels: app: dolphin
-
确认Prometheus采集成功并存储指标
查看指标:
3.4 配置指标转换规则、并注册相关API接口
-
Prometheus有指标数据源之后,需要将指标格式进行转换
kubectl -n monitoring edit configmap user-adapter-config
在rules规则下面添加:- seriesQuery: '{__name__=~"dolphin_ip_receive_pkt"}' # 指标名称,示例使用的是ip接受报文数 resources: overrides: kubernetes_pod: resource: pod kubernetes_namespace: resource: namespace name: #将指标进行重命名,更加可读 matches: dolphin_ip_receive_pkt as: pod_ip_receive_pkt_per_second metricsQuery: sum(rate(<<.Series>>{<<.LabelMatchers>> ,ipfamily="ipv4"}[3m])) by (<<.GroupBy>>) #将指标量换算成速率,3min内每秒接受多少报文
-
重启custome-metrics-apiserver负载实例
-
确认自定义指标接口注册到apiserver
kubectl get --raw="/apis/custom.metrics.k8s.io/v1beta1/namespaces/default/pods/*/pod_ip_receive_pkt_per_second" |jq
接口有数据返回,即表示custom metrics API注册成功
3.5 配置HPA弹性伸缩策略
-
对目标应用配置指定指标和弹性伸缩阈值
apiVersion: autoscaling/v2 kind: HorizontalPodAutoscaler metadata: name: app-a-hpa spec: scaleTargetRef: apiVersion: apps/v1 kind: Deployment name: app-a minReplicas: 1 maxReplicas: 10 metrics: - type: Pods pods: metric: name: pod_ip_receive_pkt_per_second target: type: AverageValue averageValue: 15
-
查看对应HPA规则
-
对应用压测,测试扩容效果
开始压测后,可以发现容器网络指标迅速爬升。HPA规则开始生效,触发扩容
-
停止压测,测试缩容效果
查看HPA缩容动态变化,直至最后缩容到最小实例数
查看HPA事件,记录了扩缩容操作
四 备注
- 关于dolphin插件使用详情,请参考:https://support.huaweicloud.com/usermanual-cce/cce_10_0371.html
- 点赞
- 收藏
- 关注作者
评论(0)