Kubernetes为容器和 Pods 分配 CPU 资源

news/2024/5/16 20:42:52/文章来源:https://blog.csdn.net/qq_46162321/article/details/129771943

Kubernetes为容器和 Pods 分配 CPU 资源

一、指定CPU请求和CPU限制

1、创建一个命名空间(namespace)

[root@master ~]# kubectl create namespace cpu-example
namespace/cpu-example created

2、编写yaml文件
要为容器指定CPU请求,需要在容器资源清单中包含resource: requests字段。要指定CPU限制,请包含resource: limits。
本次例子中年,将创建一个具有一个容器的Pod。容器将请求0.5个CPU,而且最多限制使用1个CPU。

[root@master cpu-request-limit]# vim cpu-request-limit.yaml 
[root@master cpu-request-limit]# cat cpu-request-limit.yaml 
apiVersion: v1
kind: Pod
metadata:name: cpu-demonamespace: cpu-example
spec:containers:- name: cpu-demo-ctrimage: vish/stressresources:limits:cpu: "1"requests:cpu: "0.5"# - cpus "2"表示容器尝试使用两个CPUargs:- -cpus- "2"[root@master cpu-request-limit]# kubectl apply -f cpu-request-limit.yaml 
pod/cpu-demo created

配置文件中args部分提供了容器启动时的参数。-cpus “2” 参数表示容器尝试使用2个CPU。

3、验证所创建的Pod

验证所创建的Pod是否处于Running状态

[root@master cpu-request-limit]# kubectl get pod cpu-demo --namespace cpu-example
NAME       READY   STATUS    RESTARTS   AGE
cpu-demo   1/1     Running   0          8m23s

查看显示关于Pod的详细信息

[root@master cpu-request-limit]# kubectl get pod cpu-demo -o yaml -n cpu-example

显示输出Pod中的一个容器的CPU请求为500milliCPU,并且CPU限制为1个CPU。

resources:limits:cpu: "1"requests:cpu: 500m

使用kubectl top命令来获取该Pod的指标

[root@master cpu-request-limit]# kubectl top pod cpu-demo --namespace=cpu-example    

此示例输出显示Pod所使用的是1001milliCPU,略低于Pod配置中指定的1个(1024milli)CPU的限制。

W0325 21:15:28.747704   14860 top_pod.go:140] Using json format to get metrics. Next release will switch to protocol-buffers, switch early by passing --use-protocol-buffers flag
NAME       CPU(cores)   MEMORY(bytes)   
cpu-demo   1001m        1Mi         

如果说设置 -cpu “2”,你将容器配置为尝试使用2个CPU,但是容器只被允许使用大约1个CPU。容器的CPU用量受到限制,因为该容器正尝试使用超出其限制的CPU资源。

说明:CPU使用率低于1.0的另一种可能的解释是,节点可能没有足够的CPU资源可用。此案例的先决条件需要你的集群至少具有一个CPU可用。如果你的容器在只有一个CPU的节点上运行,则容器无论为容器指定的CPU限制如何,都不能使用超过1个CPU。

额外知识
CPU资源以CPU单位度量,Kubernetes中的一个CPU等同于:

  • 1个AWS vCPU
  • 1个GCP核心
  • 1个Azure vCore
  • 裸机上具有超线程能力的英特尔处理器的1个超线程
    小数值是可以使用的。一个请求0.5CPU的容器保证会获得请求1个CPU的容器的CPU的一半。你可以使用后缀m表示毫。例如100mCPU、100milliCPU都相同。精度不能超过1m。
    CPU请求只能使用绝对数量,而不是相对数量。0.1在单核、双核或48核计算机上的数量值是一样的。

删除容器

[root@master cpu-request-limit]# kubectl delete -f cpu-request-limit.yaml 
pod "cpu-demo" deleted

二、设置超过节点能力的CPU请求

CPU请求和限制都与容器相关,但是我们可以考虑一下Pod具有对应的CPU请求和限制这样的场景。Pod对CPU用量的请求等于Pod中所有容器的请求数量之和。同样,Pod的CPU资源限制等于Pod中所有容器CPU资源限制数之和。

Pod调度是基于资源请求值来进行的。仅在某节点具有足够的CPU资源来满足Pod CPU请求时,Pod 将会在对应节点上运行:

在本案例中,你将创建一个 Pod,该 Pod 的 CPU 请求对于集群中任何节点的容量而言都会过大。 下面是 Pod 的配置文件,其中有一个容器。容器请求 100 个 CPU,这可能会超出集群中任何节点的容量。

[root@master cpu-request-limit]# vim cpu-request-limit2.yaml
[root@master cpu-request-limit]# cat cpu-request-limit2.yaml 
apiVersion: v1
kind: Pod
metadata:name: cpu-demo-2namespace: cpu-example
spec:containers:- name: cpu-demo-ctr-2image: vish/stressresources:limits:cpu: "100"requests:cpu: "100"args:- -cpus- "2"

1、创建Pod

