kubernetes权威指南第4版第十章节读书笔记一米八大高个儿

接下来,需要为这两个工作组分别定义一个Context,即运行环境。这个运行环境将属于某个特定的命名空间通过kubectlconfigset-context命令定义Context,并将Context置于之前创建的命名空间中

使用kubectlconfiguse-context命令设置当前运行环境。下面的命令将把当前运行环境设置为ctx-dev

1.详解Requests和Limits参数.以CPU为例,图10.3显示了未设置Limits和设置了Requests、Limits的CPU使用率的区别

尽管Requests和Limits只能被设置到容器上,但是设置Pod级别的Requests和Limits能大大提高管理Pod的便利性和灵活性,因此在Kubernetes中提供了对Pod级别的Requests和Limits的配置对于CPU和内存而言,Pod的Requests或Limits是指该Pod中所有容器的Requests或Limits的总和(对于Pod中没有设置Requests或Limits的容器,该项的值被当作0或者按照集群配置的默认值来计算)。下面对CPU和内存这两种计算资源的特点进行说明

基于Requests和Limits的Pod调度机制当一个Pod创建成功时,Kubernetes调度器(Scheduler)会为该Pod选择一个节点来执行。对于每种计算资源(CPU和Memory)而言,每个节点都有一个能用于运行Pod的最大容量值。调度器在调度时,首先要确保调度后该节点上所有Pod的CPU和内存的Requests总和,不超过该节点能提供给Pod使用的CPU和Memory的最大容量值这里需要注意:可能某节点上的实际资源使用量非常低,但是已运行Pod配置的Requests值的总和非常高,再加上需要调度的Pod的Requests值,会超过该节点提供给Pod的资源容量上限,这时Kubernetes仍然不会将Pod调度到该节点上。如果Kubernetes将Pod调度到该节点上,之后该节点上运行的Pod又面临服务峰值等情况,就可能导致Pod资源短缺。

kubelet在启动Pod的某个容器时,会将容器的Requests和Limits值转化为相应的容器启动参数传递给容器执行器(Docker或者rkt)如果容器的执行环境是Docker,那么容器的如下4个参数是这样传递给Docker的1)spec.container[].resources.requests.cpu这个参数会转化为core数(比如配置的100m会转化为0.1),然后乘以1024,再将这个结果作为--cpu-shares参数的值传递给dockerrun命令。在dockerrun命令中,--cpu-share参数是一个相对权重值(RelativeWeight),这个相对权重值会决定Docker在资源竞争时分配给容器的资源比例这里需要区分清楚的是:这个参数对于Kubernetes而言是绝对值,主要用于Kubernetes调度和管理;同时Kubernetes会将这个参数的值传递给dockerrun的--cpu-shares参数。--cpu-shares参数对于Docker而言是相对值,主要用于资源分配比例

注意:如果kubelet的启动参数--cpu-cfs-quota被设置为true,那么kubelet会强制要求所有Pod都必须配置CPULimits(如果Pod没有配置,则集群提供了默认配置也可以)。从Kubernetes1.2版本开始,这个--cpu-cfs-quota启动参数的默认值就是true

在Linux平台下,对于那些需要大量内存(1GB以上内存)的程序来说,大内存页的优势是很明显的,因为HugePage大大提升了TLB的缓存命中率,又因为Linux对HugePage提供了更为简单、便捷的操作接口,所以可以把它当作文件来进行读写操作。Linux使用HugePage文件系统hugetlbfs支持巨页,这种方式更为灵活,我们可以设置HugePage的大小,比如1GB、2GB甚至2.5GB,然后设置有多少物理内存用于分配HugePage,这样就设置了一些预先分配好的HugePage。可以将hugetlbfs文件系统挂载在/mnt/huge目录下,通过执行下面的指令完成设置

mkdir/mnt/hugemount-thugetlbfsnodev/mnt/huge在设置完成后,用户进程就可以使用mmap映射HugePage目标文件来使用大内存页了,IntelDPDK便采用了这种做法,测试表明应用使用大内存页比使用4KB的内存页性能提高了10%~15%

