# k8s 为 API 对象配置配额

本任务将展示如何配置 API 对象的配额,包括对 k8s PersistentVolumeClaim 对象 和 Service 对象的配额配置。配额限制了可以在某一名字空间(namespace)中所创建的特定类型的对象 的数量。可以通过 ResourceQuota 对象设定配额。

# 开始之前

您需要有一个 k8s 集群,并且必须配置 kubectl 命令行工具以与集群通信。如果您还没有集群,可以使用 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
Last Updated: 6/17/2023, 6:57:19 PM