Kubernetes-in-action (十)
创始人
2025-05-28 06:49:11
0

Kubernetes-in-action (十)


本节内容:

  • 容器的资源限制,既requests,limits,LimitRange
  • CustomResourceDefinitions,自定义的资源配置

requests & limits

  • requests 不会超卖: 在创建pod时会判断node是否可以分配,不能则失败
  • limits 会超卖: 创建时不会判断,但是如果运行中超过了node最大的则会删除某些pod(按照pod的QoS等级)。

如果不设置requests,只有limits,则requests=limits

如果podA和podB的cpu资源request是 1:5, 则全力使用cpu时最大资源也是 1:5

pod OOMKill后会 10s, 20s, 30,… 300s 每隔一段时间重试,直到最后一直5min一次尝试重启

即使为pod设置了limits和requests,在容器内看见的cpu和memory的数量依旧是node级别的

  • 在java应用种取系统的cpu数量来创建线程的,会让他创建出大量的线程并且每个线程会占用内存,而cpu实际只有一小部分
  • 虽然限制了容器的核数,但并不意味着容器是在指定核上运行,在不同时间时,容器会在不同核上运行

Kubernetes将pod划分为3种QoS等级:

  • BestEffort(优先级最低): 没有配置limits和requests的pod, 资源不足第一个被杀死
  • Burstable: ⾄少有⼀个容器只定义了requests但没有定义limits的pod,以及⼀个容器的requests和limits相等,但是另⼀个容器不指定requests或limits的pod
  • Guaranteed(优先级最⾼): CPU和内存都要设置requests和limits && 每个容器都需要设置资源量 && 每个容器的每种资源的requests和limits必须相等

创建一个配置requests和limits的pod

apiVersion: v1
kind: Pod
metadata:name: limited-pod
spec:containers:- image: busyboxcommand: ["dd", "if=/dev/zero", "of=/dev/null"]name: mainresources:requests:cpu: 200mmemory: 10Milimits:cpu: 1memory: 20Mi

LimitRange

作用

  • 配置资源类型(pod,pvc,container)对应的资源(cpu,memory)限制
  • 只对LimitRange生成后的资源有作用
  • 依旧可以通过创建多个pod来吃掉node的资源

实践

  • 创建一个LimitRange在命名空间foo中: kubectl create -f limits.yaml -n foo
  • 创建一个pod,并设置其requests.cpu=2 : kubectl create -f limits-pod-too-big.yaml -n foo
  • 创建pod失败:
    • 显示:The Pod "too-big" is invalid: spec.containers[0].resources.requests: Invalid value: "2": must be less than or equal to cpu limit

如果不配置pod的resources,则默认是LimitRange中配置的

apiVersion: v1
kind: LimitRange
metadata:name: example
spec:limits:- type: Podmin:cpu: 50mmemory: 5Mimax:cpu: 1memory: 1Gi- type: ContainerdefaultRequest:cpu: 100mmemory: 10Midefault:cpu: 200mmemory: 100Mimin:cpu: 50mmemory: 5Mimax:cpu: 1memory: 1GimaxLimitRequestRatio: # limit最大为request的几倍cpu: 4memory: 10- type: PersistentVolumeClaimmin:storage: 1Gimax:storage: 10Gi
apiVersion: v1
kind: Pod
metadata:name: too-big
spec:containers:- image: busyboxargs: ["sleep", "9999999"]name: mainresources:requests:cpu: 2

ResourceQuota

作用

  • 限制命名空间中的可⽤资源总量

实践

  • 创建一个 ResourceQuota 资源: kubectl create -f quota-cpu-memory.yaml -n foo
  • 在没有LimitRange资源情况下创建pod:kubectl create -f ../Chapter03/kubia-manual.yaml -n foo
    • 显示ERROR: Error from server (Forbidden): error when creating "../Chapter03/kubia-manual.yaml": pods "kubia-manual" is forbidden: failed quota: cpu-and-mem: must specify limits.cpu,limits.memory,requests.cpu,requests.memory
apiVersion: v1
kind: ResourceQuota
metadata:name: cpu-and-mem
spec:hard: # 命名空间下资源总量设置requests.cpu: 400mrequests.memory: 200Milimits.cpu: 600mlimits.memory: 500Mirequests.storage: 500Gi # 可声明的总存储量ssd.storageclass.storage.k8s.io/requests.storage: 300Gi # ssd可申请量standard.storageclass.storage.k8s.io/requests.storage: 1Ti# 配置ns中资源最大数量pods: 10replicationcontrollers: 5secrets: 10configmaps: 10persistentvolumeclaims: 5services: 5services.loadbalancers: 1services.nodeports: 2ssd.storageclass.storage.k8s.io/persistentvolumeclaims: 2

由于我们创建了ResourceQuota,那么需要一个LimitRange,不然在创建pod时没有配置requests,limits的话 是没办法创建pod的。

LeastRequestedPriority: 优先将 pod调度到请求量少的节点上(也就是拥有更多未分配资源的节点)
MostRequestedPriority: 优先调度到请求量多的节点(拥有更少未分配资源的节点), 使用场景:

  • 为特定的pod状态或者QoS等级指定配额