Kubernetes1.14版本对LinuxHugePage的支持正式更新为GA稳定版。我们可以将HugePage理解为一种特殊的计算资源:拥有大内存页的资源。而拥有HugePage资源的Node也与拥有GPU资源的Node一样,属于一种新的可调度资源节点(SchedulableResourceNode)HugePage也支持ResourceQuota来实现配额限制,类似CPU或者Memory,但不同于CPU或者内存,HugePage资源属于不可超限使用的资源,拥有HugePage能力的Node会将自身支持的HugePage的能力信息自动上报给KubernetesMaster

Kubernetes中Pod的Requests和Limits资源配置有如下特点(1)如果Pod配置的Requests值等于Limits值,那么该Pod可以获得的资源是完全可靠的。(2)如果Pod的Requests值小于Limits值,那么该Pod获得的资源可分成两部分:◎完全可靠的资源,资源量的大小等于Requests值;◎不可靠的资源,资源量最大等于Limits与Requests的差额,这份不可靠的资源能够申请到多少,取决于当时主机上容器可用资源的余量通过这种机制,Kubernetes可以实现节点资源的超售(OverSubscription),比如在CPU完全充足的情况下,某机器共有32GiB内存可提供给容器使用,容器配置为Requests值1GiB,Limits值为2GiB,那么在该机器上最多可以同时运行32个容器,每个容器最多可以使用2GiB内存,如果这些容器的内存使用峰值能错开,那么所有容器都可以正常运行超售机制能有效提高资源的利用率,同时不会影响容器申请的完全可靠资源的可靠性

2)不可压缩资源◎Kubernetes目前支持的不可压缩资源是内存◎Pod可以得到在Requests中配置的内存。如果Pod使用的内存量小于它的Requests的配置,那么这个Pod可以正常运行(除非出现操作系统级别的内存不足等严重问题);如果Pod使用的内存量超过了它的Requests的配置,那么这个Pod有可能被Kubernetes杀掉:比如PodA使用了超过Requests而不到Limits的内存量,此时同一机器上另外一个PodB之前只使用了远少于自己的Requests值的内存,此时程序压力增大,PodB向系统申请的总量不超过自己的Requests值的内存,那么Kubernetes可能会直接杀掉PodA;另外一种情况是PodA使用了超过Requests而不到Limits的内存量,此时Kubernetes将一个新的Pod调度到这台机器上,新的Pod需要使用内存,而只有PodA使用了超过了自己的Requests值的内存,那么Kubernetes也可能会杀掉PodA来释放内存资源◎如果Pod使用的内存量超过了它的Limits设置,那么操作系统内核会杀掉Pod所有容器的所有进程中使用内存最多的一个,直到内存不超过Limits为止。

对调度策略的影响Kubernetes的kubelet通过计算Pod中所有容器的Requests的总和来决定对Pod的调度不管是CPU还是内存,Kubernetes调度器和kubelet都会确保节点上所有Pod的Requests的总和不会超过在该节点上可分配给容器使用的资源容量上限服务质量等级(QoSClasses)在一个超用(OverCommitted,容器Limits总和大于系统容量上限)系统中,由于容器负载的波动可能导致操作系统的资源不足,最终可能导致部分容器被杀掉。在这种情况下,我们当然会希望优先杀掉那些不太重要的容器,那么如何衡量重要程度呢?Kubernetes将容器划分成3个QoS等级:Guaranteed(完全可靠的)、Burstable(弹性波动、较可靠的)和BestEffort(尽力而为、不太可靠的),这三种优先级依次递减

2)存储资源配额(VolumeCountQuota)可以在给定的命名空间中限制所使用的存储资源(StorageResources)的总量,目前支持的存储资源名称如表10.3所示

3)对象数量配额(ObjectCountQuota)指定类型的对象数量可以被限制。表10.4列出了ResourceQuota支持限制的对象类型

