云原生之深入解析如何正确计算Kubernetes容器CPU使用率

一、简介说明

  • 使用 Prometheus 配置 kubernetes 环境中 Container 的 CPU 使用率时,会经常遇到 CPU 使用超出 100%,现在来分析一下:
    • container_spec_cpu_period:当对容器进行 CPU 限制时,CFS 调度的时间窗口,又称容器 CPU 的时钟周期通常是 100000 微秒
    • container_spec_cpu_quota:是指容器的使用 CPU 时间周期总量,如果 quota 设置的是 700,000,就代表该容器可用的 CPU 时间是 7*100000 微秒,通常对应 kubernetes 的 resource.cpu.limits 的值;
    • container_spec_cpu_share:是指 container 使用分配主机 CPU 相对值,比如 share 设置的是 500m,代表窗口启动时向主机节点申请 0.5 个 CPU,也就是 50000 微秒,通常对应 kubernetes 的 resource.cpu.requests 的值;
    • container_cpu_usage_seconds_total:统计容器的 CPU 在一秒内消耗使用率,应注意的是该 container 所有的 CORE;
    • container_cpu_system_seconds_total:统计容器内核态在一秒时间内消耗的 CPU;
    • container_cpu_user_seconds_total:统计容器用户态在一秒时间内消耗的 CPU。

二、具体计算

  • 默认如果直接使用 container_cpu_usage_seconds_total 的话,如下所示:
sum(irate(container_cpu_usage_seconds_total{container="$Container",instance="$Node",pod="$Pod"}[5m])*100)by(pod)
  • 默认统计的数据是该容器所有的 CORE 的平均使用率:

在这里插入图片描述

  • 如果要精确计算每个容器的 CPU 使用率,使用 % 呈现的形式,如下所示:
sum(irate(container_cpu_usage_seconds_total{container="$Container",instance="$Node",pod="$Pod"}[5m])*100)by(pod)/sum(container_spec_cpu_quota{container="$Container",instance="$Node",pod="$Pod"}/container_spec_cpu_period{container="$Container",instance="$Node",pod="$Pod"})by(pod)
  • 其中 container_spec_cpu_quota/container_spec_cpu_period,就代表该容器有多少个 CORE:

在这里插入图片描述

三、docker stats

  • docker stats 输出的指标列是如何计算的,如下:
    • 首先 docker stats 是通过 Docker API /containers/(id)/stats 接口来获得 live data stream,再通过 docker stats 进行整合;
    • 在 Linux 中使用 docker stats 输出的内存使用率(MEM USAGE),实则该列的计算是不包含 Cache 的内存;
    • cache usage 在 ≤ docker 19.03 版本的 API 接口输出对应的字段是 memory_stats.total_inactive_file,而 > docker 19.03 的版本对应的字段是 memory_stats.cache;
    • docker stats 输出的 PIDS 一列代表的是该容器创建的进程或线程的数量,threads 是 Linux kernel 中的一个术语,又称 lightweight process & kernel task;
  • 那么,如何通过 Docker API 查看容器资源使用率?如下所示:
