• 【K8S系列】深入解析K8S监控


    序言

    做一件事并不难,难的是在于坚持。坚持一下也不难,难的是坚持到底。

    文章标记颜色说明:

    • 黄色:重要标题
    • 红色:用来标记结论
    • 绿色:用来标记论点
    • 蓝色:用来标记论点

    Kubernetes (k8s) 是一个容器编排平台,允许在容器中运行应用程序和服务。今天学习一下k8s监控相关知识

    希望这篇文章能让你不仅有一定的收获,而且可以愉快的学习,如果有什么建议,都可以留言和我交流

     专栏介绍

    这是这篇文章所在的专栏,欢迎订阅:【深入解析k8s】专栏

    简单介绍一下这个专栏要做的事:

    Kubernetes是一个分布式系统,能够管理和编排容器化应用程序。其中,监控是一个非常重要的方面,可以帮助用户了解集群的健康状态、性能和可用性。

    在本文中,将详细介绍Kubernetes监控的

    • 监控类型
    • 监控详解
    • 监控软件安装
    • 监问题思考

    1 基础介绍

    1.1监控的类型

    在Kubernetes中,监控是一个非常重要的方面,可以帮助用户了解集群的健康状态、性能和可用性。根据监控的类型和范围,Kubernetes的监控可以分为以下几种类型:

    1. 集群层监控
    2. 节点层监控
    3. 应用层监控
    4. 日志监控

    2 集群层监控

    集群层监控是指对整个Kubernetes集群进行监控,包括节点、Pod、服务等。集群层监控通常会关注集群的资源使用情况、负载均衡、服务发现等方面的指标,以帮助用户了解集群的整体健康状态和性能状况。

    常用的集群层监控工具包括Prometheus、Grafana、Heapster等。

    2.1 监控原理 

    Kubernetes的集群层监控通常是基于指标采集和存储的原理实现的。其基本流程如下:

    1. 指标采集
    2. 指标存储
    3. 数据可视化

    2.1.1指标采集

    Kubernetes集群中的各种组件和对象都会产生一些指标,如CPU、内存、磁盘、网络等

    这些指标可以通过各种方式进行采集,如Kubernetes API、容器运行时、系统监控工具等。不同的指标采集工具有不同的采集方式和频率,需要根据实际需求和资源限制进行选择和配置。

    2.1.2 指标存储

    采集到的指标需要进行存储和管理,以便后续的查询和分析。常用的指标存储工具包括Prometheus、InfluxDB、Elasticsearch等。这些工具可以将采集到的指标存储到数据库中,并提供一些查询和分析接口,以帮助用户了解集群的状态和健康状况。

    2.1.3 数据可视化

    存储的指标数据可以通过数据可视化工具进行展示,帮助用户更直观地了解集群的状态和健康状况。常用的数据可视化工具包括Grafana、Kubernetes Dashboard等。这些工具可以将指标数据转换成漂亮的图表和仪表盘,以帮助用户快速发现和解决问题。

    总之,Kubernetes的集群层监控主要是基于指标采集、存储和展示的原理实现的。通过采集集群中各种组件和对象的指标数据,存储到指标存储工具中,并通过数据可视化工具展示给用户,可以帮助用户了解集群的状态和健康状况,及时发现和解决问题。

    3 节点层监控

    节点层监控是指对Kubernetes节点进行监控,包括节点的CPU、内存、磁盘、网络等指标。节点层监控通常会关注节点的负载状况、资源使用情况、容器状态等方面的指标,以帮助用户了解节点的健康状态和性能状况。

    常用的节点层监控工具包括cAdvisor、Node Exporter等。

    4 应用层监控 

    应用层监控是指对Kubernetes中运行的应用程序进行监控,包括应用程序的CPU、内存、网络、磁盘等指标。应用层监控通常会关注应用程序的性能、错误、日志等方面的指标,以帮助用户了解应用程序的健康状态和性能状况。

    常用的应用层监控工具包括Prometheus、ELK Stack、Zipkin等。

    5 日志监控 

    日志监控是指对Kubernetes集群中产生的日志进行监控,包括容器日志、系统日志、应用程序日志等。

    日志监控通常会关注日志的格式、内容、数量等方面的指标,以帮助用户了解集群的运行状态和问题状况。

    常用的日志监控工具包括ELK Stack、Fluentd等。

    Kubernetes的监控类型非常多样化,可以根据实际需求和场景选择合适的监控工具和技术来实现监控。

    在实际的使用中,需要根据监控的类型和范围进行配置和优化,以提高监控的效率和精度。

    6 监控技术和工具 

    以下是一些常用的集群层监控技术和工具:

    1. Prometheus + Grafana
    2. Heapster
    3. Kubernetes Dashboard
    4. Kube-state-metrics

    1 Prometheus + Grafana

    Prometheus和Grafana是Kubernetes中常用的监控工具,可以用于监控集群的资源使用情况和健康状态。

    Prometheus可以收集和存储各种集群指标数据,如CPU、内存、磁盘、网络等,而Grafana可以将这些数据转换成漂亮的图表和仪表盘,帮助用户快速发现和解决问题。

    此外,Prometheus还提供了一些自带的集群监控规则,可以帮助用户监控集群的状态和健康状况。

    安装

    下面是使用docker-compose安装Prometheus和Grafana的步骤:

    1. 创建一个目录用于存放docker-compose.yml文件和相关配置文件,如prometheus-grafana。

    2. 在该目录下创建docker-compose.yml文件,并添加以下内容:

    1. version: '3.7'
    2. services:
    3. prometheus:
    4. image: prom/prometheus
    5. container_name: prometheus
    6. ports:
    7. - "9090:9090"
    8. volumes:
    9. - ./prometheus.yml:/etc/prometheus/prometheus.yml
    10. command:
    11. - --config.file=/etc/prometheus/prometheus.yml
    12. - --storage.tsdb.path=/prometheus
    13. grafana:
    14. image: grafana/grafana
    15. container_name: grafana
    16. ports:
    17. - "3000:3000"
    18. volumes:
    19. - grafana-storage:/var/lib/grafana
    20. volumes:
    21. grafana-storage:

    这个docker-compose.yml文件定义了两个服务,一个是Prometheus,一个是Grafana。其中Prometheus会暴露9090端口,Grafana会暴露3000端口。

    两个服务都会使用docker-compose.yml文件所在目录下的配置文件进行配置。

    1. 在该目录下创建prometheus.yml文件,并添加以下内容:
    1. global:
    2. scrape_interval: 15s
    3. scrape_configs:
    4. - job_name: 'prometheus'
    5. scrape_interval: 5s
    6. static_configs:
    7. - targets: ['localhost:9090']
    8. - job_name: 'node'
    9. scrape_interval: 5s
    10. static_configs:
    11. - targets: ['node-exporter:9100']
    12. - job_name: 'cadvisor'
    13. scrape_interval: 5s
    14. static_configs:
    15. - targets: ['cadvisor:8080']
    16. - job_name: 'kubelet'
    17. scrape_interval: 5s
    18. static_configs:
    19. - targets: ['kubelet:10255']

    这个prometheus.yml文件定义了一些基本的Scrape Configs,用于采集Kubernetes节点、cAdvisor、kubelet和Prometheus本身的指标数据。

    1. 在命令行中进入上面创建的目录,并运行以下命令以启动Prometheus和Grafana服务:
    docker-compose up -d
    

    这个命令会在后台启动docker-compose.yml文件中定义的服务。

    1. 打开浏览器,访问http://localhost:3000,即可进入Grafana的登录界面。使用默认用户名和密码(admin/admin)登录。

    2. 在Grafana中添加数据源。在左侧菜单栏中选择Configuration->Data Sources,并点击Add data source按钮。选择Prometheus作为数据源类型,然后填写Prometheus的地址http://prometheus:9090,点击Save & Test按钮测试连接是否成功。

    3. 在Grafana中导入Dashboard。Grafana提供了很多现成的Dashboard,用户可以根据自己的需求进行选择和导入。在左侧菜单栏中选择+ -> Import,然后选择一个Dashboard模板文件

    至此,已经成功地使用docker-compose安装和配置了Prometheus和Grafana。可以在Grafana中查看和分析Prometheus采集到的Kubernetes集群指标数据。

    2 Heapster

    Heapster是一个Kubernetes集群监控和性能分析工具,它可以监控集群内所有容器的资源使用情况,并将数据存储到指定的后端存储中,如InfluxDB、Elasticsearch等。Heapster还提供了一些有用的命令行工具和API,可以帮助用户查询和分析数据,包括节点、Pod、容器等数据。

    3 Kubernetes Dashboard

    Kubernetes Dashboard是Kubernetes官方提供的Web界面,可以用于监控和管理Kubernetes集群。Dashboard提供了集群层监控的功能,可以显示集群的健康状态、资源使用情况、Pod和容器状态等信息。此外,Dashboard还提供了一些有用的管理功能,如Pod和容器的日志查询、事件查看等。

    4 Kube-state-metrics

    Kube-state-metrics是一个Kubernetes状态指标导出器,用于将Kubernetes中的各种对象状态指标导出为Prometheus格式。它可以导出各种对象的状态指标,如节点、Pod、服务、副本集、Deployment、DaemonSet等,帮助用户了解集群的状态和健康状况。

    总之,Kubernetes的集群层监控非常重要,可以帮助用户了解集群的整体健康状态和性能状况。以上列出的工具和技术可以帮助用户实现集群层监控,但是需要根据实际需求和资源限制进行配置和优化,以提高监控的效率和精度。

    7 问题思考

    1 etcd的watch 监听

    在Kubernetes中,etcd是一个高可用的分布式键值存储,用于存储Kubernetes集群的配置数据和状态信息。etcd提供了一些API接口,其中包括watch接口,可以用于监听etcd中指定目录的变化。etcd的watch机制非常强大,可以帮助用户实现实时的配置更新和状态同步。以下是一些关于etcd的watch监听的技术和实践:

    1.1 监听etcd目录 

    可以使用etcdctl命令或etcd的客户端库来监听etcd中指定目录下的键值变化。例如,使用etcdctl命令监听/mydir目录的变化可以使用以下命令:

    etcdctl watch /mydir
    

    当目录/mydir下的键值发生变化时,etcd会将变化通知给监听者。

    1.2 使用etcd的客户端库 

    etcd的客户端库提供了一些高级的watch机制,可以更灵活地实现对etcd的监听。例如,可以使用etcd的Go客户端库,通过Watch函数来实现对etcd目录的监听。以下是一个示例:

    1. watcher := clientv3.NewWatcher(client)
    2. watcher.Watch(context.Background(), "/mydir", clientv3.WithPrefix(), clientv3.WithPrevKV())
    3. for {
    4. select {
    5. case resp := <-watcher.WatchChan():
    6. for _, event := range resp.Events {
    7. fmt.Printf("Event received! Type: %s Key: %s Value: %s\n", event.Type, event.Kv.Key, event.Kv.Value)
    8. }
    9. }
    10. }

    上述示例中,使用etcd的Go客户端库创建了一个Watcher实例,然后调用Watch函数来监听/mydir目录下的变化。当目录下的键值发生变化时,Watcher会将变化通知到WatchChan通道中,从而实现实时的更新和同步。

    1.3 使用etcd的API接口 

    除了etcd的客户端库,还可以使用etcd的API接口来实现对etcd的监听。etcd的API接口提供了一些高级的watch功能,如可取消的watch、多路复用的watch等。

    以下是一个使用etcd的API接口实现的示例:

    1. watcher := clientv3.NewWatcher(client)
    2. ctx, cancel := context.WithCancel(context.Background())
    3. watcher.Watch(ctx, "/mydir", clientv3.WithPrefix())
    4. go func() {
    5. for {
    6. select {
    7. case resp := <-watcher.Chan():
    8. for _, event := range resp.Events {
    9. fmt.Printf("Event received! Type: %s Key: %s Value: %s\n", event.Type, event.Kv.Key, event.Kv.Value)
    10. }
    11. }
    12. }
    13. }()
    14. // 取消监听
    15. time.Sleep(10 * time.Second)
    16. cancel()

    上述示例中,使用etcd的API接口创建了一个Watcher实例,然后调用Watch函数来监听/mydir目录下的变化。

    使用context.WithCancel函数创建了一个可取消的context对象,用于在需要的时候取消监听。

    当目录下的键值发生变化时,Watcher会将变化通知到Chan通道中,从而实现实时的更新和同步。

    总之,etcd的watch机制可以帮助用户实现实时的配置更新和状态同步。根据实际需求和场景,可以选择合适的监听方式和技术,来实现对etcd的监听。

    8 投票 

  • 相关阅读:
    【牛客网-前端笔试题】——Javascript专项练习6
    如何在 Anolis 8上部署 Nydus 镜像加速方案?
    docker 安装(unbuntu安装)
    Flink监控和调优笔记
    2011-2022年北大法宝省市县环保行政处罚数据
    在vue3中通过vue-i18n实现国际化多语言切换
    测试人生 | 资深外包逆袭大厂测试开发:面试官的“歧视”表情深深刺痛了我
    【前端实习生备战秋招】—计算机网络面试题汇总,建议收藏系列
    【图神经网络论文整理】(一)—— 可解释性和泛化性图分类的因果注意力:CAL
    安防监控视频AI智能分析网关:人流量统计算法的应用场景汇总
  • 原文地址:https://blog.csdn.net/weixin_36755535/article/details/131583178