例如,我们可以通过资源配额来限制在命名空间中能创建的Pod的最大数量。这种设置可以防止某些用户大量创建Pod而迅速耗尽整个集群的PodIP和计算资源2.配额的作用域(QuotaScopes)每项资源配额都可以单独配置一组作用域,配置了作用域的资源配额只会对符合其作用域的资源使用情况进行计量和限制,作用域范围内超过了资源配额的请求都会报验证错误。表10.5列出了ResourceQuota的4种作用域

其中,BestEffort作用域可以限定资源配额来追踪pods资源的使用,Terminating、NotTerminating和NotBestEffort这三种作用域可以限定资源配额来追踪以下资源的使用◎cpu◎limits.cpu◎limits.memory◎memory◎pods◎requests.cpu◎requests.memory3.在资源配额(ResourceQuota)中设置Requests和Limits如果在资源配额中指定了requests.cpu或requests.memory,那么它会强制要求每个容器都配置自己的CPURequests或CPULimits(可使用LimitRange提供的默认值)同理,如果在资源配额中指定了limits.cpu或limits.memory,那么它也会强制要求每个容器都配置自己的内存Requests或内存Limits(可使用LimitRange提供的默认值)4.资源配额的定义

apiVersion:v1kind:ResourceQuotametadata:name:compute-resourcesnamespace:testspec:hard:pods:"4"requests.cpu:"1"requests.memory:1Gilimits.cpu:"2"limits.memory:2GiapiVersion:v1kind:ResourceQuotametadata:name:object-countsnamespace:testspec:hard:configmaps:"2"persistentvolumeclaims:"4"replicationcontrollers:"2"secrets:"10"services:"4"services.loadbalancers:"2"资源配额与集群资源总量的关系资源配额与集群资源总量是完全独立的。资源配额是通过绝对的单位来配置的,这也就意味着如果在集群中新添加了节点,那么资源配额不会自动更新,而该资源配额所对应的命名空间中的对象也不能自动增加资源上限在某些情况下,我们可能希望资源配额支持更复杂的策略,如下所述◎对于不同的租户,按照比例划分整个集群的资源◎允许每个租户都能按照需要来提高资源用量,但是有一个较宽容的限制,以防止意外的资源耗尽情况发生◎探测某个命名空间的需求,添加物理节点并扩大资源配额值

memory.available的值取自cgroupfs,而不是free-m命令,这是因为free-m不支持在容器内工作。如果用户使用了nodeallocatable功能,则除了节点自身的内存需要判断,还需要利用cgroup根据用户Pod部分的情况进行判断。下面的脚本展示了kubelet计算memory.available的过程

kubelet假设inactive_file(不活跃LRU列表中的file-backed内存,以字节为单位)在紧缺情况下可以回收,因此对其进行了排除kubelet支持以下两种文件系统(1)nodefs:保存kubelet的卷和守护进程日志等(2)imagefs:在容器运行时保存镜像及可写入层驱逐阈值kubelet可以定义驱逐阈值,一旦超出阈值,就会触发kubelet进行资源回收操作阈值的定义方式为

--eviction-hardmapStringStringAsetofevictionthresholds(e.g.memory.available<1Gi)thatifmetwouldtriggerapodeviction.(defaultimagefs.available<15%,memory.available<100Mi,nodefs.available<10%,nodefs.inodesFree<5%)

节点的状况kubelet会将一个或多个驱逐信号与节点的状况对应起来无论触发了硬阈值还是软阈值,kubelet都会认为当前节点的压力太大,如表10.7所示为节点状况与驱逐信号的对应关系

回收Node级别的资源如果达到了驱逐阈值,并且也过了宽限期,kubelet就会回收超出限量的资源,直到驱逐信号量回到阈值以内kubelet在驱逐用户Pod之前,会尝试回收Node级别的资源。在观测到磁盘压力的情况下,基于服务器是否为容器运行时定义了独立的imagefs,会导致不同的资源回收过程1.有Imagefs的情况(1)如果nodefs文件系统达到了驱逐阈值,则kubelet会删掉死掉的Pod、容器来清理空间。(2)如果imagefs文件系统达到了驱逐阈值,则kubelet会删掉所有无用的镜像来清理空间2.没有Imagefs的情况如果nodefs文件系统达到了驱逐阈值,则kubelet会按照下面的顺序来清理空间。(1)删除死掉的Pod、容器。(2)删除所有无用的镜像。

