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

news2024/11/24 5:56:39

序言

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

文章标记颜色说明:

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

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

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

 专栏介绍

这是这篇文章所在的专栏,欢迎订阅:【深入解析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文件,并添加以下内容:

version: '3.7'
services:
  prometheus:
    image: prom/prometheus
    container_name: prometheus
    ports:
      - "9090:9090"
    volumes:
      - ./prometheus.yml:/etc/prometheus/prometheus.yml
    command:
      - --config.file=/etc/prometheus/prometheus.yml
      - --storage.tsdb.path=/prometheus
  grafana:
    image: grafana/grafana
    container_name: grafana
    ports:
      - "3000:3000"
    volumes:
      - grafana-storage:/var/lib/grafana
volumes:
  grafana-storage:

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

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

  1. 在该目录下创建prometheus.yml文件,并添加以下内容:
global:
  scrape_interval: 15s

scrape_configs:
  - job_name: 'prometheus'
    scrape_interval: 5s
    static_configs:
      - targets: ['localhost:9090']
  - job_name: 'node'
    scrape_interval: 5s
    static_configs:
      - targets: ['node-exporter:9100']
  - job_name: 'cadvisor'
    scrape_interval: 5s
    static_configs:
      - targets: ['cadvisor:8080']
  - job_name: 'kubelet'
    scrape_interval: 5s
    static_configs:
      - 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目录的监听。以下是一个示例:

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

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

1.3 使用etcd的API接口 

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

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

watcher := clientv3.NewWatcher(client)
ctx, cancel := context.WithCancel(context.Background())
watcher.Watch(ctx, "/mydir", clientv3.WithPrefix())
go func() {
    for {
        select {
        case resp := <-watcher.Chan():
            for _, event := range resp.Events {
                fmt.Printf("Event received! Type: %s Key: %s Value: %s\n", event.Type, event.Kv.Key, event.Kv.Value)
            }
        }
    }
}()
// 取消监听
time.Sleep(10 * time.Second)
cancel()

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

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

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

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

8 投票 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/725437.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

C语言学习(三十四)---动态内存常见错误总结

上节内容中&#xff0c;我们学习如何规范的申请和使用动态内存&#xff0c;其实是很重要的一环。 在大的程序中&#xff0c;应该注意这些细节问题&#xff0c;不然就会对其他的程序猿们产生影响&#xff0c;因为大的程序不可能交由一个人完成&#xff0c;所以&#xff0c;你编…

Slidev: 为开发者打造的演示文稿工具

非程序员开发者可以忽略&#xff0c;需要一定Markdown等知识要求。 官网地址&#xff1a;Slidev、开始使用 | Slidev 简介 Slidev (slide dev, /slʌɪdɪv/) 是基于 Web 的幻灯片制作和演示工具。它旨在让开发者专注在 Markdown 中编写内容&#xff0c;同时拥有支持 HTML 和…

二本4年测试经验,五面阿里(定薪35K),分享我的心得

6月跳槽&#xff0c;先后面试了多个大大小小的公司&#xff0c;拿了一些offer&#xff0c;有阿里&#xff0c;滴滴&#xff0c;快手&#xff0c;达达&#xff0c;得物等公司。面试的公司大部分都能过&#xff0c;所以这里给大家分享下自己的经验&#xff0c;也给自己做个归档&a…

2021年国赛高教杯数学建模E题中药材的鉴别解题全过程文档及程序

2021年国赛高教杯数学建模 E题 中药材的鉴别解题 原题再现 不同中药材表现的光谱特征差异较大&#xff0c;即使来自不同产地的同一药材&#xff0c;因其无机元素的化学成分、有机物等存在的差异性&#xff0c;在近红外、中红外光谱的照射下也会表现出不同的光谱特征&#xff…

软件工程-期末复习题

第1章软件工程概述 1、软件的概念及特点 概念&#xff1a; 计算机软件是由专业人员开发并长期维护的软件产品。完整的软件产品包括了在各种不同容量和体系结构计算机上的可执行的程序&#xff0c;运行过程中产生的各种结果&#xff0c;以及以硬复制和电子表格等多种方式存在的软…

ChatGPT 和爬虫有什么区别

目录 ChatGPT的概念和功能 爬虫的概念和功能 ChatGPT和爬虫的区别 ChatGPT的概念和功能 ChatGPT是一个基于自然语言处理和机器学习的智能对话模型&#xff0c;具有以下功能&#xff1a; 1. 问题回答&#xff1a;ChatGPT可以回答用户提出的各种问题。不论是有关常识、历史、科…

【数据结构】---TopK问题

本文提供用建堆来解决TopK问题的一个思路 N个数中找出最大的或者最小的前k个 假设现从N个数中找最大的前k个 ①堆排序&#xff0c;时间复杂度O(N*logN)&#xff0c;这N个数排一下序&#xff0c;前k个数就是需要的②建堆N个数的小堆&#xff0c;HeapPop 9次&#xff0c;就选出…

嵌入式工程师常见面试题(持续更新版本)

