Kubernetes 为API对象配置配额

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

对于集群管理员

对于应用开发者

译者:xingzhou / 原文链接

K8S中文社区微信公众号