$ curl -s --unix-socket /var/run/docker.sock "http://localhost/v1.40/containers/10f2db238edc/stats" | jq -r
{
  "read": "2022-01-05T06:14:47.705943252Z",
  "preread": "0001-01-01T00:00:00Z",
  "pids_stats": {
    "current": 240
  },
  "blkio_stats": {
    "io_service_bytes_recursive": [
      {
        "major": 253,
        "minor": 0,
        "op": "Read",
        "value": 0
      },
      {
        "major": 253,
        "minor": 0,
        "op": "Write",
        "value": 917504
      },
      {
        "major": 253,
        "minor": 0,
        "op": "Sync",
        "value": 0
      },
      {
        "major": 253,
        "minor": 0,
        "op": "Async",
        "value": 917504
      },
      {
        "major": 253,
        "minor": 0,
        "op": "Discard",
        "value": 0
      },
      {
        "major": 253,
        "minor": 0,
        "op": "Total",
        "value": 917504
      }
    ],
    "io_serviced_recursive": [
      {
        "major": 253,
        "minor": 0,
        "op": "Read",
        "value": 0
      },
      {
        "major": 253,
        "minor": 0,
        "op": "Write",
        "value": 32
      },
      {
        "major": 253,
        "minor": 0,
        "op": "Sync",
        "value": 0
      },
      {
        "major": 253,
        "minor": 0,
        "op": "Async",
        "value": 32
      },
      {
        "major": 253,
        "minor": 0,
        "op": "Discard",
        "value": 0
      },
      {
        "major": 253,
        "minor": 0,
        "op": "Total",
        "value": 32
      }
    ],
    "io_queue_recursive": [],
    "io_service_time_recursive": [],
    "io_wait_time_recursive": [],
    "io_merged_recursive": [],
    "io_time_recursive": [],
    "sectors_recursive": []
  },
  "num_procs": 0,
  "storage_stats": {},
  "cpu_stats": {
    "cpu_usage": {
      "total_usage": 251563853433744,
      "percpu_usage": [
        22988555937059,
        6049382848016,
        22411490707722,
        5362525449957,
        25004835766513,
        6165050456944,
        27740046633494,
        6245013152748,
        29404953317631,
        5960151933082,
        29169053441816,
        5894880727311,
        25772990860310,
        5398581194412,
        22856145246881,
        5140195759848
      ],
      "usage_in_kernelmode": 30692640000000,
      "usage_in_usermode": 213996900000000
    },
    "system_cpu_usage": 22058735930000000,
    "online_cpus": 16,
    "throttling_data": {
      "periods": 10673334,
      "throttled_periods": 1437,
      "throttled_time": 109134709435
    }
  },
  "precpu_stats": {
    "cpu_usage": {
      "total_usage": 0,
      "usage_in_kernelmode": 0,
      "usage_in_usermode": 0
    },
    "throttling_data": {
      "periods": 0,
      "throttled_periods": 0,
      "throttled_time": 0
    }
  },
  "memory_stats": {
    "usage": 8589447168,
    "max_usage": 8589926400,
    "stats": {
      "active_anon": 0,
      "active_file": 260198400,
      "cache": 1561460736,
      "dirty": 3514368,
      "hierarchical_memory_limit": 8589934592,
      "hierarchical_memsw_limit": 8589934592,
      "inactive_anon": 6947250176,
      "inactive_file": 1300377600,
      "mapped_file": 0,
      "pgfault": 3519153,
      "pgmajfault": 0,
      "pgpgin": 184508478,
      "pgpgout": 184052901,
      "rss": 6947373056,
      "rss_huge": 6090129408,
      "total_active_anon": 0,
      "total_active_file": 260198400,
      "total_cache": 1561460736,
      "total_dirty": 3514368,
      "total_inactive_anon": 6947250176,
      "total_inactive_file": 1300377600,
      "total_mapped_file": 0,
      "total_pgfault": 3519153,
      "total_pgmajfault": 0,
      "total_pgpgin": 184508478,
      "total_pgpgout": 184052901,
      "total_rss": 6947373056,
      "total_rss_huge": 6090129408,
      "total_unevictable": 0,
      "total_writeback": 0,
      "unevictable": 0,
      "writeback": 0
    },
    "limit": 8589934592
  },
  "name": "/k8s_prod-xc-fund_prod-xc-fund-646dfc657b-g4px4_prod_523dcf9d-6137-4abf-b4ad-bd3999abcf25_0",
  "id": "10f2db238edc13f538716952764d6c9751e5519224bcce83b72ea7c876cc0475"

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

[架构之路-214]- UML-类图图解、详解、结构化、本质化讲解

目录 一、什么是类 1.1 概述 1.2 UML中类的表示 1.3 接口 1.4 抽象类 1.5 模板类 二、什么类图 2.1 概述 2.2 类关系 三、UML类图 3.1 结构关系 3.1.1 完全一体:继承关系 (类与类耦合度最高,类与类之间最强的关系) …

计算机基础知识

参考链接:https://blog.csdn.net/ChineseSoftware/article/details/123176978 https://www.cnblogs.com/8023-CHD/p/11067141.html https://blog.csdn.net/qq_42033567/article/details/108088514 http与https的区别 HTTP 的URL以http:// 开头,而HTTPS…

【Matlab】语音信号分析与处理实验报告

一、目的 使用Matlab分析与设计实验,理解与掌握以下知识点: 1、信号的采样、频谱混叠 2、信号的频谱分析 3、信号的幅度调制与解调方法 4、理想滤波器的时域和频域特性 5、数字滤波器的设计与实现 二、内容 1、录制一段个人的语音信号 2、采用合适的频…

Unity光照贴图的切换,实现黑夜和白天效果

有这么一个需求,不能使用实时光来进行动态控制光照开关,但是又要实现白天和黑夜的效果,我的场景中有大概十几个点光源和平行光 实现步骤: 一、模型原模原样复制到另一个场景中(因为贴图只能存在于当前的场景文件夹&am…

支付宝沙箱支付详细教程(IDEA版)—2023最新版

😇作者介绍:一个有梦想、有理想、有目标的,且渴望能够学有所成的追梦人。 🎆学习格言:不读书的人,思想就会停止。——狄德罗 ⛪️个人主页:进入博主主页 🗼专栏系列:无 &#x1f33c…

Redis数据库操作

Redis 命令参考 — Redis 命令参考http://doc.redisfans.com/ 1、Redis,远程词典服务器,是一个基于内存的键值型NoSQL数据库 特征: 键值型,支持多种不同数据结构,功能丰富 单线程,每个命令具备原子性 …

Docker的安装部署以及配置的操作流程(图文)

Docker的安装以及配置流程(图文) Docker一、配置域名解析二、CentOS Docker 安装1. 查询已安装的docker2. 安装必要的一些系统工具3. 添加软件源(阿里云)信息4. 更新并安装Docker-CE5. 查看docker 的版本6. 关闭运行的防火墙7. 开…

h5手写签名示例

前言 业务中需要用户进行签字&#xff0c;如何让用户在手机端进行签字&#xff1f; 示例如下 代码已分享至Gitee: https://gitee.com/lengcz/qianming 原示例&#xff1a; https://www.jq22.com/jquery-info13488 H5实现手写签字 创建一个html页面 <!DOCTYPE html> …

Wireshark抓包分析(ARP TCP DNS HTTP)

目录 一、ARP 二、DNS 三、TCP TCP的总过程&#xff1a; ​TCP三次握手&#xff1a; TCP四次挥手&#xff1a; 四、HTTP 一、ARP 1.ARP&#xff08;Address Resolution Protocol&#xff09;&#xff0c;是根据IP地址获取物理地址的一个TCP/IP协议。 我们要抓ARP 同网段内…

每日学术速递6.7

CV - 计算机视觉 | ML - 机器学习 | RL - 强化学习 | NLP 自然语言处理 Subjects: cs.CV 1.The ObjectFolder Benchmark: Multisensory Learning with Neural and Real Objects(CVPR 2023) 标题&#xff1a;ObjectFolder 基准测试&#xff1a;使用神经和真实对象进行多感官…

Windows VMware安装RockyLinux9

前言&#xff0c;今天用虚拟机安装rockyLinux时碰到了一些坑&#xff0c;要么时无法联网&#xff0c;要么是无法使用ssh链 接&#xff0c;在这里记录下 准备工作 1. VMware Workstation 17 Pro 2. RockyLinux9.2阿里镜像站&#xff0c;这里无选择了最小版本Rocky-9-latest-x86…

小程序自动化测试的示例代码

背景 近期团队打算做一个小程序自动化测试的工具&#xff0c;期望能够做的业务人员操作一遍小程序后&#xff0c;自动还原之前的操作路径&#xff0c;并且捕获操作过程中发生的异常&#xff0c;以此来判断这次发布时候会影响小程序的基础功能。 上述描述看似简单&#xff0c;但…

【算法证明 七】深入理解深度优先搜索

深度优先搜索包含一个递归&#xff0c;对其进行分析要复杂一些。与上一篇文章一样&#xff0c;还是给节点定义几个状态&#xff0c;然后详细分析深度优先搜索算法有哪些性质。 算法描述 定义状态 v . c o l o r &#xff1a;初始状态为白色&#xff0c;被发现时改为灰色&…

【cfeng work】什么是云原生 Cloud Native

WorkProj 内容管理 云原生云原生应用十二要素应用cfeng的work理解 本文introduce 云原生 Cloud Native相关内容 随着技术的迭代&#xff0c;从最初的物理机—> 虚拟机&#xff0c;从单机 —> 分布式微服务&#xff0c; 现在的热门概念就是云☁&#xff08;cloud&#xff…

python 使用 openpyxl 处理 Excel 教程

目录 前言一、安装openpyxl库二、新建excel及写入单元格1.创建一个xlsx格式的excel文件并保存2.保存成流(stream)3.写入单元格 三、创建sheet工作表及操作四、读取excel和单元格1.读取 excel 文件2.读取单元格3.获取某一行某一列的数据4.遍历所有单元格5.遍历指定行列范围的单元…

数据结构之堆——算法与数据结构入门笔记(六)

本文是算法与数据结构的学习笔记第六篇&#xff0c;将持续更新&#xff0c;欢迎小伙伴们阅读学习。有不懂的或错误的地方&#xff0c;欢迎交流 引言 当涉及到高效的数据存储和检索时&#xff0c;堆&#xff08;Heap&#xff09;是一种常用的数据结构。上一篇文章中介绍了树和完…

iOS自动化环境搭建(超详细)

1.macOS相关库安装 libimobiledevice > brew install libimobiledevice 使用本机与苹果iOS设备的服务进行通信的库。 ideviceinstaller brew install ideviceinstaller 获取设备udid、安装app、卸载app、获取bundleid carthage > brew install carthage 第三方库…

机器视觉初步5:图像预处理相关技术与原理简介

在机器视觉领域中&#xff0c;图像预处理是一项非常重要的技术。它是指在对图像进行进一步处理之前&#xff0c;对原始图像进行一系列的操作&#xff0c;以提高图像质量、减少噪声、增强图像特征等目的。本文将介绍一些常用的图像预处理技术&#xff0c;并通过配图说明&#xf…

Android CMake

首先了解几个名词 NDK The Android Native Development Kit The Android NDK is a toolset that lets you implement parts of your app in native code, using languages such as C and C. For certain types of apps, this can help you reuse code libraries written in t…

Centos7安装Python3.10

Centos7用yum安装的Python3版本比较旧&#xff0c;想要安装最新版本的Python3需要自己动手编译安装。下面就来讲讲安装步骤&#xff0c;主要分为这么几个步骤&#xff0c;依赖→下载→编译→配置。另外所有操作都是在root用户下进行。 依赖 编译Python源码需要依赖许多库&…