◎当memory.available超过阈值触发了驱逐操作时,kubelet会启动资源回收,并保证memory.available至少有500MiB。◎如果是nodefs.available超过阈值并触发了驱逐操作,则kubelet会恢复nodefs.available到至少1.5GiB。◎对于imagefs.available超过阈值并触发了驱逐操作的情况,kubelet会保证imagefs.available恢复到最少102GiB。

1.调度器的行为在节点资源紧缺的情况下,节点会向Master报告这一状况。在Master上运行的调度器(Scheduler)以此为信号,不再继续向该节点调度新的Pod。如表10.8所示为节点状况与调度行为的对应关系

2.Node的OOM行为如果节点在kubelet能够回收内存之前遭遇了系统的OOM(内存不足),节点则依赖oom_killer的设置进行响应(OOM评分系统详见10.4节的描述)kubelet根据Pod的QoS为每个容器都设置了一个oom_score_adj值,如表10.9所示

如果kubelet无法在系统OOM之前回收足够的内存,则oom_killer会根据内存使用比率来计算oom_score,将得出的结果和oom_score_adj相加,得分最高的Pod首先被驱逐这个策略的思路是,QoS最低且相对于调度的Request来说消耗最多内存的Pod会首先被驱逐,来保障内存的回收与Pod驱逐不同,如果一个Pod的容器被OOM杀掉,则是可能被kubelet根据RestartPolicy重启的3.对DaemonSet类型的Pod驱逐的考虑通过DaemonSet创建的Pod具有在节点上自动重启的特性,因此我们不希望kubelet驱逐这种Pod;然而kubelet目前并没有能力分辨DaemonSet的Pod,所以无法单独为其制定驱逐策略,所以强烈建议不要在DaemonSet中创建BestEffort类型的Pod,避免产生驱逐方面的问题

