《Kubernetes知识篇:基于Namespace(多租户)进行资源配额管理》

文章目录

  • 一、资源配额管理对象
  • 二、基于Namespace资源配额概述
  • 三、资源配额所能管理的资源类型
    • 3.1、计算资源配额
    • 3.2、存储资源配额
    • 3.3、对象数量配额
  • 四、设置和查看资源配额
    • 4.1、计算资源配额
    • 4.2、资源对象数量管理
  • 总结:整理不易,如果对你有帮助,可否点赞关注一下?


一、资源配额管理对象

作为完备的企业级容器管理平台,Kubernetes提供了资源配额管理(ResourceQuota)这一高级功能,资源配额管理确保指定的资源对象在任何时候都不会超量占用系统物理资源。

支持如下三个层次的资源配额管理
1、容器级别:可以对cpu和memory进行限制
2、Pod级别:可以对一个pod内所有容器的可用资源进行限制
3、Namespace级别:为Namespace(多租户)的级别资源限制,包括如下所示:
  Pod数量
  Replication Controller数量
  Service数量
  ResourceQuota数量
  Secret数量
  可持有的PV(Persistent Volume)数量

说明:
  k8s配额管理是通过Admission Control(准入控制)来控制的。
  Admission Control提供两种配额约束方式:LimitRanger和ResourceQuota
  LimitRanger作用于Pod和Container。
  ResourceQuota作用于Namespace上,限定一个Namespace里的各类资源的使用总额。

这里主要介绍基于Namespace(多租户)进行资源配额管理。


二、基于Namespace资源配额概述

《Kubernetes知识篇:基于Namespace(多租户)进行资源配额管理》_第1张图片


三、资源配额所能管理的资源类型

在Kuberners中,资源配额能够对计算资源(CPU和内存)、存储资源、以及对资源对象的数量进行管理。

3.1、计算资源配额

用户可以对给定命名空间下的可被请求的计算资源总量进行限制,配额机制所支持的资源类型:
《Kubernetes知识篇:基于Namespace(多租户)进行资源配额管理》_第2张图片


3.2、存储资源配额

用户可以对给定命名空间下的存储资源 总量进行限制。此外,还可以根据相关的存储类(Storage Class)来限制存储资源的消耗。
《Kubernetes知识篇:基于Namespace(多租户)进行资源配额管理》_第3张图片
例如,如果一个操作人员针对 gold 存储类型与 bronze 存储类型设置配额, 操作人员可以定义如下配额:
gold.storageclass.storage.k8s.io/requests.storage: 500Gi
bronze.storageclass.storage.k8s.io/requests.storage: 100Gi


3.3、对象数量配额

给定类型的对象数量可以被限制。 支持以下类型:
《Kubernetes知识篇:基于Namespace(多租户)进行资源配额管理》_第4张图片
说明:pods 配额统计并保证单个namespace下创建 pods 的最大数量。用户可能希望在namespace中为pod设置配额,来避免有用户创建很多小的pod,从而耗尽集群提供的pod IP地址。


四、设置和查看资源配额

由于在资源配额是基于命名空间进行设置的,因此,在此示例中先创建一个名称为quota-mem-cpu-example的命名空间:

kubectl create namespace lolaage

4.1、计算资源配额

下面是定义管理计算资源配额的YAML文件,在此文件中,资源配额管理的名称为compute-resources,pod的数量为4,cpu的需求数量为2核,cpu的限制数量为4核;内存的需求大小为4Gi,内存的限制大小为8Gi。

vim compute-resources.yaml

apiVersion: v1
kind: ResourceQuota
metadata:
  name: compute-resources
spec:
  hard:
    pods: "4" 
    requests.cpu: "2"
    requests.memory: 4Gi
    limits.cpu: "4"
    limits.memory: 8Gi

通过下面的kubectl命令在myspaces命名空间下创建资源配额:

kubectl create -f ./compute-resources.yaml --namespace=lolaage

在创建完资源配额后,通过执行下面的命令查看资源配额的详细信息

kubectl describe quota compute-resources --namespace=lolaage
或
kubectl get resourcequota compute-resources  --namespace=lolaage --output=yaml

如下图所示:
《Kubernetes知识篇:基于Namespace(多租户)进行资源配额管理》_第5张图片
删除你的命名空间计算资源限制

kubectl delete namespace compute-resources

总结:ResourceQuota在lolaage命名空间中设置了如下要求:
每个容器必须有内存请求和限制,以及 CPU 请求和限制。
所有容器的内存请求总和不能超过4 GiB。
所有容器的内存限制总和不能超过8 GiB。
所有容器的 CPU 请求总和不能超过2 cpu。
所有容器的 CPU 限制总和不能超过4 cpu


4.2、资源对象数量管理

下面是定义管理资源对象数量配额的YAML文件,在此文件中,资源配额管理的名称为resource-object-counts:

vim resource-object-counts.yaml

apiVersion: v1
kind: ResourceQuota
metadata:
  name: resource-object-counts
spec:
  hard:
    configmaps: "10"
    persistentvolumeclaims: "4"
    replicationcontrollers: "20"
    secrets: "10"
    services: "10"
    services.loadbalancers: "2"

通过下面的kubectl命令在lolaage命名空间下创建资源配额:

kubectl create -f ./resource-object-counts.yaml --namespace=lolaage

在创建完资源配额后,通过执行下面的命令查看资源配额的详细信息:

kubectl describe quota resource-object-counts  --namespace=lolaage
或
kubectl get resourcequota resource-object-counts  --namespace=lolaage --output=yaml

如下图所示:
《Kubernetes知识篇:基于Namespace(多租户)进行资源配额管理》_第6张图片
删除你的命名空间资源对象数量限制

kubectl delete namespace resource-object-counts

参考官方资源配额说明


总结:整理不易,如果对你有帮助,可否点赞关注一下?

更多详细内容请参考:企业级K8s集群运维实战
在这里插入图片描述

你可能感兴趣的:(《企业级K8s集群运维实战》,linux,nginx,docker,运维,容器)