[root@master cpu-request-limit]# kubectl create -f cpu-request-limit2.yaml 
pod/cpu-demo-2 created

2、查看Pod的状态

输出显示 Pod 状态为 Pending。也就是说,Pod 未被调度到任何节点上运行, 并且 Pod 将无限期地处于 Pending 状态:

[root@master cpu-request-limit]# kubectl get pod cpu-demo-2 -n cpu-example
NAME         READY   STATUS    RESTARTS   AGE
cpu-demo-2   0/1     Pending   0          53s

查看有关 Pod 的详细信息,包含事件

kubectl describe pod cpu-demo-2 --namespace=cpu-exampleEvents:Type     Reason            Age   From               Message----     ------            ----  ----               -------Warning  FailedScheduling  2m    default-scheduler  0/1 nodes are available: 1 Insufficient cpu.Warning  FailedScheduling  119s  default-scheduler  0/1 nodes are available: 1 Insufficient cpu.

输出显示由于节点上的 CPU 资源不足,无法调度容器:

在这里插入图片描述
3、删除Pod

[root@master cpu-request-limit]# kubectl delete -f cpu-request-limit2.yaml 
pod "cpu-demo-2" deleted

如果不指定 CPU 限制

1、如果你没有为容器指定 CPU 限制,则会发生以下情况之一:

容器在可以使用的 CPU 资源上没有上限。因而可以使用所在节点上所有的可用 CPU 资源。

容器在具有默认 CPU 限制的名字空间中运行,系统会自动为容器设置默认限制。 集群管理员可以使用 LimitRange 指定 CPU 限制的默认值。

如果你设置了 CPU 限制但未设置 CPU 请求

如果你为容器指定了 CPU 限制值但未为其设置 CPU 请求,Kubernetes 会自动为其 设置与 CPU 限制相同的 CPU 请求值。类似的,如果容器设置了内存限制值但未设置 内存请求值,Kubernetes 也会为其设置与内存限制值相同的内存请求。

CPU 请求和限制的初衷

通过配置你的集群中运行的容器的 CPU 请求和限制,你可以有效利用集群上可用的 CPU 资源。 通过将 Pod CPU 请求保持在较低水平,可以使 Pod 更有机会被调度。 通过使 CPU 限制大于 CPU 请求,你可以完成两件事:

Pod 可能会有突发性的活动,它可以利用碰巧可用的 CPU 资源。

Pod 在突发负载期间可以使用的 CPU 资源数量仍被限制为合理的数量。

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

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

相关文章

STC32G 比较器及其应用编程

一 STC32G系列单片机寄存器简介STC32G系列单片机内部集成了一个比较器,其正极可以在P3.7、P5.0、P5.1、或者ADC的模拟输入通道间切换;而负极可以是P3.7或者内部BandGap经过OP的REF电压。通过配置分时复用可以实现多个比较器的应用。STC32G系列单片机的比…

MySQL数据库基础到进阶笔记整理包含事务、SQL优化、锁等内容

写在前面 本文是在学习MySQL数据库时整理的笔记,可供初学者学习 是在https://dhc.pythonanywhere.com/entry/share/?key12e4a7324f68371db3984d93e26e458962a4f0bc188ec23ec70637a4f3b4d58f 笔记基础上增加了一些内容以及后续的锁、InnoDB引擎等内容 课程参考b站黑…

Java数据结构与算法----搜索篇(DFS与BFS)

一.概念DFS(Depth First Search)深度优先搜索 和BFS(Breadth First Search)广度优先搜索 是两种广泛应用于搜索和遍历算法中的基本技术。这两种算法都涉及到搜索数据结构中的节点 。这里我们以二叉树为例,简单地图解一…

实验九 TSP问题

《算法设计与分析》实验报告 所在院系 计算机与信息工程学院 学生学号 学生姓名 年级专业 2020级计算机科学与技术 授课教师 彭绪富 学 期 2022-2023学年第一学期 提交时间 2022年10月26日 目 录 实验九-1:TSP问题 一、实验目的与要求 二…

【图解http】

目录了解web及网络基础TCP/IP协议族与HTTP关系密切的协议:IP、TCP和DNS各种协议与HTTP协议的关系URI和URLhttp协议HTTP是不保存状态的协议请求URI定位资源告知服务器意图的HTTP方法持久连接节省通信量HTTP报文编码提升传输速率压缩传输的内容编码分割发送的分块传输…

关于参加新星计划的收获

目录 作者简介 前言 一、新星计划介绍 二、新星计划创作目标 (一)创作打卡阶段第1周(3/13-3/19) (二)创作打卡阶段第2周(3/20-3/26) 三、参赛文章的构思与创作 &#xff08…

Go map 内存泄露

