本任务将展示如何配置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.

创建名字空间

创建一个单独的名字空间,以便于隔离您在本练习中创建的资源与集群的其他资源。

  1. kubectl create namespace quota-object-example

创建ResourceQuota对象

以下展示了ResourceQuota对象的配置文件内容:

quota-objects.yaml Kubernetes 为API对象配置配额 - 图1
  1. apiVersion: v1
  2. kind: ResourceQuota
  3. metadata:
  4. name: object-quota-demo
  5. spec:
  6. hard:
  7. persistentvolumeclaims: "1"
  8. services.loadbalancers: "2"
  9. services.nodeports: "0"

下面,首先创建ResourceQuota对象:

  1. kubectl create -f https://k8s.io/docs/tasks/administer-cluster/quota-objects.yaml --namespace=quota-object-example

然后可以通过以下命令查看ResourceQuota对象的详细信息:

  1. kubectl get resourcequota object-quota-demo --namespace=quota-object-example --output=yaml

上述命令的输出显示在quota-object-example名字空间中,最多可以创建一个PersistentVolumeClaim以及两个 LoadBalancer类型的Service,不能创建NodePort类型的Service。

  1. status:
  2. hard:
  3. persistentvolumeclaims: "1"
  4. services.loadbalancers: "2"
  5. services.nodeports: "0"
  6. used:
  7. persistentvolumeclaims: "0"
  8. services.loadbalancers: "0"
  9. services.nodeports: "0"

创建一个PersistentVolumeClaim:

下面展示了一个PersistentVolumeClaim对象的配置文件内容:

quota-objects-pvc.yaml Kubernetes 为API对象配置配额 - 图2
  1. kind: PersistentVolumeClaim
  2. apiVersion: v1
  3. metadata:
  4. name: pvc-quota-demo
  5. spec:
  6. storageClassName: manual
  7. accessModes:
  8. - ReadWriteOnce
  9. resources:
  10. requests:
  11. storage: 3Gi

创建这个PersistentVolumeClaim:

  1. kubectl create -f https://k8s.io/docs/tasks/administer-cluster/quota-objects-pvc.yaml --namespace=quota-object-example

接下来验证这个PersistentVolumeClaim已经被成功创建:

  1. kubectl get persistentvolumeclaims --namespace=quota-object-example

上述命令的输出显示这个PersistentVolumeClaim已经存在在系统中并处于Pending状态:

  1. NAME STATUS
  2. pvc-quota-demo Pending

尝试创建第二个PersistentVolumeClaim:

第二个PersistentVolumeClaim的配置文件如下所示:

quota-objects-pvc-2.yaml Kubernetes 为API对象配置配额 - 图3
  1. kind: PersistentVolumeClaim
  2. apiVersion: v1
  3. metadata:
  4. name: pvc-quota-demo-2
  5. spec:
  6. storageClassName: manual
  7. accessModes:
  8. - ReadWriteOnce
  9. resources:
  10. requests:
  11. storage: 4Gi

尝试创建第二个PersistentVolumeClaim:

  1. kubectl create -f https://k8s.io/docs/tasks/administer-cluster/quota-objects-pvc-2.yaml --namespace=quota-object-example

以上命令的输出中可以看到第二个PersistentVolumeClaim没有被创建,因为如果创建 第二个PersistentVolumeClaim对象将违反名字空间中的配额限制。

  1. persistentvolumeclaims "pvc-quota-demo-2" is forbidden:
  2. exceeded quota: object-quota-demo, requested: persistentvolumeclaims=1,
  3. 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

环境清理

删除在本练习中创建的名字空间即可完成环境清理:

  1. kubectl delete namespace quota-object-example

What’s next

对于集群管理员

对于应用开发者

K8S中文社区微信公众号

原文: http://docs.kubernetes.org.cn/750.html