前言&#xff1a;鄙人于学堂求学十余载&#xff0c;终是要踏足江湖求一寸安身处&#xff01;以前都忙着学习新东西以及做项目&#xff0c;现如今也需要面对找工作的压力。此篇博客是作者准备的嵌入式工程师常见的面试题目汇总&#xff0c;其答案包含网络搜索和作者自己感悟总结…

6月,视频号爆火的账号有哪些?

六月伊始&#xff0c;视频号就借着六一节点上线青少年内容分级功能&#xff0c;让视频号内容及安全管理更精细化。紧接着开展了“特效大拍档”招募活动&#xff0c;激励各垂类头部创作者持续活跃&#xff0c;与他们共建更丰富健康的内容生态。在官方各种活动激励之下&#xff0…

Python语法基础07(文件与异常)

文件 输出文件中的内容 在项目代码同路径下创建一个pi_digits文件 3.14159265358979323846在fileDemo0.py中将其打开&#xff0c;并输出 #用函数open()打开文件&#xff0c;并将对象赋给file,对于open中的文件路径&#xff0c;可以使用相对路径也可以使用绝对路径 with ope…

2023年淘宝天猫内部大额隐藏粉丝福利购店铺优惠券领取入口在哪里怎么找到免费领取淘宝天猫优惠券?

草柴优惠券APP应用市场下载入口 草柴优惠券APP已上架的应用市场&#xff1a;华为应用市场、小米应用市场、OPPO应用市场、VIVO应用市场及百度手机助手&#xff0c;请打开以上应用市场搜索&#xff1a;草柴优惠券&#xff0c;即可下载通过应用市场审核验证通过的安全可信应用&a…

JavaWeb Cookie

1.Cookie 介绍 Cookie是一种用于在Web浏览器和Web服务器之间传递数据的机制。 它是由服务器发送给浏览器的小型文本文件&#xff0c;存储在浏览器的本地计算机上。 浏览器在后续请求中会自动将Cookie发送回服务器&#xff0c;以便服务器可以识别用户并提供个性化的服务。 C…

涨知识,周鸿伟当年踩的坑,如果用这么一个工具就能事半功倍

怎么让员工有效率地工作&#xff1f;如何考核员工&#xff1f;如何让员工有积极的心态&#xff1f;公司的汇报体系应该怎么设计&#xff1f; 这些问题都让360创始人周鸿伟感到困惑&#xff01; 说到“红衣大炮”周鸿伟的本事&#xff0c;那真的不是吹&#xff01; 近期&…

github:网址为 https://github.com/ 的网页可能暂时无法连接,或者它已永久性地移动到了新网址

一、无法访问github 二、尝试ping gitlab.com 三、打开站长工具 查找 ip地址 “www.github.com”A记录/cname检测结果--Dns查询|dns查询--站长工具 四、打开host文件&#xff08;C:\Windows\System32\drivers\etc&#xff09; 20.205.243.166 github.com 五、再次ping github&…

地图制图小技巧_点匹配线方向

目录 目的 实现步骤 功能介绍 功能入口 关键参数 结果 问题延伸 目的 我们在配图的时候&#xff0c;会遇到一种特定的需求&#xff1a;需要对点设置一个风格&#xff0c;并且符号风格自动跟相连或者相交的线保持垂直。 这种是否能够在SuperMap iDesktopX中自动实现呢&#xff0…

直流运算放大电路-----Howland(二)

目录 豪兰德电路形式1 电路图 计算公式 仿真与分析 豪兰德电路形式2 电路图 计算公式 豪兰德电路形式3 电路图 计算公式 改进电路 豪兰德电路形式1 模拟电子技术基础&#xff08;第五版&#xff09;5.7 电路图 计算公式 仿真与分析 如图&#xff0c;红框内为负反馈&…

.net项目开发-EF框架解决添加默认值问题

文章目录 前言EF中核心类DbContextDbContext中的SaveChanges()方法重写SaveChanges()方法注意点-Modified 其它状态下的实体如何操作 前言 最近开发.net项目&#xff0c;持久层用的是EF框架&#xff0c;也是第一次使用这个框架&#xff0c;用这个框架的好处就是基于实体的开发…

【UnityDOTS 小知识】如何通过DOTS修改材质属性以及替换材质与网格

如何通过DOTS修改材质属性以及替换材质与网格 一、DOTS修改材质属性 1.利用 Material Overide Asset Material Overide Asset是一个Unity资产&#xff0c;可以通过Create创建。 创建后指定要修改的材质&#xff0c;以及对应材质的属性&#xff0c;即可完成这个资源创建。 然…

hive关联键 NULL 关联 NULL

结论&#xff1a;关联键 NULL NULL时&#xff0c;不进行关联&#xff0c;即两表关联失败 案例如下&#xff1a; 表A 表B 表A 关联 表B selecta.id as a_id,a.name as a_name,b.id as b_id,b.name as b_name from表A a left join表B b on a.id b.id …

【FFmpeg实战】FFplay音视频同步

作者&#xff1a;Mirs 链接&#xff1a;https://www.jianshu.com/p/d7ead3a5f2bd PTS的由来 音视频同步依赖的一个东西就是pts&#xff08;persentation time stamp &#xff09;显示时间戳 告诉我们该什么时间显示这一帧 ,那么&#xff0c;这个东西是从哪里来的呢&#xff1f…