前言 在Go中, map这个结构使用的频率还是比较高的. 其实在所有的语言中, map使用的频率都是很高的. 之前在使用中, 一直都知道map的内存在元素删除的时候不会回收, 但一直没有仔细的研究为什么. 今天就来好好揣摩揣摩. func main() {m : make(map[int][128]byte)for i : 0; …

2023热门抖音权重查询小程序源码

2023热门抖音权重查询小程序源码 跟抖音上很火的一模一样,小程序适配优化。接口免费。小程序不是网页 修改教程: 1,如果想修改或者去除水印,直接删除或修改“index.html”12~22行 2,如果想修改logo,直接…

“全球首款旗舰”填补行业空白,两轮电动车技术创新为何只看绿源?

作者 | 曾响铃 文 | 响铃说 乒乓作为我们的“国球”,在数不清的体育赛事里书写辉煌战绩,也进一步被国人熟知、热爱。更难能可贵的是“国球”精神:“别人可能练了一千次,而我们却练了一万次”,冠军品质,奋…

MYSQL【基础篇】MYSQL 主要函数

MySQL中的函数主要分为以下四类: 字符串函数、数值函数、日期函数、流程函数 ​MySQL函数是MySQL数据库提供的内部函数。这些内部函数可以帮助用户更加方便的处理表中的数据 MySQL函数可以对表中数据进行相应的处理,以便得到用户希望得到的数据。这些函…

JAVA Session会话 Thymeleaf - 视图模板技术配置步骤

JAVAWebSession会话会话跟踪技术session保存作用域Thymeleaf - 视图模板技术配置过程Session会话 HTTP是无状态的:服务器无法区分这两个请求是同一个客户端发过来的,还是不同的客户端发过来的 现实问题:第一次请求是添加商品到购物车&#x…

C++中的string类【详细分析及模拟实现】

string类 目录string类一、stirng的介绍及使用1.为什么学习string类?2.标准库中的string类2.1 引入:编码2.2 basic_string3.string类的使用3.1 构造函数3.2 遍历string方式1:for循环方式2:范围for4.迭代器4.1 正向迭代器4.2反向迭…

Golang流媒体实战之二:回源

欢迎访问我的GitHub 这里分类和汇总了欣宸的全部原创(含配套源码):https://github.com/zq2599/blog_demos 本篇概览 今天的实战是流传输过程中的常见功能:回源如下图,lal(源站)和lal(拉流节点)代表两台电脑,上面都部署了lalVLC在…

【蓝桥杯】巧克力

问题描述: 题解分析: 错误思想:本来的想法是先使用低价格的巧克力,并且判断需要吃几块【其中内容比较细】,直接计算即可,但是本题好像不可以用简单的最小价格的贪心来做 正确思路:创建一个结…

【内网安全】 横向移动IPCATSC命令Impacket套件CS插件全自动

文章目录域信息收集-目标&用户&凭据&网络域横向移动-IPC-命令版-AT&schtasks上线配置at < Windows2012 (该版本之前的操作系统使用at命令)补充反向连接上线效果图schtasks >Windows2012(适用于windows2012后的操作系统版本)建立IPC常见的错误代码域横向移…

【MySQL】JDBC---数据库编程

目录JDBC介绍准备工作操作数据库本文介绍 java 如何使用 jdbc 连接数据库以及连接数据库后的基本操作。JDBC介绍 首先来了解 JDBC(Java Database Connectivity)&#xff0c;java数据库连接。是 Java 提供一套用于操作数据库的接口 API&#xff0c;是 Java 中的数据库连接规范&…

Chapter8.2:PID控制器设计及MATLAB_SIMULINK应用

该系列博客主要讲述Matlab软件在自动控制方面的应用&#xff0c;如无自动控制理论基础&#xff0c;请先学习自动控制系列博文&#xff0c;该系列博客不再详细讲解自动控制理论知识。 自动控制理论基础相关链接&#xff1a;https://blog.csdn.net/qq_39032096/category_10287468…

Flink-FinkSQL进阶操作(系统函数,UDF,表聚合函数等,输入kafka,elasticsearch等外部系统)

11.7 函数 11.7.1 系统函数 标量函数 只有数值大小&#xff0c;没有方向的量&#xff0c;行变行 比较函数 逻辑函数 算数函数 字符串函数 时间函数 聚合函数 多行变一行 count(),sum(),rank(),row_number() 11.7.2 自定义函数(UDF) 分类 标量函数&#xff0c;聚合函…

【数据结构】二叉树及相关习题详解

新年新气象! 祝大家兔年 财源滚滚! 万事胜意! 文章目录前言1. 树的一些基础概念1.1 树的一些基本概念1.2 树的一些重要概念2. 二叉树的一些基本概念2.1 二叉树的结构2.2 两种特殊的二叉树3. 二叉树的性质4. 二叉树的存储5. 二叉树的基本操作5.1 构造一棵二叉树5.2 二叉树的遍历…

华为OD机试题【剩余可用字符集】用 Java 解 | 含解题说明

华为Od必看系列 华为OD机试 全流程解析+经验分享,题型分享,防作弊指南华为od机试,独家整理 已参加机试人员的实战技巧华为od 2023 | 什么是华为od,od 薪资待遇,od机试题清单华为OD机试真题大全,用 Python 解华为机试题 | 机试宝典本篇题目:剩余可用字符集 题目 给定两个…