【k8s】pod进阶
一、资源限制
1、资源限制的概念
当定义 Pod 时可以选择性地为每个容器设定所需要的资源数量。 最常见的可设定资源是 CPU 和内存大小,以及其他类型的资源。
当为 Pod 中的容器指定了 request 资源时,调度器就使用该信息来决定将 Pod 调度到哪个节点上。当还为容器指定了 limit 资源时,kubelet 就会确保运行的容器不会使用超出所设的 limit 资源量。kubelet 还会为容器预留所设的 request 资源量, 供该容器使用。
request就是预留值
如果 Pod 运行所在的节点具有足够的可用资源,容器可以使用超出所设置的 request 资源量。不过,容器不可以使用超出所设置的 limit 资源量。
如果给容器设置了内存的 limit 值,但未设置内存的 request 值,Kubernetes 会自动为其设置与内存 limit 相匹配的 request 值。 类似的,如果给容器设置了 CPU 的 limit 值但未设置 CPU 的 request 值,则 Kubernetes 自动为其设置 CPU 的 request 值 并使之与 CPU 的 limit 值匹配。
官网示例:
https://kubernetes.io/docs/concepts/configuration/manage-compute-resources-container/
2、Pod 和 容器 的资源请求和限制:
spec.containers[].resources.requests.cpu //定义创建容器时预分配的CPU资源
spec.containers[].resources.requests.memory //定义创建容器时预分配的内存资源
spec.containers[].resources.limits.cpu //定义 cpu 的资源上限
spec.containers[].resources.limits.memory //定义内存的资源上限
3、CPU 资源单位
CPU 资源的 request 和 limit 以 cpu 为单位。Kubernetes 中的一个 cpu 相当于1个 vCPU(1个超线程)。
Kubernetes 也支持带小数 CPU 的请求。spec.containers[].resources.requests.cpu 为 0.5 的容器能够获得一个 cpu 的一半 CPU 资源(类似于Cgroup对CPU资源的时间分片)。表达式 0.1 等价于表达式 100m(毫核),表示每 1000 毫秒内容器可以使用的 CPU 时间总量为 0.1*1000 毫秒。
Kubernetes 不允许设置精度小于 1m 的 CPU 资源。
4、内存 资源单位
内存的 request 和 limit 以字节为单位。可以以整数表示,或者以10为底数的指数的单位(E、P、T、G、M、K)来表示, 或者以2为底数的指数的单位(Ei、Pi、Ti、Gi、Mi、Ki)来表示。
如:1KB=10^3=1000,1MB=10^6=1000000=1000KB,1GB=10^9=1000000000=1000MB
1KiB=2^10=1024,1MiB=2^20=1048576=1024KiB
PS:在买硬盘的时候,操作系统报的数量要比产品标出或商家号称的小一些,主要原因是标出的是以 MB、GB为单位的,1GB 就是1,000,000,000Byte,而操作系统是以2进制为处理单位的,因此检查硬盘容量时是以MiB、GiB为单位,1GiB=2^30=1,073,741,824,相比较而言,1GiB要比1GB多出1,073,741,824-1,000,000,000=73,741,824Byte,所以检测实际结果要比标出的少一些。
示例1:
apiVersion: v1
kind: Pod
metadata:name: pod-resourcesnamespace: dev
spec:containers:- name: nginximage: nginx:1.17.1resources: # 资源配额limits: # 限制资源(上限)cpu: "2" # CPU限制,单位是core数 memory: "10Gi" # 内存限制requests: # 请求资源(下限)cpu: "1" # CPU限制,单位是core数memory: "10Mi" # 内存限制 #以上是可以正常创建pod的,然后再将requests的最小内存限制改为10Gi,再创建pod,查看是否创建成功#发现是无法创建成功的,因为requests最小请求量不仅需要满足容器内部的应用启动大小, 也需要在当前node节点上能划分出该设定的资源的。不然资源无法请求成功到,容器也无法运行。

kubectl apply -f pod-resources.yaml
kubectl get pods -n dev
kubectl describe pod pod-resources -n dev
#查看详细信息kubectl logs pod-resources -c nginx
#查看对象的容器日志信息


