当前位置 博文首页 > 堇牧安年:kubernetes之为每个命名空间的pod设置默认的requests
一 为啥需要为命名空间里面添加pod添加默认的requests和limits?
通过前面的学习我们已经知道,如果节点上面的pod没有设置requests和limits,这些容器就会受那些设置了的控制,一旦出现节点内存资源超卖,这些未被设置的pod则会优先被kubernetes清除,所以对于每个pod而言,都应当给设定requests和limits值是个不错的选择。
1.1 介绍limitRange资源
limitRange不仅支持用户给命名空间里面的pod每种资源配置最大最小值,甚至还会在没有显性的申明下,还会给容器添加系统的默认配值,更详细的描述如图所示
1.2 创建一个LimitRange对象
apiVersion: v1 kind: LimitRange metadata: name: example spec: limits: - type: Pod min: cpu: 50m memory: 5Mi max: cpu: 1 memory: 1Gi - type: Container defaultRequest: cpu: 100m memory: 10Mi default: cpu: 200m memory: 100Mi min: cpu: 50m memory: 5Mi max: cpu: 1 memory: 1Gi maxLimitRequestRatio: cpu: 4 memory: 10 - type: PersistentVolumeClaim min: storage: 1Gi max: storage: 10Gi
二 限制命名空间的资源总量
2.1 kubernetes通过ResourceQuota资源对命名空间的资源总量进行控制
资源配额的作用是限制某个命名空间里面各种资源的最大使用量,已经创建的pod不会被限制,例如当在创建某个pod的时候,申请的pod的内存加上集群中已经存在的pod的内存总量超过ResourceQuota,那么API服务器将会决绝接收这个pod的申请,并且除了容器的cpu,内存等这些基础资源,同时也可以限制其他的API类型资源,例如RC,RS等等一系列的资源使用量
2.2 为CPU和内存使用量创建ResourceQuota
apiVersion: v1 kind: ResourceQuota metadata: name: cpu-and-mem spec: hard: requests.cpu: 400m requests.memory: 200Mi limits.cpu: 600m limits.memory: 500Mi
2.3 查看配额以及配额使用情况
[root@node01 Chapter14]# k describe quota Name: cpu-and-mem Namespace: default Resource Used Hard -------- ---- ---- limits.cpu 1 600m limits.memory 20Mi 500Mi requests.cpu 2 400m requests.memory 50Mi 200Mi
2.4 为持久化存储指定配额
apiVersion: v1 kind: ResourceQuota metadata: name: storage spec: hard: requests.storage: 500Gi ssd.storageclass.storage.k8s.io/requests.storage: 300Gi standard.storageclass.storage.k8s.io/requests.storage: 1Ti
2.5 限制集群资源可创建对象
apiVersion: v1 kind: ResourceQuota metadata: name: quota-objects spec: hard: pods: 10 replicationcontrollers: 5 secrets: 10 configmaps: 10 persistentvolumeclaims: 4 services: 5 services.loadbalancers: 1 services.nodeports: 2 ssd.storageclass.storage.k8s.io/persistenevolumeclaims: 2
2.6 为特定的状态的pod或者Qos等级的pod指定配额
先来解释一下,可以选择的状态有哪几种
对于BestEffort和NotTermination的范围,只需要pod在集群中的数量,而对于NotBestEffort以及Termination状态的pod除了需要添加数量外,还需要添加requests以及limits,一个示范例子如下所示
apiVersion: v1 kind: ResourceQuota metadata: name: besteffort-notterminating-pods spec: scopes: - BestEffort - NotTerminating hard: pods: 40
三 监控集群中pod的资源使用量
注意:这里只对原理进行说明,不对实际的操作以及如何部署相关的应用进行展开
3.1 如何收集每个节点上面的pod的资源使用情况
kubelet自身包含一个cAdvisor的agent,它会收集整个节点上容器的消耗情况,之后将信息汇报给Heapster的组件