kubernetes: CPU 和内存单位解释、metric-server接口调用

简介: kubernetes: CPU 和内存单位解释、metric-server接口调用

目录

Pod 和 容器的资源请求和限制

CPU 的含义

内存的含义

kubernetes: 全面的CPU 和内存单位解释

CPU单位:n

通过kubernetes-client/java类库获取metric资源对象

metric-server简介

The Metrics API

Pod示例



Pod 和 容器的资源请求和限制

当您定义 Pod 的时候可以选择为每个容器指定需要的 CPU 和内存(RAM)大小。

Pod 中的每个容器都可以指定以下的一个或者多个值:

  • spec.containers[].resources.limits.cpu
  • spec.containers[].resources.limits.memory
  • spec.containers[].resources.requests.cpu
  • spec.containers[].resources.requests.memory

尽管只能在个别容器上指定请求和限制,但是我们可以方便地计算出 Pod 资源请求和限制。特定资源类型的Pod 资源请求/限制是 Pod 中每个容器的该类型的资源请求/限制的总和。


CPU 的含义

CPU 资源的限制和请求以 cpu 为单位。

Kubernetes 中的一个 cpu 等于:

  • 1 AWS vCPU
  • 1 GCP Core
  • 1 Azure vCore
  • 1 Hyperthread 在带有超线程的裸机 Intel 处理器上

允许浮点数请求。具有 spec.containers[].resources.requests.cpu 为 0.5 的容器保证了一半 CPU 要求 1 CPU的一半。

表达式 0.1 等价于表达式 100m,可以看作 “100 millicpu”。


内存的含义

内存的限制和请求以字节为单位。

您可以使用以下后缀之一作为平均整数或定点整数表示内存:E,P,T,G,M,K。

您还可以使用两个字母的等效的幂数:Ei,Pi,Ti ,Gi,Mi,Ki。例如,以下代表大致相同的值:

128974848, 129e6, 129M, 123Mi