此例子中的 Pod 有两个容器。每个容器的 request 值为 0.25 cpu 和 64MiB 内存,每个容器的 limit 值为 0.5 cpu 和 128MiB 内存。那么可以认为该 Pod 的总的资源 request 为 0.5 cpu 和 128 MiB 内存,总的资源 limit 为 1 cpu 和 256MiB 内存。
示例2:
apiVersion: v1
kind: Pod
metadata:name: frontend
spec:containers:- name: webimage: nginxenv:- name: WEB_ROOT_PASSWORDvalue: "password"resources:requests:memory: "64Mi"cpu: "250m"limits:memory: "128Mi"cpu: "500m"- name: dbimage: mysqlenv:- name: MYSQL_ROOT_PASSWORDvalue: "abc123"resources:requests:memory: "512Mi"cpu: "0.5"limits:memory: "1Gi"cpu: "1"

kubectl create -f pod-resource2.yaml
kubectl get pods -owide
kubectl describe pods frontend
kubectl describe nodes node02




二:健康检查:又称为探针(Probe)
探针是由kubelet对容器执行的定期诊断。
1、探针的三种规则:
●存活探针(livenessProbe) :判断容器是否正在运行。如果探测失败,则kubelet会杀死容器,并且容器将根据容器策略来决定是否重启。 如果容器不提供存活探针,则默认状态为Success。
●就绪探针(readinessProbe) :判断容器是否准备好接受请求。如果探测失败,就会加入notready状态,并且service资源的endpoints中剔除,service将不会把访问请求转发给这个pod
●启动探针(startupProbe)(这个1.17版本增加的):判断容器内的应用程序是否已启动,在探测成功转换为suuccess之前,其他探针都会处于失效状态。
#注:以上规则可以同时定义。在readinessProbe检测成功之前,Pod的running状态是不会变成ready状态的。
2、Probe支持三种检查方法:
●exec :在容器内执行指定命令。如果命令退出时返回码为0则认为诊断成功。
●tcpSocket :对指定端口上的容器的IP地址进行TCP检查(三次握手)。如果端口打开,则诊断被认为是成功的。
●httpGet :对指定的端口和路径上的容器的IP地址执行HTTPGet请求。如果响应的状态码大于等于200且小于400,则诊断被认为是成功的。
每次探测都将获得以下三种结果之一:
●成功:容器通过了诊断。
●失败:容器未通过诊断。
●未知:诊断失败,因此不会采取任何行动
官网示例:
https://kubernetes.io/docs/tasks/configure-pod-container/configure-liveness-readiness-startup-probes/
示例1:exec方式
apiVersion: v1
kind: Pod
metadata:name: pod-liveness-execnamespace: dev
spec:containers:- name: nginximage: nginx:1.17.1ports: - name: nginx-portcontainerPort: 80livenessProbe:exec:command: ["/bin/cat","/tmp/hello.txt"] # 执行一个查看文件的命令

kubectl create -f pod-liveness-exec.yaml
#创建podkubectl describe pods pod-liveness-exec -n dev
#查看pod详情kubectl get pods pod-liveness-exec -n dev
#查看pod的状态//以上进行探测的时候,会探测失败,所以就导致pod不停的重启,后面将command命令中的执行命令换成可执行的正常命令即可。



#initialDelaySeconds:指定 kubelet 在执行第一次探测前应该等待5秒,即第一次探测是在容器启动后的第6秒才开始执行。默认是 0 秒,最小值是 0。
#periodSeconds:指定了 kubelet 应该每 5 秒执行一次存活探测。默认是 10 秒。最小值是 1。
#failureThreshold: 当探测失败时,Kubernetes 将在放弃之前重试的次数。 存活探测情况下的放弃就意味着重新启动容器。就绪探测情况下的放弃 Pod 会被打上未就绪的标签。默认值是 3。最小值是 1。
#timeoutSeconds:探测的超时后等待多少秒。默认值是 1 秒。最小值是 1。(在 Kubernetes 1.20 版本之前,exec 探针会忽略 timeoutSeconds 探针会无限期地 持续运行,甚至可能超过所配置的限期,直到返回结果为止。)
可以看到 Pod 中只有一个容器。kubelet 在执行第一次探测前需要
示例2:httpGet方式
apiVersion: v1
kind: Pod
metadata: labels:test: livenessname: liveness-execnamespace: dev
spec:containers:- name: livenessimage: busyboximagePullPolicy: IfNotPresentargs:- /bin/sh- -c- touch /tmp/healthy;sleep 30;rm -rf /tmp/healthy;sleep 60livenessProbe:exec:command:- cat- /tmp/healthyfailureThreshold: 1initialDelaySeconds: 5periodSeconds: 5
------------------------------------------------------------
failureThreshold: # 当探测失败是,k8s将在放弃之前重试次数。存活探测情况下的放弃就意味着重新启动。就绪性探测情况下放弃Pod 会被打伤未就绪的标签,默认值是3,最小值是1。
(简单理解:就是探测的失败次数,允许连续探测几次)initialDelaySeconds: #指定kubelet在执行第一次探测前应该等待的时间,也就就是第一次探测的时间初始化结束后的第1秒,初始化时间默认0秒,最小值0秒。
(简单理解:就是每次的第一次探测前需要等待的时间,如果探测多次,不用等待)periodSeconds: #指定了kubelet 应该多久时间执行一次探测,默认10秒,最小值是1秒。timeoutSeconds: #探测的超时后等待多少秒,默认值是1秒,最小值是1秒。(在kubernetes 1.20版本之前,exec探针会忽略此事件,探针会无限期的持续运行,升值可能超过所配置的限期,知道返回结果为止)
下面进行创建pod,观察探测结果
kubectl create -f pod-liveness2.yaml
#创建podkubectl get pods -n dev -w
#提前时实监控一个pod

