本任务将展示如何配置API对象的配额,包括对Kubernetes PersistentVolumeClaim对象 和Service对象的配额配置。配额限制了可以在某一名字空间(namespace)中所创建的特定类型的对象 的数量。可以通过ResourceQuota 对象设定配额。
Before you begin
You need to have a Kubernetes cluster, and the kubectl command-line tool must be configured to communicate with your cluster. If you do not already have a cluster, you can create one by using Minikube.
创建名字空间
创建一个单独的名字空间,以便于隔离您在本练习中创建的资源与集群的其他资源。
kubectl create namespace quota-object-example
创建ResourceQuota对象
以下展示了ResourceQuota对象的配置文件内容:
quota-objects.yaml |
---|
apiVersion: v1 kind: ResourceQuota metadata: name: object-quota-demo spec: hard: persistentvolumeclaims: "1" services.loadbalancers: "2" services.nodeports: "0" |
下面,首先创建ResourceQuota对象:
kubectl create -f https://k8s.io/docs/tasks/administer-cluster/quota-objects.yaml --namespace=quota-object-example
然后可以通过以下命令查看ResourceQuota对象的详细信息:
kubectl get resourcequota object-quota-demo --namespace=quota-object-example --output=yaml
上述命令的输出显示在quota-object-example名字空间中,最多可以创建一个PersistentVolumeClaim以及两个 LoadBalancer类型的Service,不能创建NodePort类型的Service。
status: hard: persistentvolumeclaims: "1" services.loadbalancers: "2" services.nodeports: "0" used: persistentvolumeclaims: "0" services.loadbalancers: "0" services.nodeports: "0"
创建一个PersistentVolumeClaim:
下面展示了一个PersistentVolumeClaim对象的配置文件内容:
quota-objects-pvc.yaml |
---|
kind: PersistentVolumeClaim apiVersion: v1 metadata: name: pvc-quota-demo spec: storageClassName: manual accessModes: - ReadWriteOnce resources: requests: storage: 3Gi |
创建这个PersistentVolumeClaim:
kubectl create -f https://k8s.io/docs/tasks/administer-cluster/quota-objects-pvc.yaml --namespace=quota-object-example
接下来验证这个PersistentVolumeClaim已经被成功创建:
kubectl get persistentvolumeclaims --namespace=quota-object-example
上述命令的输出显示这个PersistentVolumeClaim已经存在在系统中并处于Pending状态:
NAME STATUS pvc-quota-demo Pending
尝试创建第二个PersistentVolumeClaim:
第二个PersistentVolumeClaim的配置文件如下所示:
quota-objects-pvc-2.yaml |
---|
kind: PersistentVolumeClaim apiVersion: v1 metadata: name: pvc-quota-demo-2 spec: storageClassName: manual accessModes: - ReadWriteOnce resources: requests: storage: 4Gi |
尝试创建第二个PersistentVolumeClaim:
kubectl create -f https://k8s.io/docs/tasks/administer-cluster/quota-objects-pvc-2.yaml --namespace=quota-object-example
以上命令的输出中可以看到第二个PersistentVolumeClaim没有被创建,因为如果创建 第二个PersistentVolumeClaim对象将违反名字空间中的配额限制。
persistentvolumeclaims "pvc-quota-demo-2" is forbidden: exceeded quota: object-quota-demo, requested: persistentvolumeclaims=1, used: persistentvolumeclaims=1, limited: persistentvolumeclaims=1
注意
以下字符串用于标记可以由配额限制的API资源:
字符串 | API对象 |
---|---|
"pods" | Pod |
"services | Service |
"replicationcontrollers" | ReplicationController |
"resourcequotas" | ResourceQuota |
"secrets" | Secret |
"configmaps" | ConfigMap |
"persistentvolumeclaims" | PersistentVolumeClaim |
"services.nodeports" | NodePort类型的Service |
"services.loadbalancers" | LoadBalancer类型的Service |
环境清理
删除在本练习中创建的名字空间即可完成环境清理:
kubectl delete namespace quota-object-example
What’s next
对于集群管理员
- 为 Namespace 设置最小和最大内存限制
- 为 Namespace 配置默认内存请求和限制
- 为 Namespace 配置默认 CPU 请求和限制
- 为 Namespace 配置最小和最大 CPU 限制
- 为 Namespace 配置内存和 CPU 配额
- 为 Namespace 配置 Pod 配额
- 为 API 对象配置配额