云原生技术Kubernetes之Metrics Server
【摘要】 19-监控Metrics Server 如果你对 Linux 系统有所了解的话,应该知道有一个命令 top 能够实时显示当前系统的 CPU和内存利用率,它是性能分析和调优的基本工具,非常有用。Kubernetes 也提供了类似的命令,就是 kubectl top,不过默认情况下这个命令不会生效,必须要安装一个插件 MetricsServer 才可以。 Metrics Server 是一个...
19-监控
Metrics Server
如果你对 Linux 系统有所了解的话,应该知道有一个命令 top 能够实时显示当前系统的 CPU和内存利用率,它是性能分析和调优的基本工具,非常有用。Kubernetes 也提供了类似的命令,就是 kubectl top,不过默认情况下这个命令不会生效,必须要安装一个插件 MetricsServer 才可以。
Metrics Server 是一个专门用来收集 Kubernetes 核心资源指标(metrics)的工具,它定时从所有节点的 kubelet 里采集信息,但是对集群的整体性能影响极小,每个节点只大约会占用1m 的 CPU 和 2MB 的内存,所以性价比非常高。
下面的这张图来自 Kubernetes 官网,你可以对 Metrics Server 的工作方式有个大概了解:
它调用 kubelet 的 API 拿到节点和 Pod 的指标,再把这些信息交给 apiserver,这样 kubectl、HPA 就可以利用 apiserver 来读取指标了:
兼容列表:
JSON |
修改YAML 添加 --kubelet-insecure-tls
部署
JSON |
验证
JSON |
HorizontalPodAutoscaler(HPA)
有了 Metrics Server,我们就可以轻松地查看集群的资源使用状况了,不过它另外一个更重要
的功能是辅助实现应用的“水平自动伸缩”。
Kubernetes 为此就定义了一个新的 API 对象,叫做“HorizontalPodAutoscaler”,简称是
“hpa”。顾名思义,它是专门用来自动伸缩 Pod 数量的对象,适用于 Deployment 和
StatefulSet,但不能用于 DaemonSet
HorizontalPodAutoscaler 的能力完全基于 Metrics Server,它从 Metrics Server 获取当前应用
的运行指标,主要是 CPU 使用率,再依据预定的策略增加或者减少 Pod 的数量。
下面我们就来看看该怎么使用 HorizontalPodAutoscaler,首先要定义 Deployment 和
Service,创建一个 Nginx 应用,作为自动伸缩的目标对象:
YAML |
接下来我们要用命令 kubectl autoscale 创建一个 HorizontalPodAutoscaler 的样板 YAML
文件,它有三个参数:
- min,Pod 数量的最小值,也就是缩容的下限。
- max,Pod 数量的最大值,也就是扩容的上限。
- cpu-percent,CPU 使用率指标,当大于这个值时扩容,小于这个值时缩容。
好,现在我们就来为刚才的 Nginx 应用创建 HorizontalPodAutoscaler,指定 Pod 数量最少 2
个,最多 10 个,CPU 使用率指标设置的小一点,5%,方便我们观察扩容现象:
YAML |
HorizontalPodAutoscaler 会根据 YAML 里的描述,找到要管理的
Deployment,把 Pod 数量调整成 2 个,再通过 Metrics Server 不断地监测 Pod 的 CPU 使用
率。
下面我们来给 Nginx 加上压力流量,运行一个测试 Pod,使用的镜像是“httpd:alpine”,它里
面有 HTTP 性能测试工具 ab(Apache Bench):
YAML |
YAML |
因为 Metrics Server 大约每 15 秒采集一次数据,所以 HorizontalPodAutoscaler 的自动化扩容和缩容也是按照这个时间点来逐步处理的。
当它发现目标的 CPU 使用率超过了预定的 5% 后,就会以 2 的倍数开始扩容,一直到数量上限,然后持续监控一段时间,如果 CPU 使用率回落,就会再缩容到最小值。
组件
Kube-prometheus 包含的组件:
- The Prometheus Operator
- Highly available Prometheus
- Highly available Alertmanager
- Prometheus node-exporter
- Prometheus Adapter for Kubernetes Metrics APIs
- kube-state-metrics
- Grafana
使用 Helm 安装 Kube-prometheus
- 添加 helm 仓库
Bash |
- 版本查询
Bash |
Bash |
Chart.yaml 中显示 kube-prometheus 所依赖的各种组件及相关版本。
- 安装
Bash |
- 修改 SVC
Bash |
- 访问 Grafana
Bash |
总结
kubernetes的新监控体系中,metrics-server属于Core metrics(核心指标),提供API metrics.k8s.io,仅提供Node和Pod的CPU和内存使用情况。而其他Custom Metrics(自定义指标)由Prometheus等组件来完成,后续文章将对自定义指标进行解析。
————————————————
版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
原文链接:https://blog.csdn.net/agonie201218/article/details/128339568
【声明】本内容来自华为云开发者社区博主,不代表华为云及华为云开发者社区的观点和立场。转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息,否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱:
cloudbbs@huaweicloud.com
- 点赞
- 收藏
- 关注作者
评论(0)