基于istio提供的七层流量指标实现应用自动弹性伸缩
一 背景
微服务接入istio服务网格后,istio除了提供流量治理的能力外,还为服务网格中的服务流量提供了非侵入式的prometheus指标数据。极大的方便了运维统计微服务的网络运行情况,尤其是东西向流量的指标数据。我们可以将这些指标数据加以利用提升集群服务的稳定性
二 简介
基于istio代理提供的流量指标 istio_requests_total
进行HPA的配置。
关于istio能提供哪些指标,请参考: https://istio.io/latest/zh/docs/reference/config/metrics/
三 实践操作
3.1 前提准备
- 集群安装kube-prometheus-stack插件,可选择server模式(本地存储指标数据)
3.2 配置Prometheus监控任务
-
CCE prometheus插件已经集成相关PodMonitor配置,如果是自建prometheus 请参考如下配置:
kind: PodMonitor apiVersion: monitoring.coreos.com/v1 metadata: labels: app: istio name: istio namespace: monitoring spec: jobLabel: istio namespaceSelector: any: true podMetricsEndpoints: - honorLabels: true interval: 15s metricRelabelings: - action: keep regex: istio.* sourceLabels: - __name__ path: /stats/prometheus relabelings: - action: keep regex: http-envoy-prom sourceLabels: - __meta_kubernetes_pod_container_port_name - action: labeldrop regex: (job|instance|namespace|pod|container) selector: {}
-
Prometheus 控制台查看istio相关指标
监控任务成功加载:
详细指标数据:
关于指标标签解释:
3.3 Prometheus-adapter 配置指标转换规则
-
转换规则的目的是将原生prometheus格式的指标按照k8s集群资源进行适配,然后将指标总量转换为速率
- seriesQuery: '{__name__=~"istio_requests_total"}' resources: overrides: destination_pod: resource: pod destination_service_namespace: resource: namespace name: matches: istio_requests_total as: http_requests_per_second metricsQuery: sum(rate(<<.Series>>{<<.LabelMatchers>>,reporter="destination"}[1m])) by (<<.GroupBy>>)#将指标量换算成速率
将上述配置加载到prometheus-adaptor中,加载方式为:
kubectl -n monitoring edit cm user-adapter-config
-
重启负载实例
手动删除monitoring 命名空间下的custome-metrics-apiserver负载实例,新pod实例会加载上述添加的规则
-
确认custom metricsAPI能暴露自定义指标
kubectl get --raw="/apis/custom.metrics.k8s.io/v1beta1/namespaces/xxx/pods/*/http_requests_per_second" |jq
3.4 配置HPA弹性伸缩策略
-
对目标应用配置指定指标和弹性伸缩阈值
apiVersion: autoscaling/v2 kind: HorizontalPodAutoscaler metadata: name: helloworld-hpa namespace: hujiamin spec: scaleTargetRef: apiVersion: apps/v1 kind: Deployment name: helloworld-v1 minReplicas: 1 maxReplicas: 10 metrics: - type: Pods pods: metric: name: http_requests_per_second target: type: AverageValue averageValue: 10
-
查看对应HPA规则
可以看到当前服务没有流量请求,最小实例是1,最大实例是10,当前实例是1。
-
访问业务,测试自动扩容
观察HPA记录状态,可以发现指标超过阈值后,触发自动扩容
- 停止业务访问,测试自动缩容
观察HPA记录状态,可以发现指标低于阈值,等待冷静窗口期后,已自动缩容
- 点赞
- 收藏
- 关注作者
评论(0)