Kubernetes API对象配额

2023-12-13 42

API对象配额是Kubernetes的一种限制用户或应用程序可以创建、更新或删除的API对象数量的策略。通过为API对象配置配额,用户可以确保集群的稳定性和性能,防止资源滥用和潜在的安全问题。本文将介绍如何在Kubernetes中为API对象配置配额,包括 PersistentVolumeClaim 和 Service。

配额限制了可以在命名空间中创建的特定类型对象的数量。 可以在 ResourceQuota 对象中指定配额。

一、准备

必须拥有一个 Kubernetes 的集群,同时必须配置 kubectl 命令行工具与集群通信。 建议在至少有两个不作为控制平面主机的节点的集群上运行本教程。 如果还没有集群,可以通过 Minikube 构建一个自己的集群,或者可以使用下面的 Kubernetes 练习环境之一:

  • Killercoda
  • 玩转 Kubernetes

要获知版本信息,请输入 kubectl version.

二、创建命名空间

创建一个命名空间以便本例中创建的资源和集群中的其余部分相隔离。

kubectl create namespace quota-object-example

三、创建ResourceQuota

下面是一个 ResourceQuota 对象的配置文件:

<code class="language-yaml" data-lang="yaml">apiVersion: v1
kind: ResourceQuota
metadata:
  name: object-quota-demo
spec:
  hard:
    persistentvolumeclaims: "1"
    services.loadbalancers: "2"
    services.nodeports: "0"

创建 ResourceQuota:

kubectl apply -f https://k8s.io/examples/admin/resource/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 类型的服务,不能有 NodePort 类型的服务。

<code class="language-yaml" data-lang="yaml">status:
  hard:
    persistentvolumeclaims: "1"
    services.loadbalancers: "2"
    services.nodeports: "0"
  used:
    persistentvolumeclaims: "0"
    services.loadbalancers: "0"
    services.nodeports: "0"

四、创建PersistentVolumeClaim

下面是一个 PersistentVolumeClaim 对象的配置文件:

<code class="language-yaml" data-lang="yaml">apiVersion: v1
kind: PersistentVolumeClaim
metadata:
  name: pvc-quota-demo
spec:
  storageClassName: manual
  accessModes:
    - ReadWriteOnce
  resources:
    requests:
      storage: 3Gi

创建 PersistentVolumeClaim:

kubectl apply -f https://k8s.io/examples/admin/resource/quota-objects-pvc.yaml --namespace=quota-object-example

确认已创建完 PersistentVolumeClaim:

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

输出信息表明 PersistentVolumeClaim 存在并且处于 Pending 状态:

<pre tabindex="0">NAME             STATUS
pvc-quota-demo   Pending
<h2 id="attempt-to-create-a-second-persistentvolumeclaim">

五、创建第二个PersistentVolumeClaim

下面是第二个 PersistentVolumeClaim 的配置文件:

<code class="language-yaml" data-lang="yaml">apiVersion: v1
kind: PersistentVolumeClaim
metadata:
  name: pvc-quota-demo-2
spec:
  storageClassName: manual
  accessModes:
    - ReadWriteOnce
  resources:
    requests:
      storage: 4Gi

尝试创建第二个 PersistentVolumeClaim:

kubectl apply -f https://k8s.io/examples/admin/resource/quota-objects-pvc-2.yaml --namespace=quota-object-example

输出信息表明第二个 PersistentVolumeClaim 没有创建成功,因为这会超出命名空间的配额。

persistentvolumeclaims "pvc-quota-demo-2" is forbidden:
exceeded quota: object-quota-demo, requested: persistentvolumeclaims=1,
used: persistentvolumeclaims=1, limited: persistentvolumeclaims=1

六、说明

下面这些字符串可被用来标识那些能被配额限制的 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
  • 广告合作

  • QQ群号:707632017

温馨提示:
1、本网站发布的内容(图片、视频和文字)以原创、转载和分享网络内容为主,如果涉及侵权请尽快告知,我们将会在第一时间删除。邮箱:2942802716#qq.com(#改为@)。 2、本站原创内容未经允许不得转裁,转载请注明出处“站长百科”和原文地址。