# 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
← k8s API 概述 k8s 客户端库 →