kubernetes调度之资源配额示例
前面说过,资源配额限制在指定名称空间下,对资源对象数量和特定类型的资源的限制,你可以在 ResourceQuota
中指定配额
创建名称空间
我们创建一个新的名称空间来演示
kubectl create namespace quota-object-example
创建资源配额
以下是资源配额对象的配置
admin/resource/quota-objects.yaml
apiVersion: v1
kind: ResourceQuota
metadata:
name: object-quota-demo
spec:
hard:
persistentvolumeclaims: "1"
services.loadbalancers: "2"
services.nodeports: "0"
通过kubectl apply
创建配额对象
kubectl apply -f https://k8s.io/examples/admin/resource/quota-objects.yaml --namespace=quota-object-example
查看资源配额详细信息
kubectl get resourcequota object-quota-demo --namespace=quota-object-example --output=yaml
status:
hard:
persistentvolumeclaims: "1"
services.loadbalancers: "2"
services.nodeports: "0"
used:
persistentvolumeclaims: "0"
services.loadbalancers: "0"
services.nodeports: "0"
输出信息显示,在quota-object-example
名称空间下,只允许最多有一个PersistentVolumeClaim
,最多有两个LoadBalancer
类型的服务,并且不允许有NodePort
类型的服务
创建一个PersistentVolumeClaim
以下是创建PersistentVolumeClaim
对象的文件
kind: PersistentVolumeClaim
apiVersion: v1
metadata:
name: pvc-quota-demo
spec:
storageClassName: manual
accessModes:
- ReadWriteOnce
resources:
requests:
storage: 3Gi
通过命令创建它
kubectl apply -f https://k8s.io/examples/admin/resource/quota-objects-pvc.yaml --namespace=quota-object-example
确认已经创建:
kubectl get `persistentvolumeclaims` --namespace=quota-object-example
NAME STATUS
pvc-quota-demo Pending
输出信息显示persistentvolumeclaims
对象已经创建并且状态为pending
下面尝试再创建一个PersistentVolumeClaim
kind: PersistentVolumeClaim
apiVersion: v1
metadata:
name: pvc-quota-demo-2
spec:
storageClassName: manual
accessModes:
- ReadWriteOnce
resources:
requests:
storage: 4Gi
执行创建命令
kubectl apply -f https://k8s.io/examples/admin/resource/quota-objects-pvc-2.yaml --namespace=quota-object-example
persistentvolumeclaims "pvc-quota-demo-2" is forbidden:
exceeded quota: object-quota-demo, requested: persistentvolumeclaims=1,
used: persistentvolumeclaims=1, limited: persistentvolumeclaims=1
通过输出信息可以看到,第二个persistantPersistentVolumeClaim
没有被创建,因为超过了资源配额
注:以下字符串类型可以被用来可以被资源配额使用
字符串 | API 对象 |
---|---|
"pods" | Pod |
"services | Service |
"replicationcontrollers" | ReplicationController |
"resourcequotas" | ResourceQuota |
"secrets" | Secret |
"configmaps" | ConfigMap |
"persistentvolumeclaims" | PersistentVolumeClaim |
"services.nodeports" | Service of type NodePort |
"services.loadbalancers" | Service of type LoadBalancer |
删除资源配额
kubectl delete namespace quota-object-example