Pod开销
FEATURESTATE:Kubernetesv1.24[sTABLE]
在节点上运行Pod时,Pod本身占用大量系统资源。这些是运行Pod内容器所需资源之外的资源。在Kubernetes中,POD开销是一种方法,用于计算Pod基础设施在容器请求和限制之上消耗的资源。
在Kubernetes中,Pod的开销是根据与Pod的RuntimeClass相关联的开销在准入时设置的。
如果启用了PodOverhead,在调度Pod时,除了考虑容器资源请求的总和外,还要考虑Pod开销。类似地,kubelet将在确定Podcgroups的大小和执行Pod驱逐排序时也会考虑Pod开销。
配置Pod开销
你需要确保使用一个定义了字段的
RuntimeClass
。
使用示例
要使用Pod开销,你需要一个定义了字段的RuntimeClass。作为例子,下面的RuntimeClass定义中包含一个虚拟化所用的容器运行时,RuntimeClass如下,其中每个Pod大约使用120MiB用来运行虚拟机和寄宿操作系统:
apiVersion: node.k8s.io/v1kind: RuntimeClassmetaData:name: kata-fchandler: kata-fcoverhead:podFixed:memory: "120Mi"cpu: "250m"
通过指定RuntimeClass处理程序创建的工作负载会将内存和CPU开销计入资源配额计算、节点调度以及Podcgroup尺寸确定。
假设我们运行下面给出的工作负载示例test-pod:
apiVersion: v1kind: Podmetadata:name: test-podspec:runtimeClassName: kata-fccontainers:- name: busybox-ctrimage: busybox:1.28stdin: truetty: trueresources:limits:cpu: 500mmemory: 100Mi- name: nginx-ctrimage: nginxresources:limits:cpu: 1500mmemory: 100Mi
在准入阶段RuntimeClass准入控制器更新工作负载的PodSpec以包含RuntimeClass中定义的。如果PodSpec中已定义该字段,该Pod将会被拒绝。在这个例子中,由于只指定了RuntimeClass名称,所以准入控制器更新了Pod,使之包含。
在RuntimeClass准入控制器进行修改后,你可以查看更新后的PodSpec:
kubectl get pod test-pod -o JSONpath='{.spec.overhead}'
输出:
map[cpu:250m memory:120Mi]
如果定义了ResourceQuata,则容器请求的总量以及字段都将计算在内。
当kube-scheduler决定在哪一个节点调度运行新的Pod时,调度器会兼顾该Pod的以及该Pod的容器请求总量。在这个示例中,调度器将资源请求和开销相加,然后寻找具备2.25CPU和320MiB内存可用的节点。
一旦Pod被调度到了某个节点,该节点上的kubelet将为该Pod新建一个cgroup。底层容器运行时将在这个Pod中创建容器。
如果该资源对每一个容器都定义了一个限制(定义了限制值的GuaranteedQoS或者BurstableQoS),kubelet会为与该资源(CPU的
cpu.cfs_quota_us
以及内存的
memory.limit_in_bytes
)相关的Podcgroup设定一个上限。该上限基于PodSpec中定义的容器限制总量与之和。
对于CPU,如果Pod的QoS是Guaranteed或者Burstable,kubelet会基于容器请求总量与PodSpec中定义的之和设置
cpu.shares
。
请看这个例子,验证工作负载的容器请求:
kubectl get pod test-pod -o jsonpath='{.spec.containers[*].resources.limits}'
容器请求总计2000mCPU和200MiB内存:
map[cpu: 500m memory:100Mi] map[cpu:1500m memory:100Mi]
对照从节点观察到的情况来检查一下:
kubectl describe node | grep test-pod -B2
该输出显示请求了2250mCPU以及320MiB内存。请求包含了Pod开销在内:
NamespaceNameCPU RequestsCPU LimitsMemory RequestsMemory LimitsAGE------------------------------------------------------------------defaulttest-pod2250m (56%)2250m (56%)320Mi (1%)320Mi (1%)36m
验证Podcgroup限制
在工作负载所运行的节点上检查Pod的内存cgroups。在接下来的例子中,将在该节点上使用具备CRI兼容的容器运行时命令行工具。这是一个显示Pod开销行为的高级示例,预计用户不需要直接在节点上检查cgroups。首先在特定的节点上确定该Pod的标识符:
# 在该 Pod 被调度到的节点上执行如下命令:POD_ID="$(sudo crictl pods --name test-pod -q)"
可以依此判断该Pod的cgroup路径:
# 在该 Pod 被调度到的节点上执行如下命令:sudo crictl inspectp -o=json $POD_ID | grep cgroupsPath
执行结果的cgroup路径中包含了该Pod的容器。Pod级别的cgroup在即上一层目录。
"cgroupsPath": "/kubepods/podd7f4b509-cf94-4951-9417-d1087c92a5b2/7ccf55aee35dd16aca4189c952d83487297f3cd760f1bbf09620e206e7d0c27a"
在这个例子中,该Pod的cgroup路径是
kubepods/podd7f4b509-cf94-4951-9417-d1087c92a5b2
。验证内存的Pod级别cgroup设置:
# 在该 Pod 被调度到的节点上执行这个命令。# 另外,修改 cgroup 的名称以匹配为该 Pod 分配的 cgroup。 cat /sys/fs/cgroup/memory/kubepods/podd7f4b509-cf94-4951-9417-d1087c92a5b2/memory.limit_in_bytes
和预期的一样,这一数值为320MiB。
可观察性
在kube-state-metrics中可以通过
kube_pod_overhead_*
指标来协助确定何时使用Pod开销,以及协助观察以一个既定开销运行的工作负载的稳定性。该特性在kube-state-metrics的1.9发行版本中不可用,不过预计将在后续版本中发布。在此之前,用户需要从源代码构建kube-state-metrics。
天下贰 和 剑侠情缘三 哪个操作更简单!
操作天下贰要比剑网三简单,但是就我而言不是很喜欢天下贰的风格,还有就是天下贰有些地图明明没有到尽头却过不去,没有完全的3D化。 剑网三的话除了一些空气墙没有跳不过去的地方(作为一个跳山党我自豪\(^o^)/~)衣服的话我很喜欢剑三的衣服,天下贰的衣服好多都有棱角(男的有些还帅的,女的好多都不好看),会发光,细节不过细致。 相比起来剑网三的女性的衣服更为柔美细致,特别是七秀(纯女性门派)万花的衣服。 当然每个人的爱好不一样,LZ可以都去玩一下,天下贰免费的,剑网三18级前免费体验。 LS的,天下贰跟剑网三可以比较耐玩性,比风格,可是比画面比风景的话你是睁着眼睛说瞎话吗好吧,每个人喜欢的不一样,反正我是偏向去真实细致的,你要是喜欢绚烂抽象的也别说剑3画面垃圾好吧
详解制作网游
流程:策划——引擎——建模——美工——测试。
程序:精通C C++等程序语言美工:3D建模,贴图,图像渲染等策划:游戏情节(NPC对话),人物职业设定,数值设定等 编写游戏引擎、建模:需要熟练掌握C/C++、Microsoft Develop Studio开发环境、使用SDK或者MFC、DirectX/OpenGL、SQL编程、SQLServer或Oracle数据库配置。
成本要看任务 规模了
什么是软件工程
软件工程(SoftWare Engineering)的框架可概括为:目标、过程和原则。 (1)软件工程目标:生产具有正确性、可用性以及开销合宜的产品。 正确性指软件产品达到预期功能的程度。 可用性指软件基本结构、实现及文档为用户可用的程度。 开销合宜是指软件开发、运行的整个开销满足用户要求的程度。 这些目标的实现不论在理论上还是在实践中均存在很多待解决的问题,它们形成了对过程、过程模型及工程方法选取的约束。 (2)软件工程过程:生产一个最终能满足需求且达到工程目标的软件产品所需要的步骤。 软件工程过程主要包括开发过程、运作过程、维护过程。 它们覆盖了需求、设计、实现、确认以及维护等活动。 需求活动包括问题分析和需求分析。 问题分析获取需求定义,又称软件需求规约。 需求分析生成功能规约。 设计活动一般包括概要设计和详细设计。 概要设计建立整个软件系统结构,包括子系统、模块以及相关层次的说明、每一模块的接口定义。 详细设计产生程序员可用的模块说明,包括每一模块中数据结构说明及加工描述。 实现活动把设计结果转换为可执行的程序代码。 确认活动贯穿于整个开发过程,实现完成后的确认,保证最终产品满足用户的要求。 维护活动包括使用过程中的扩充、修改与完善。 伴随以上过程,还有管理过程、支持过程、培训过程等。 (3)软件工程的原则是指围绕工程设计、工程支持以及工程管理在软件开发过程中必须遵循的原
发表评论