k8s 容器 cpu 概念

k8s 容器 cpu 使用率计算公式

JSON 复制代码
cpu 使用率 = (使用 / 申请) * 100  /  (限制 / 申请)

PromQL 表达式

SQL 复制代码
(sum(sum(irate(container_cpu_usage_seconds_total{namespace=~'namespace',pod=~'^prod.*|^prepare.*',container!='POD',image!=''}[1m])) by (namespace,pod)) by (namespace)
/
sum(sum(kube_pod_container_resource_requests{container!='POD',namespace=~'namespace',pod=~'^prod.*|^prepare.*',resource='cpu',unit='core'}) by (namespace,pod)) by (namespace))
* 100
/
(sum(sum(kube_pod_container_resource_limits{container!='POD',namespace=~'namespace',pod=~'^prod.*|^prepare.*',container!='POD',resource='cpu',unit='core'}) by (namespace,pod)) by (namespace)
/
sum(sum(kube_pod_container_resource_requests{container!='POD',namespace=~'namespace',pod=~'^prod.*|^prepare.*',container!='POD',resource='cpu',unit='core'}) by (namespace,pod)) by (namespace))

可简化为:

JSON 复制代码
使用率 = (使用 / 限制) * 100

PromQL 表达式

SQL 复制代码
sum(irate(container_cpu_usage_seconds_total{namespace=~'namespace',pod=~'^prod.*|^prepare.*',container!='POD',image!=''}[1m])) by (namespace)
/
sum(kube_pod_container_resource_limits{namespace=~'namespace',pod=~'^prod.*|^prepare.*',container!~'POD|checkurl-sidecar|bistoury-agent|filebeat',resource='cpu',unit='core'}) by (namespace)
* 100

名词解释

cpu 使用率指标

限制>申请, 限制>使用,申请和使用大小不确定,看实际情况。

  1. 使用(实际 cpu 使用量): 容器真实消耗的 cpu 核心数,通过速率计算得到。

    1. 表达式:

      sql 复制代码
      sum(
        irate(
          container_cpu_usage_seconds_total{
            namespace=~"namespace",
            pod=~'^prod.*|^prepare.*',
            container!="POD",
            image!=""
          }[1m]
        )
      ) by (namespace)
  2. 申请(cpu request, 即申请量): pod 容器申请的 cpu 资源配额(调度保障值)。

    1. 表达式:

      sql 复制代码
      sum(
        kube_pod_container_resource_requests{
          namespace=~"namespace",
          pod=~'^prod.*|^prepare.*',
          container!="POD",
          resource="cpu",
          unit="core"
        }
      ) by (namespace)
  3. 限制(cpu limit / 上限值): Pod 容器允许使用的最大 cpu 资源上限。

    1. 表达式:

      sql 复制代码
      sum(
        kube_pod_container_resource_limits{
          namespace=~"namespace",
          pod=~'^prod.*|^prepare.*',
          container!="POD",
          resource="cpu",
          unit="core"
        }
      ) by (namespace)

申请(request)和限制(limit)的关系

  1. request < limit 的做法,是 k8s 实践中的常见做法,称为超配(overcommitment),可以节约资源成本。通俗理解: 物理机器 160 核,每个 pod limit 16 核,request 10 核,则一台物理机器能部署 16 个 pod。预期每个 pod 不会同时达到 16 核(即 cpu 使用率 100%),这样节约资源的同时提供正常服务。
  2. request < limit,无法每个 pod 都能同时使用 limit 额度的 cpu 资源。如果每个 pod 都尝试达到 16 核(即 cpu 使用率 100%),必然有 pod 实际使用的 cpu 资源小于 16 核(cpu 无法达到使用率 100%),影响这些拿不到资源的 pod 的性能。
  3. request = limit,pod 可以同时达到 cpu 使用率 100%,但实践中大部分时间 pod 不会达到 cpu 使用率 100%,闲置资源没有被充分利用。
  4. K8s 根据 request 和 limit 划分服务质量(QoS)分级:
    1. Guaranteed: request = limit
    2. Burstable: request < limit
    3. BestEffort: 无 request
    4. K8s的调度器会根据Pod的QoS类别来决定资源的分配和Pod的调度。在资源紧张的情况下,系统会优先保证 Guaranteed Pod 的资源需求,其次是 Burstable Pod ,而 BestEffort Pod 则会被牺牲。

其他 k8s 名词解释

  1. Kubernetes: Kubernetes(简称 k8s) 是一个开源的容器编排系统,用于自动化部署、扩展和管理容器化应用程序。应用实例基于该系统进行管理调度。
  2. 容器: 容器是一种轻量级的虚拟化技术,它可以将应用程序及其依赖项打包到一个独立的单元中,称为容器。容器与传统虚拟机(VM)不同,容器不包含完整的操作系统,而是共享主机操作系统内核。这使得容器更加轻量级和高效,并且可以更快地启动和停止。
  3. docker: 是一个开源的平台,提供了一套解决方案,用于构建、运行、管理和分发容器。
  4. Pod: 在 k8s 中,pod 是最小调度单元,也是我们通常理解的应用实例,但 pod 是可以包含一个或多个容器的。
  5. sidecar: 通常 1 个 pod 中包含主容器和辅助容器,其中1个为业务容器,也就是主容器。其他为辅助容器,提供如健康监测、debug工具、日志收集等功能。k8s 中将这些辅助容器称为 sidecar 容器,辅助容器会占用部分 pod 资源。
  6. Resource: k8s 中容器的资源分配,如 cpu、memory,其中对这两者资源分配有两个配置,即 requests、limits,request 代表最小可用资源,limits 代表最大可用资源。
相关推荐
simeple几秒前
记一次 Docker Compose 项目迁移:从 Windows Docker Desktop 迁移到 CentOS 服务器
docker
哆啦A梦——39 分钟前
Ubuntu 虚拟机 Docker 与 MySQL 8.0.42 部署指南
mysql·ubuntu·docker
Plastic garden1 小时前
K8s知识(3) Pod亲和性,调度
云原生·容器·kubernetes
木雷坞2 小时前
Playwright MCP Docker 部署:mcr 镜像、浏览器工具和权限配置
运维·docker·容器·mcp
das2m2 小时前
WSL2 Ubuntu 配置完美版 docker compose 指南
linux·ubuntu·docker
暮云星影2 小时前
个人总结 docker搭建私人照片云相册Immich
docker·容器·arm
张忠琳2 小时前
【client-go v0.36.1】(store Part 1)Store 超深度分析 — 模块定位、接口层次、类结构、KeyFunc体系、构造初始化
云原生·kubernetes·informer·store·client-go
AI服务老曹2 小时前
破局异构计算与海量协议:基于 Docker 容器化的国标 GB28181/RTSP 边缘计算 AI 视频管理平台架构设计与源码交付实践
人工智能·docker·边缘计算
江湖有缘2 小时前
Docker一键部署open-resume简历生成器
运维·docker·容器