示例3:tcpSocket方式
apiVersion: v1
kind: Pod
metadata:name: pod-liveness-tcpsocketnamespace: dev
spec:containers:- name: nginximage: nginx:1.17.1ports: - name: nginx-portcontainerPort: 80livenessProbe:tcpSocket:port: 8080 # 尝试访问8080端口

kubectl create -f pod-liveness-tcpsocket.yaml
#创建podkubectl get pods pod-liveness-tcpsocket -n dev
#查看容器状态kubectl describe pods pod-liveness-tcpsocket -n dev
#查看容器的详细状态//观察上面的信息,发现尝试访问8080端口,但是失败了
//稍微一会之后,再观察pod信息,就可看到RESTART不再是0 ,而是一直增长。表示pod在重启
#当然接下来,可以修改一个可以访问的端口,比如80,正常访问后,活性检测就正常。


相关文章:
【k8s】pod进阶
一、资源限制 1、资源限制的概念 当定义 Pod 时可以选择性地为每个容器设定所需要的资源数量。 最常见的可设定资源是 CPU 和内存大小,以及其他类型的资源。 当为 Pod 中的容器指定了 request 资源时,调度器就使用该信息来决定将 Pod 调度到哪个节点上…...
【设计模式】第18节:行为型模式之“迭代器模式”
一、简介 迭代器模式(Iterator Design Pattern),也叫作游标模式(Cursor Design Pattern)。 在通过迭代器来遍历集合元素的同时,增加或者删除集合中的元素,有可能会导致某个元素被重复遍历或遍…...
【数据结构】单链表OJ题
前言: 本节博客将讲解单链表的反转,合并有序链表,寻找中间节点及约瑟夫问题 文章目录 一、反转链表二、合并有序链表三、链表的中间结点四、环形链表的约瑟夫问题 一、反转链表 要反转链表,我们需要遍历链表并改变每个节点的 next 指针&#…...
智能工厂架构
引:https://www.bilibili.com/video/BV1Vs4y167Kx/?spm_id_from=333.788&vd_source=297c866c71fa77b161812ad631ea2c25 智能工厂框架 智能工厂五层系统框架 MES 数据共享 <...
阿里云多款ECS产品全面升级 性能最多提升40%
“阿里云始终围绕‘稳定、安全、性能、成本、弹性’的目标不断创新,为客户创造业务价值。”10月31日,杭州云栖大会上,阿里云弹性计算计算产品线负责人张献涛表示,通过持续的产品和技术创新,阿里云发布了HPC优化实例等多…...
责任链模式(Chain of Responsibility)
责任链模式是对象的行为模式。使多个对象都有机会处理请求,从而避免请求的发送者和接受者直接的耦合关系。 public abstract class Handler {protected Handler successor;public abstract void handlerRequest(String condition);protected Handler getSuccessor()…...
文件管理技巧:根据大小智能分类并移动至目标文件夹
在文件管理过程中,我们经常需要整理大量的文件。根据文件的大小,将其智能分类并移动至目标文件夹,可以帮助我们更高效地管理文件,提高工作效率。通过使用云炫文件管理器可以根据文件大小进行智能分类和移动至目标文件夹࿰…...
具有自主产权的SaaS门店收银系统全套源码输出
PHPMysql前后端分离, 小程序线上商城; 进销存管理库存盘点, 多仓库库存调拨, 会员系统。 消费者扫码查价系统。...
论文阅读:One Embedder, Any Task: Instruction-Finetuned Text Embeddings
1. 优势 现存的emmbedding应用在新的task或者domain上时表现会有明显下降,甚至在相同task的不同domian上的效果也不行。这篇文章的重点就是提升embedding在不同任务和领域上的效果,特点是不需要用特定领域的数据进行finetune而是使用instuction finetun…...
[BUUCTF NewStarCTF 2023 公开赛道] week3 crypto/pwn
居然把第3周忘了写笔记了. 后边难度上来了,还是很有意思的 Crypto Rabins RSA rsa一般要求e与phi互质,但rabin一般用2,都是板子题也没什么好解释的 from Crypto.Util.number import * from secret import flag p getPrime(64) q getPrime(64) assert p % 4 3 assert q %…...
软件测试---边界值分析(功能测试)
能对限定边界规则设计测试点---边界值分析 选取正好等于、刚好大于、刚好小于边界的值作为测试数据 上点: 边界上的点 (正好等于);必选(不考虑区开闭) 内点: 范围内的点 (区间范围内的数据);必选(建议选择中间范围) 离点: 距离上点最近的点 (刚好…...
使用pytorch处理自己的数据集
目录 1 返回本地文件中的数据集 2 根据当前已有的数据集创建每一个样本数据对应的标签 3 tensorboard的使用 4 transforms处理数据 tranfroms.Totensor的使用 transforms.Normalize的使用 transforms.Resize的使用 transforms.Compose使用 5 dataset_transforms使用 1 返回本地…...
http进一步认识
好久不见各位,今天为大家带来http协议的进一步认识 文章目录 👀http协议的认识👀新的改变 👀http协议的认识 http协议经历了三个版本的演化,HTTP0.9是第一个版本的协议,它的组成极其简单,只涉…...
grafana docker安装
grafana docker安装 Grafana是一款用Go语言开发的开源数据可视化工具,可以做数据监控和数据统计,带有告警功能。目前使用grafana的公司有很多,如paypal、ebay、intel等。 Grafana 是 Graphite 和 InfluxDB 仪表盘和图形编辑器。Grafana 是开…...
【Kubernetes】初识k8s--扫盲阶段
文章目录 1、k8s概述2、为什么要有k8s2.1 回顾以往的应用部署方式2.2 容器具有的优势 3、k8s能带来什么 1、k8s概述 kubernetes是一个可移植、可扩展的开源平台,用于管理 容器化 的工作负载和服务,可促进申明式配置和自动化。kubernetes拥有一个庞大且快…...
“01”滴答“摩尔斯电码”加密解密单个字符
“01”替换滴嗒“.-”“摩尔斯电码”字符,加密解密键盘输入的单个字符。 (本笔记适合熟悉循环和列表的 coder 翻阅) 【学习的细节是欢悦的历程】 Python 官网:https://www.python.org/ Free:大咖免费“圣经”教程《 python 完全自学教程》&a…...
P3817 小A的糖果
Portal. 贪心。 注意到这里的盒子不会被删除,只会改变盒子的值。问题立刻简单化了。对于一组相邻的糖果个数和大于 x x x 的盒子组,优先吃掉靠后的盒子。 证明正确性也很显然,因为减少后面的盒子的糖果数可以使得后面的情况更优。 #incl…...
Yolov8目标识别与实例分割——算法原理详细解析
前言 YOLO是一种基于图像全局信息进行预测并且它是一种端到端的目标检测系统,最初的YOLO模型由Joseph Redmon和Ali Farhadi于2015年提出,并随后进行了多次改进和迭代,产生了一系列不同版本的YOLO模型,如YOLOv2、YOLOv3、YOLOv4&a…...
HandlerMethodArgumentResolver方法参数解析器支持多用户
1、概述 HandlerMethodArgumentResolver,中文称为方法参数解析器,是Spring Web(SpringMVC)组件中的众多解析器之一,主要用来对Controller中方法的参数进行处理。 使用场景 在一般的接口调用场景下,每次调用Controller都需要检查请求中的token信息,并根据token还原用户信息…...
【Linux】 man命令使用
介绍 man命令是Linux下最核心的命令之一。而man命令也并不是英文单词“man”的意思,它是单词manual的缩写,即使用手册的意思。 man命令会列出一份完整的说明。 其内容包括命令语法、各选项的意义及相关命令 。更为强大的是,不仅可以查看Lin…...
RT-Thread Nano串口控制台移植:GD32F470实现rt_kprintf打印与调试
1. 项目概述与核心目标上次我们成功把 RT-Thread Nano 内核搬到了梁山派 GD32F470 开发板上,让这块高性能的 MCU 跑起了实时任务调度。但光有内核,就像给电脑装好了操作系统却没法敲命令、看输出,调试和交互起来非常别扭。官方 Nano 包的精髓…...
Codex自主规划开发工作流实践 Codex CLI、AI编程、自动规划开发、Agent工作流、长任务AI开发、CodexLoop
Codex自主规划开发工作流实践 Codex CLI、AI编程、自动规划开发、Agent工作流、长任务AI开发、CodexLoop 老规矩 先放最新地址: Codex 最新官方客户端下载地址 https://codexdown.cn/ 最近在折腾一件很有意思的事情: 不再给 Codex 写“超详细步骤”&…...
STM32 PVD中断防数据丢失实战:手把手教你配置2.9V阈值与紧急保存逻辑
STM32 PVD中断防数据丢失实战:手把手教你配置2.9V阈值与紧急保存逻辑 当嵌入式设备在野外采集数据或进行关键操作时,突然断电可能导致数月积累的传感器数据毁于一旦。我曾在一个农业物联网项目中亲历这种灾难——某次田间设备因电池接触不良断电…...
面试题详解:提示词工程 Prompt Engineering 全攻略——大模型提示词、RAG Prompt、Agent Prompt、Tool Calling、结构化输出与安全防护一次讲透
1. 什么是提示词工程?1.1 提示词不是“咒语”,而是模型的工作说明书提示词工程,通俗地说,就是把你想让大模型完成的任务,用模型更容易理解、更容易执行、更容易稳定复现的方式写出来。它不是玄学,也不是简单…...
树莓派5 vs 树莓派4:从硬件架构到应用场景的全面对比与实战指南
1. 项目概述:为什么我们需要重新审视树莓派5?如果你和我一样,从树莓派2、3、4一路用过来,每次新版本发布都像是一次“挤牙膏”式的升级,那么树莓派5的到来,绝对会打破你的固有印象。它不再仅仅是“更快一点…...
3步解决网盘下载限速难题:一站式直链解析工具实战指南
3步解决网盘下载限速难题:一站式直链解析工具实战指南 【免费下载链接】netdisk-fast-download 聚合多种主流网盘的直链解析下载服务, 一键解析下载,已支持夸克网盘/uc网盘/蓝奏云/蓝奏优享/小飞机盘/123云盘等. 支持文件夹分享解析. 体验地址: https://…...
Ansys Mechanical|远程点Behavior设置:刚性与柔性选择背后的工程考量
1. 远程点Behavior设置的核心逻辑 在Ansys Mechanical中,远程点(Remote Point)的Behavior设置看似只是一个简单的下拉选项,实则直接影响整个仿真结果的准确性。我见过太多工程师在这里踩坑,包括我自己早期也犯过错误。…...
保姆级教程:用Vue3+webrtc-streamer搞定海康/大华监控的Web实时播放(附完整代码)
Vue3与WebRTC-streamer实战:企业级监控视频流集成指南 监控系统在现代企业管理中扮演着重要角色,而将监控视频无缝集成到Web应用中已成为许多开发者的刚需。本文将带你从零开始,使用Vue3和webrtc-streamer实现海康、大华等主流监控设备的实时…...
别再被Word折磨了!百考通AI让你像“玩填空”一样搞定本科论文
论文写作不再是一座孤岛,而是一次有条不紊的旅程 又到了一年毕业季,朋友圈里开始交替出现两种状态:一种是晒答辩通过、手捧鲜花与导师合影的“上岸”喜讯,另一种则是深夜凌晨发出的、配着空白 Word 文档截图的“崩溃文学”。 “开…...
初创团队如何借助 Taotoken 实现低成本且灵活的大模型能力集成
🚀 告别海外账号与网络限制!稳定直连全球优质大模型,限时半价接入中。 👉 点击领取海量免费额度 初创团队如何借助 Taotoken 实现低成本且灵活的大模型能力集成 对于资源有限的初创技术团队而言,在开发新产品时集成 A…...