THE END
1.「一米互娱怎么样」广州一米互娱网络科技有限公司一米互娱招聘要求怎么样:一米互娱都在招什么人? 一米互娱招聘类别计算机/网络/技术类最多占43%,其次是市场/公关/媒介类占29%。一米互娱什么学历能进?不限学历最多占67%,其次是本科占33%。工作经验一米互娱有什么要求?不限经验最多占67%,其次是1-3年占33%。一米互娱工作地区在哪?广州最多占100%,公司https://www.jobui.com/company/14609675/
2.「深圳米乔科技有限公司招聘」让你在工作之余,充分体验业余乐趣!善良睿智的小伙伴们如果你想趁年轻拼搏一把如果你期待老了有酒、有故事如果你渴望健康、高效的激情人生米乔欢迎你!只要你积极向上正能量只要你拥抱变化高情商只要你能勇敢坚持梦想米乔欢迎你!可观收入快乐成长成就感爆棚米乔,给你答案!公司官网:https://www.minicute.com/ 查看全部https://m.zhipin.com/companys/06cc4ee5861b3afd1nVz29i_GQ~~.html
3.花11万找工作没弄成公司拿钱跑路!有你喜爱的节目吗?“不忘初心跟党走·赋能助力再出发”文艺汇演作品人气助力中…… 1601.9万阅读2021-7-13 中国共产党统一战线史及《中国共产党统一战线工作条例》 网络知识竞赛题库 368.7万阅读2022-4-29 直播:周口市防溺水安全教育公开课 288万阅读2023-8-9 回看:河南省防汛救灾新闻发布会 266.5万阅读202https://www.hntv.tv/rhh-3802598400/article/1/1865233307174387713
4.机械厂工作实习报告(通用10篇)实习的第一天,接待我的工厂师傅对我很热情,毕竟我们那里大学生还是比较少的,师傅介绍公司同时也询问我的专业干什么,表达了毕业欢迎我过来工作的真诚邀请,重点还是介绍实习的注意事项,例如进场时必须穿戴好安全服,在车间必须离设备至少一米距离,远离飞出铁屑、出炉物等,在车间里行人应当在人行道内行走,没有人行道的https://www.yjbys.com/fanwen/shixibaogao/2906965.html
5.参观心得体会(15篇)使我认识到:一个好校长就是一所好学校,校长是一个学校的灵魂,只要校长立足校情,有一个超前的办学思想,就能引领广大教师有效地提升学校的办学品味,促进学生全面发展。在今后的工作中,我打算从以下几个方面做起: 一、传递新理念,增强责任感和使命感。https://www.cnfla.com/xindetihui/2719628.html
6.2021年全国职业院校技能大赛网络搭建与应用赛项正式赛卷一、网络布线与基础连接(50 分) 右侧布线面板立面示意图 左侧布线面板立面示意图 【说明】 机柜左侧布线面板编号101;机柜右侧布线面板编号102。 面对信息底盒方向左侧为1 端口、右侧为2 端口。所有配线架、模块按照 568B 标准端接。 主配线区配线点与工作区配线点连线对应关系如下表所示。 https://blog.csdn.net/qq_45871601/article/details/129463614
7.安全生产协议书(精选11篇)7、乙方必须设专、兼职安全管理人员,负责乙方的安全生产管理,协助甲方工作。 8、乙方负责人绝不能纵容、包庇专项工程施工班组在施工过程当中出现的问题,不允许充当队(班组)的保护伞,从而拒绝甲方的管理要求,养痈为患。 9、乙方在工人入场一周内应安排填写三级教育卡,不得缺人、漏人,三级教育卡由乙方保存好备查,经https://www.oh100.com/a/202004/2072786.html
8.个人消防先进的事迹材料一、思想上重视。 孙跃林同志始终坚持消防安全工作是头等大事来抓,经常性召开全队的消防安全工作会议,坚持贯彻执行支队的各项文件精神,做到了消防安全工作无漏洞,使消防安全工作深入到大队每个人的心里。 二、制度完善。 在孙跃林同志的主持下,不定期的对管理区消防队的《消防安全工作应急预案》进行补充和完善,不但明确https://www.unjs.com/fanwenwang/shijicailiao/20221101080326_5838861.html
9.维护安全管理制度一、线路勘查与测量安全 1、勘查线路与测量时,应对线路所经过的沿线情况进行详细的综合调查。调查工作应从人文、民俗、地理、环境开始,将线路走向所遇到的河流、铁路、公路、穿跨电力线、广播线及其他线路等等进行详细的记录,从而熟悉线路环境,以便在线路施工时,采取针对性预防措施。 https://www.ruiwen.com/zhidu/6759769.html
10.安全生产防灾减灾黑龙江省安全生产条例澎湃号·政务安全生产工作建立党政同责、一岗双责、齐抓共管、失职追责的责任体系,实行管行业必须管安全、管业务必须管安全、管生产经营必须管安全,强化和落实生产经营单位主体责任与政府监管责任,建立生产经营单位负责、职工参与、政府监管、行业自律和社会监督的机制。 https://www.thepaper.cn/newsDetail_forward_25493563
11.长沙国资委招保洁限25至45岁有3年工作经验,招聘方回应12月6日,负责参与此次招聘的人力资源公司一工作人员称,确有此岗位在招聘。招聘要求上提到的“3年以上企业或行政机关相关岗位工作经验”,主要是指“保洁类的工作经验”,其介绍岗位招聘重点“是相关岗位工作经验,行政的工作经验是不行的。”工作内容主要是保洁。 对于年龄限制,其称“用人部门的要求是这样,所以公告也http://m.scdmedu.cn/20241210/18623597434.html
12.电子元件常识,这个可以看snifer电子技术应用AET1. 燃料电池是一种能量转换装置,在工作时必须有能量(燃料)输入,才能产出电能。普通蓄电池是一种能量储存装置,必须先将电能储存到电池中,在工作时只能输出电能,在工作时不需要输入能量,也不产生电能,这是燃料电池与普通电池本质的区别。 2. 一旦燃料电池的技术性能确定后,其所能够产生的电能只和燃料的供应有关,只http://blog.chinaaet.com/snifer/p/17367