⽬前配额作⽤范围共有4种:

BestEffort: BestEffort QoS

NotBestEffort : Burstable 和 Guaranteed QoS 的 pod

Termination: 配置了 activeDeadlineSeconds 的pod

NotTerminating:没有指定 activeDeadlineSeconds 的pod

apiVersion: v1
kind: ResourceQuota
metadata:name: besteffort-notterminating-pods
spec:scopes: # 最多创建4个属于BestEffort QoS并且没有配置activeDeadlineSeconds的pod- BestEffort- NotTerminatinghard:pods: 4

自定义资源类型 (CustomResourceDefinitions)

作用

  • 通过自定义资源类型,在apply后,kube环境中就可以通过声明该类型资源文件(yaml)来创建该类型资源。

样例

apiVersion: apiextensions.k8s.io/v1
kind: CustomResourceDefinition
metadata:name: websites.extensions.example.com
spec:scope: Namespacedgroup: extensions.example.comversions:- name: "v1"served: truestorage: trueschema:openAPIV3Schema:type: objectproperties:spec:type: objectproperties:gitRepo: type: stringnames:kind: Website# 名称的单数形式,作为命令行使用时和显示时的别名singular: website# 名称的复数形式,用于 URL:/apis/<组>/<版本>/<名称的复数形式>plural: websites# 允许你在命令行使用较短的字符串来匹配资源shortNames:- ws
apiVersion: extensions.example.com/v1
kind: Website
metadata:name: kubia
spec:gitRepo: https://github.com/luksa/kubia-website-example.git

相关内容

热门资讯

职工追悼词 职工追悼词 各位亲友、各位来宾:  今天我们怀着十分沉痛的心情深切悼念退休职工×××。  ×××因病...
春天活动主持词 春天活动主持词  大家上午好!  踏着春天的脚步,踩着春风的节拍,春天已经来到我们中间,春天是生命的...
幼儿园家长会园长致辞 幼儿园家长会园长致辞幼儿园家长会园长致辞亲爱的家长、老师们:首先感谢大家在百忙中抽空参加今天举行的家...
教师节活动主持词 教师节活动主持词  一、什么是主持词  由主持人于节目进行过程中串联节目的串联词。如今的各种演出活动...
百日宴致辞 百日宴致辞范文  在日复一日的学习、工作或生活中,许多人都有过写致辞的经历,对致辞都不陌生吧,在各种...
2021年会总经理简短致辞 2021年会总经理简短致辞范文(通用6篇)  在学习、工作、生活中,许多人都有过写致辞的经历,对致辞...
中学秋季开学典礼主持词 中学秋季开学典礼主持词  中学秋季开学典礼主持词    第一项:升国旗仪式(升旗仪式结束后,请新教师...
婚礼男方家长经典致辞 婚礼男方家长经典致辞  大家好!今天是我儿子××和××小姐结婚的大喜日子,我感到非常高兴和荣幸。高兴...
元宵晚会主持词 关于元宵晚会主持词(通用11篇)  主持词是主持人在台上表演的灵魂之所在。在当今社会生活中,司仪等是...
国学经典诵读比赛主持词 国学经典诵读比赛主持词  主持词可以采用和历史文化有关的表述方法去写作以提升活动的文化内涵。随着社会...
离职感谢词 离职感谢词  在xx近两个月的生活,让我感触很多,首先感谢领导一直以来对我们的包容,感谢x经理的照顾...
年会总经理致辞 年会总经理致辞(精选7篇)  在学习、工作、生活中,大家都经常接触到致辞吧,致辞具有“礼仪性”或“仪...
八十大寿宴会主持词 八十大寿宴会主持词  借鉴诗词和散文诗是主持词的一种写作手法。在当下这个社会中,主持人的需求越来越高...
校园迎新春晚会主持词 校园迎新春晚会主持词  主持词已成为各种演出活动和集会中不可或缺的一部分。在当今不断发展的世界,越来...
同桌的你小品台词参考 同桌的你小品台词参考  王小利和小沈阳上场  王小利:儿子,今天,我带你去见一位特别重要的人物。  ...
文艺汇演主持人串词 文艺汇演主持人串词  开场:  萌:尊敬的各位领导,各位来宾。  泓:亲爱的老师们,同学们。大家  ...
年度总结表彰大会主持词 年度总结表彰大会主持词9篇  总结是指社会团体、企业单位和个人在自身的某一时期、某一项目或某些工作告...
小学庆六一儿童节主持词 小学庆六一儿童节主持词(精选5篇)  契合现场环境的主持词能给集会带来双倍的效果。随着社会一步步向前...
经销商大会主持稿 经销商大会主持稿推荐  经销商大会主持稿(一)  尊敬的各位来宾,各位朋友  大家上午好  (8:5...
年会精彩致辞 年会精彩致辞(通用7篇)  在学习、工作乃至生活中,大家对致辞都不陌生吧,致辞具有很强的实用性和针对...