i表示(1Mi=1024x1024), M表示(1M=1000x1000)(其它单位类推, 如Ki/K Gi/G


kubernetes: 全面的CPU 和内存单位解释

计算法则:次方

func newSuffixer() suffixer {
  sh := &suffixHandler{}
  // IMPORTANT: if you change this section you must change fastLookup
  sh.binSuffixes.addSuffix("Ki", bePair{2, 10})
  sh.binSuffixes.addSuffix("Mi", bePair{2, 20})
  sh.binSuffixes.addSuffix("Gi", bePair{2, 30})
  sh.binSuffixes.addSuffix("Ti", bePair{2, 40})
  sh.binSuffixes.addSuffix("Pi", bePair{2, 50})
  sh.binSuffixes.addSuffix("Ei", bePair{2, 60})
  // Don't emit an error when trying to produce
  // a suffix for 2^0.
  sh.decSuffixes.addSuffix("", bePair{2, 0})
  sh.decSuffixes.addSuffix("n", bePair{10, -9})
  sh.decSuffixes.addSuffix("u", bePair{10, -6})
  sh.decSuffixes.addSuffix("m", bePair{10, -3})
  sh.decSuffixes.addSuffix("", bePair{10, 0})
  sh.decSuffixes.addSuffix("k", bePair{10, 3})
  sh.decSuffixes.addSuffix("M", bePair{10, 6})
  sh.decSuffixes.addSuffix("G", bePair{10, 9})
  sh.decSuffixes.addSuffix("T", bePair{10, 12})
  sh.decSuffixes.addSuffix("P", bePair{10, 15})
  sh.decSuffixes.addSuffix("E", bePair{10, 18})
  return fastLookup{sh}
}


CPU单位:n

metrics-server中,获取某个节点的使用情况,cpu的单位有时是n (1m = 1000*1000n ):

Http请求:https://apiserver地址:6443/apis/metrics.k8s.io/v1beta1/nodes/节点名称

kubelet命令:kubectl  get nodes.metrics.k8s.io 节点名称 -o yaml

{
  "kind": "NodeMetrics",
  "apiVersion": "metrics.k8s.io/v1beta1",
  "metadata": {
    "name": "ac-private-2",
    "selfLink": "/apis/metrics.k8s.io/v1beta1/nodes/ac-private-2",
    "creationTimestamp": "2018-12-06T02:26:04Z"
  },
  "timestamp": "2018-12-06T02:25:46Z",
  "window": "30s",
  "usage": {
    "cpu": "22436949n",
    "memory": "3846476Ki"
  }
}



通过kubernetes-client/java类库获取metric资源对象

通过 kubernetes-client/java类库获取metric资源对象

注意:目前(截止2020年3月份), kubernetes-client/java类库并不支持直接调用metrics的api,所以只能通过CRD资源方式

标题

更多kubernetes-client/java类库使用,

参考《使用 Java 操作 Kubernetes API》https://blog.csdn.net/fly910905/article/details/101345091


metric-server简介

Metrics Server is a cluster-wide aggregator of resource usage data. Resource metrics are used by components like kubectl top and the Horizontal Pod Autoscaler to scale workloads. To autoscale based upon a custom metric, you need to use the Prometheus Adapter Metric-server是一个集群级别的资源指标收集器,用于收集资源指标数据

  • 提供基础资源如CPU、内存监控接口查询;
  • 接口通过 Kubernetes aggregator注册到kube-apiserver中;
  • 对外通过Metric API暴露给外部访问;
  • 自定义指标使用需要借助Prometheus实现。


The Metrics API

  • /node 获取所有节点的指标,指标名称为NodeMetrics
  • /node/<node_name> 特定节点指标
  • /namespaces/{namespace}/pods 获取命名空间下的所有pod指标
  • /namespaces/{namespace}/pods/{pod} 特定pod的指标,指标名称为PodMetrics

未来将能够支持指标聚合,如max最大值,min最小值,95th峰值,以及自定义时间窗口,如1h,1d,1w等。


Pod示例

以下 Pod 有两个容器。

每个容器的请求为 0.25 cpu 和 64MiB(226 字节)内存,每个容器的限制为 0.5 cpu 和 128MiB 内存。

您可以说该 Pod 请求 0.5 cpu 和 128 MiB 的内存,限制为 1 cpu 和 256MiB 的内存。

apiVersion: v1
kind: Pod
metadata:
  name: frontend
spec:
  containers:
  - name: db
    image: mysql
    env:
    - name: MYSQL_ROOT_PASSWORD
      value: "password"
    resources:
      requests:
        memory: "64Mi"
        cpu: "250m"
      limits:
        memory: "128Mi"
        cpu: "500m"
  - name: wp
    image: wordpress
    resources:
      requests:
        memory: "64Mi"
        cpu: "250m"
      limits:
        memory: "128Mi"
        cpu: "500m"


参考链接:

https://kubernetes.io/zh/docs/concepts/configuration/manage-compute-resources-container/

https://github.com/kubernetes/apimachinery/blob/564e0900f0fdabbdc81495b88ce0ca03a62f0af3/pkg/api/resource/suffix.go#L88


相关实践学习
深入解析Docker容器化技术
Docker是一个开源的应用容器引擎,让开发者可以打包他们的应用以及依赖包到一个可移植的容器中,然后发布到任何流行的Linux机器上,也可以实现虚拟化,容器是完全使用沙箱机制,相互之间不会有任何接口。Docker是世界领先的软件容器平台。开发人员利用Docker可以消除协作编码时“在我的机器上可正常工作”的问题。运维人员利用Docker可以在隔离容器中并行运行和管理应用,获得更好的计算密度。企业利用Docker可以构建敏捷的软件交付管道,以更快的速度、更高的安全性和可靠的信誉为Linux和Windows Server应用发布新功能。 在本套课程中,我们将全面的讲解Docker技术栈,从环境安装到容器、镜像操作以及生产环境如何部署开发的微服务应用。本课程由黑马程序员提供。 &nbsp; &nbsp; 相关的阿里云产品:容器服务 ACK 容器服务 Kubernetes 版(简称 ACK)提供高性能可伸缩的容器应用管理能力,支持企业级容器化应用的全生命周期管理。整合阿里云虚拟化、存储、网络和安全能力,打造云端最佳容器化应用运行环境。 了解产品详情: https://www.aliyun.com/product/kubernetes
相关文章
|
4月前
|
缓存 人工智能 算法
不同业务怎么选服务器?CPU / 内存 / 带宽配置表
本文详解了服务器三大核心配置——CPU、内存、带宽,帮助读者快速理解服务器性能原理。结合不同业务场景,如个人博客、电商、数据库、直播等,提供配置选择建议,并强调合理搭配的重要性,避免资源浪费或瓶颈限制。内容实用,适合初学者和业务选型参考。
782 0
|
4月前
|
存储 消息中间件 缓存
从纳秒到毫秒的“时空之旅”:CPU是如何看待内存与硬盘的?
在数据爆炸的时代,如何高效存储与管理海量数据成为系统设计的核心挑战。本文从计算机存储体系结构出发,解析B+树、LSM树与Kafka日志结构在不同数据库中的应用与优化策略,帮助你深入理解高性能存储背后的原理。
173 0
|
11月前
|
运维 Kubernetes 监控
K8S异常诊断之俺的内存呢
本文讲述作者如何解决客户集群中出现的OOM(Out of Memory)和Pod驱逐问题。文章不仅详细记录了问题的发生背景、现象特征,还深入探讨了排查过程中的关键步骤和技术细节。
736 108
K8S异常诊断之俺的内存呢
|
6月前
|
存储
阿里云轻量应用服务器收费标准价格表:200Mbps带宽、CPU内存及存储配置详解
阿里云香港轻量应用服务器,200Mbps带宽,免备案,支持多IP及国际线路,月租25元起,年付享8.5折优惠,适用于网站、应用等多种场景。
2033 0
|
3月前
|
弹性计算 定位技术 数据中心
阿里云服务器配置选择方法:付费类型、地域及CPU内存配置全解析
阿里云服务器怎么选?2025最新指南:就近选择地域,降低延迟;长期使用选包年包月,短期灵活选按量付费;企业选2核4G5M仅199元/年,个人选2核2G3M低至99元/年,高性价比爆款推荐,轻松上云。
218 11
|
5月前
|
弹性计算 前端开发 NoSQL
2025最新阿里云服务器配置选择攻略:CPU、内存、带宽与系统盘全解析
本文详解2025年阿里云服务器ECS配置选择策略,涵盖CPU、内存、带宽与系统盘推荐,助你根据业务需求精准选型,提升性能与性价比。
|
6月前
|
存储 弹性计算 固态存储
阿里云服务器配置费用整理,支持一万人CPU内存、公网带宽和存储IO性能全解析
要支撑1万人在线流量,需选择阿里云企业级ECS服务器,如通用型g系列、高主频型hf系列或通用算力型u1实例,配置如16核64G及以上,搭配高带宽与SSD/ESSD云盘,费用约数千元每月。
600 0
|
8月前
|
数据可视化 Linux iOS开发
Python测量CPU和内存使用率
这些示例帮助您了解如何在Python中测量CPU和内存使用率。根据需要,可以进一步完善这些示例,例如可视化结果或限制程序在特定范围内的资源占用。
333 22
|
11月前
|
运维 Kubernetes 监控
K8S异常诊断之俺的内存呢
K8S异常诊断之俺的内存呢

推荐镜像

更多