Quota资源限制
对每个命名空间的资源消耗总量提供限制(在一个namespace下创建quota,就会只对当前namespace进行资源限制)。它可以限制命名空间中某种类型的对象的总数目上限,也可以限制命令空间中的单个Pod可以使用的计算资源的总上限。
配额类型
Kubernetes可以限制两种类型资源:
- 对象数量:Kubernetes 资源数量,例如pods,services和ingress等。实施资源数量配额可以提高kubernetes稳定性,避免Etcd数据库无限增长,还可以避免占用node中其他功能资源(例如ip地址服务)。
- 计算资源:物理或者虚拟资源容量,例如CPU,memory和存储容量。同样,实施计算资源配额可以避免消耗kubernetes集群中单个node所有计算资源,避免单个namespace中应用消耗所有集群资源,导致其他namespace中应用无法正常运行。
kubernetes实施配额,通过ResourceQuota类型资源。一个namespace可以包含多个ResourceQuota对象,这些限制是累加的,一般情况,多个ResourceQuota 对象不会限定同一个资源。
对象数量:
- persistentvolumeclaims
- services
- secrets
- configmaps
- replicationcontrollers
- deployments.apps
- deployments.apps
- statefulsets.apps
- jobs.batch
- cronjobs.batch
可以限制给定命名空间中可以请求的计算资源的总和
资源名称 |
描述 |
limits.cpu |
所有非终止状态的Pod,其CPU限额总量不能超过该值。 |
limits.memory |
所有非终止状态的Pod,其内存限额总量不能超过该值。 |
requests.cpu |
所有非终止状态的Pod,其CPU需求总量不能超过该值。 |
requests.memory |
所有非终止状态的Pod,其内存需求总量不能超过该值。 |
hugepages-<size> |
对于所有非终止状态的Pod,针对指定尺寸的巨页请求总数不能超过此值。 |
cpu |
与requests.cpu相同。 |
memorys |
与requests.memory相同。 |
配额管理
示例:创建ResourceQuota对象
[root@master10 ~]# kubectl create ns quota #创建一个ns用于测试
namespace/quota created
[root@master10 ~]# kubectl config set-context --namespace quota --current
kubectl create quota -h #查看创建帮助
#创建quota my-quota
kubectl create quota my-quota --hard=cpu=1,memory=1G,pods=2,services=3,replicationcontrollers=2,resourcequotas=1,secrets=5,persistentvolumeclaims=10
也可以通过yaml方式创建:
apiVersion: v1
kind: ResourceQuota
metadata:
name: my-quota
namespace: quota
spec:
hard:
persistentvolumeclaims: "10"
pods: "5"
requests.cpu: "2"
limits.cpu: "4"
requests.memory: 2Gi
limits.memory: 4Gi
secrets: "5"
services: "3"
pvc限制示例:
apiVersion: v1
kind: ResourceQuota
metadata:
name: storagequota
spec:
hard:
persistentvolumeclaims: "5"
requests.storage: "5Gi"
查看创建的quota
kubectl get resourcequotas
kubectl describe resourcequotas my-quota
示例:
创建一个quota对deployment pod数量进行限制,上限为5副本
apiVersion: v1
kind: ResourceQuota
metadata:
name: my-quota
namespace: quota
spec:
hard:
persistentvolumeclaims: "10"
pods: "5"
secrets: "5"
services: "3"
创建deployment
apiVersion: apps/v1
kind: Deployment
metadata:
labels:
app: nginx
name: nginx
spec:
replicas: 2
selector:
matchLabels:
app: nginx
strategy: {}
template:
metadata:
labels:
app: nginx
spec:
containers:
- image: nginx
name: nginx
imagePullPolicy: IfNotPresent
水平伸缩扩展deployment为5副本
水平伸缩扩展deployment为6和7副本
标签:Container,Kubernetes,namespace,Namespace,quota,memory,ResourceQuota,Pod,requests From: https://www.cnblogs.com/punchlinux/p/16625590.html