1. 指标来源
-
资源指标:Kubernetes v1.8+,heapster(Kubernetes v1.8~Kubernetes v1.11),metrics-server(Kubernetes v1.12+),指标数据的收集、存储和监控等;
-
自定义指标:Kubernetes v1.6+,,Prometheus、Kubernetes-Prometheus-Adapter;(①通过CRD;②通过Kubernetes Aggregator聚合;)
参考链接:kube-aggregator
2. 指标管道(Pipeline):
-
核心资源指标管道,由cAdvisor、kubelet、metrics-server、以及由API-Server提供的API组成,通过Kubernetes Aggregator与API-server聚合,可以传递的指标有:CPU时间分片累积使用率、内存实时使用率、Pod的资源占用率以及容器的磁盘占用率等;——必选默认Default;
注意:核心指标仅涉及到工作负载为节点和Pod,以及CPU和内存指标,其他工作负载或其他指标均需要借助于自定义指标管道。
核心资源指标管道架构如下图所示:
-
自定义指标管道,用于从Kubernetes集群收集各种数据,提供给终端用户、存储系统以及HPA等使用,可以传递的指标有:核心指标和原生不能被Kubernetes解析的其他自定义指标等(经过Kubernetes-Prometheus-Adapter适配后可以);——可选Addons(建议安装)
说明:自定义指标,是包含核心指标的,,另外还可以覆盖其他工作负载,如deployment、svc、rs等等,其他指标,常用的如响应时间、QPS、并发链接数、数据库连接池使用率、某业务操作的成功率等;
External APIs
通过命令kubectl api-versions
可查看这些外部的API群组;
- metrics.k8s.io/v1beta1:Kubernetes Metrics (v1beta1)
说明:通过部署addons metrics-server,将会引入该类API;
- custom.metrics.k8s.io/v1beta2:Kubernetes Custom Metrics (v1beta2)
说明:通过部署Prometheus相关组件(准确的说是Kubernetes-Prometheus-Adapter, 即custom-metrics-apiserver),将会引入该自定义API;
2.1 Metrics-Server
在 Kubernetes 中,Metrics Server 是一个专门用于收集和存储集群中资源使用数据的组件。Metrics Server 提供了关于节点和 Pod 等资源的实时指标,如 CPU 和内存使用情况。这些指标可以被水平自动伸缩器(Horizontal Pod Autoscaler,HPA)等其他组件用来动态调整应用程序的数量或规模。
Metrics Server是一个轻量级的组件,常被用于监控和度量的目的。但是它不保存历史数据,仅提供当前的资源使用情况。Metrics Server集成到 Kubernetes API Server 中,可以被其他组件和工具通过 Kubernetes API 访问。
Metrics Server 的主要特点包括:
- 实时性: Metrics Server 提供关于资源使用的实时数据,适用于对当前集群状态的实时关注。
- 轻量级: Metrics Server 的设计目标是轻量级,以确保其对集群的性能影响最小。
- 集成性: Metrics Server 与 Kubernetes API Server 集成,通过 Kubernetes API 提供资源指标数据,这使得它可以被其他 Kubernetes 组件轻松访问。
Metrics Server 通常与其他监控工具(如 Prometheus)结合使用,以提供更全面的监控和度量解决方案。Metrics-Server部署完成之后,就可以通过以下命令查看Pod或节点的CPU和内存资源的使用情况:
(1)kubectl top pod POD_NAME
(2)kubectl top pod POD_NAME --containers
(3)kubectl top pod POD_NAME --sort-by=cpu
(4)kubectl top node Node_NAME
说明:10250是Https接口,10255是HTTP接口;
参考链接:metrics-server
2.2 Prometheus
在 Kubernetes 的监控生态系统中,Prometheus 是主流选择,用于监控容器化应用程序和整个kubernetes集群。
Prometheus的主要特点
- 时间序列数据库(TSDB): Prometheus使用本地存储和内存中的时间序列数据库,可用于持久化监控数据,方便用户进行历史查询。(时间序列数据,即指标信息与记录时间戳一起存储,以及称为多种维度标签的可选键值对。)
- 灵活查询:Prometheus提供了PromQL(Prometheus Query Language),一种用于查询和分析数据的查询语言。PromQL支持聚合、过滤和数学运算,使用户能够灵活地从监控数据中提取有价值的信息。
- 自动发现:Prometheus支持服务发现,如kubernetes集群中新增某服务实例,则Prometheus可以动态发现并监控该服务实例,无需人工干预;
- 告警通知:Prometheus 具有内置的告警管理系统alertmanager,支持用户子定义的告警规则。当规定的条件被触发时,Prometheus可以发送告警并通知,例如通过电子邮件或集成到内外部部IM系统等。
Prometheus架构
核心组件:
- Prometheus,核心组件(包含configmap、RBAC、Service、StatefulSet等文件)
- Node-exporter,采集组件(包含DaemonSet和Service等文件)
- Kube-state-metrics,数据转换组件(包含Deployment、RBAC、Service等文件)
- Alertmanager,告警组件(包含configmap、Deployment、PVC、Service等文件)
一般情况下,集群内访问接口为9090,集群外访问接口为30090;
通过命令kubectl proxy --port=8080
创建代理之后,可以原生使用命令curl http://localhost:8080/apis/custom.metrics.k8s.io/v1beta2
来获取相关监控指标信息;
另外,建议Prometheus结合Grafana做监控数据可视化,部署Grafana之后(注意namespace保持一致),并将Service的访问类型修改为Nodeport,使用IP+Port访问,将Data Source Setting修改为Prometheus,填写对应的URL等等相关信息即可;
参考链接 :
(1) Prometheus官网
(2) Prometheus-Github
(3) Grafana Dashboards
3. HPA
HPA:HorizontalPodAutoscaler,Pod水平自动伸缩;(调整副本数量)
VPA:VerticalPodAutoscaler,Pod垂直自动伸缩;(调整Pod的CPU和内存)
HPA和VPA可以使用custom.metrics.k8s.io
和external.metrics.k8s.io
API的数据来自动调整工作负载的副本数和资源等以使其符合预期。
HPA的工作机制如图所示:
如果需要使用HPA,需要的API version为“autoscaling/v2beta2”,且需要提前设置好对应的资源指标或自定义指标,如果没有相关指标,即使在HPA中设置也没用,此为无源之水无本之木;
示例命令:
kubectl autoscale deployment[Resource_Type] foo[Resource_Name] --min=M --max=M+N --cpu-percent=70
示例解释:假设我们为指定的Deployment叫foo启用自动缩放,设置最小Pod副本数为 M,最大Pod副本数为M+N,当CPU利用率超过70%时,触发自动扩展,如最小Pod为1,最大为10,当前Pod数量为1且当前CPU利用率为90%,则应该扩容1个Pod。
Apache Benchmark轻量压测命令:
ab -c 100 -n 100000 http://HOST_IP:PORT/SERVICE_URL
该命令表示在并发用户数为100的情况下,向指定Service的URL发起1000000个请求,拉升服务Pod的CPU利用率,进而达到HPA的效果。