资源配额1

news/2024/7/4 7:59:43 标签: kubernetes, 容器, 云原生, linux, 运维

主要内容


预备知识

在Kubernetes中,资源配额(Resource
Quota)是一种机制,用于限制命名空间中的资源使用量。通过资源配额,可以限制Pod、CPU、内存、存储等资源的使用量,以防止资源过度使用或滥用。

资源配额的详细解释及用法如下:

  1. 资源配额的解释:

    • 资源配额是一种Kubernetes对象,用于限制命名空间中的资源使用量。
    • 资源配额可以限制Pod的数量、CPU的使用量、内存的使用量、存储的使用量等。
    • 资源配额可以应用于整个命名空间,也可以应用于特定的标签选择器所匹配的对象。
  2. 创建资源配额的方法:

    • 使用kubectl create quota命令可以创建资源配额。
    • 通过YAML文件定义资源配额的规格,并使用kubectl create -f命令将其应用到Kubernetes集群中。
  3. 资源配额的规格:

    • spec.hard字段定义了资源配额的限制,可以设置Pod的数量、CPU的使用量、内存的使用量、存储的使用量等。
    • 例如,spec.hard.pods字段可以设置Pod的最大数量,spec.hard.cpu字段可以设置CPU的最大使用量,spec.hard.memory字段可以设置内存的最大使用量,spec.hard.persistentvolumeclaims字段可以设置存储卷的最大使用量。
  4. 应用资源配额的方法:

    • 将资源配额应用到命名空间中,可以通过以下两种方法之一:
      • 在命名空间的YAML文件中定义资源配额的规格,并使用kubectl apply -f命令将其应用到Kubernetes集群中。
      • 使用kubectl create quota命令创建资源配额,并指定命名空间和资源配额的规格。
  5. 查看资源配额的方法:

    • 使用kubectl describe quota命令可以查看资源配额的详细信息。
    • 使用kubectl get quota命令可以查看资源配额的摘要信息。
  6. 示例:
    下面是一个资源配额的示例YAML文件:

    apiVersion: v1
    kind: ResourceQuota
    metadata:
      name: quota-example
    spec:
      hard:
        pods: "10"
        cpu: "4"
        memory: 4Gi
        persistentvolumeclaims: "5"
    

    该资源配额将限制命名空间中的Pod数量不超过10个,CPU使用量不超过4个单位,内存使用量不超过4GiB,PVC不超过5。

  7. 使用kubectl命令将资源配额应用到命名空间中:

kubectl apply -f my-quota.yaml -n <namespace>

其中,<namespace>是要应用资源配额的命名空间。

  1. 查看资源配额的方法:
kubectl describe quota/my-quota -n <namespace>

其中,<namespace>是资源配额所在的命名空间。

通过资源配额,可以限制命名空间中的Pod数量、CPU使用量、内存使用量、存储使用量等。请注意,资源配额只对新创建的资源对象生效,对于已经存在的资源对象不会进行限制。如果已经存在的资源对象超出了资源配额的限制,将不会被驱逐,但是新的资源对象创建可能会被拒绝。


一.Pod资源配额

Pod资源配额(Pod Resource
Quota)是一种Kubernetes机制,用于限制命名空间中Pod的资源使用量。它可以限制Pod的数量、CPU的使用量、内存的使用量、存储的使用量等,以防止资源过度使用或滥用。

Pod资源配额的用法如下:

  1. 创建Pod资源配额的YAML文件,例如:
apiVersion: v1
kind: ResourceQuota
metadata:
  name: pod-quota
spec:
  hard:
    pods: "10"
    cpu: "4"
    memory: 4Gi
    storage: 100Gi

在上述示例中,定义了一个名为pod-quota的Pod资源配额,限制了该命名空间中的Pod数量不超过10个,CPU使用量不超过4个单位,内存使用量不超过4GiB,存储使用量不超过100GiB。

  1. 使用kubectl命令将Pod资源配额应用到命名空间中:
kubectl apply -f pod-quota.yaml -n <namespace>

其中,<namespace>是要应用Pod资源配额的命名空间。

  1. 查看Pod资源配额的方法:
kubectl describe quota/pod-quota -n <namespace>

其中,<namespace>是Pod资源配额所在的命名空间。

通过Pod资源配额,可以限制命名空间中Pod的数量、CPU使用量、内存使用量、存储使用量等。请注意,Pod资源配额只对新创建的Pod生效,对于已经存在的Pod不会进行限制。如果已经存在的Pod超出了资源配额的限制,将不会被驱逐,但是新的Pod创建可能会被拒绝。

1.内存申请64Mi,CPU申请100m,上限内存128Mi,CPU 100m:

代码如下(示例):
cat > quota.yml <<EOF
apiVersion: v1
kind: Pod
metadata:
  name: frontend
  labels:
    name: frontend
spec:
  containers:
  - name: app
    image: nginx
    imagePullPolicy: IfNotPresent
    resources:
      requests:
        memory: "64Mi"
        cpu: "100m"
      limits:
        memory: "128Mi"
        cpu: "100m"
EOF

2.1个逻辑CPU等于100m,如果不带单位就是核心数,可以代小数点,例如0.1,内存的单位:100M等于100100,100Mi等于1001024

代码如下(示例):
kubectl create -f quota.yml
kubectl describe -f quota.yml | grep -A 5 Limits
kubectl delete -f quota.yml

在这里插入图片描述

3.解释

下面是每一句命令的详细解释:

1. `cat > quota.yml <<EOF`:这是一个Linux命令,用于将后续的输入重定向到一个文件。在这里,它将输入重定向到名为`quota.yml`的文件。

2. `apiVersion: v1`:这是YAML文件的第一行,指定了Kubernetes API的版本。

3. `kind: Pod`:这行指定了要创建的资源类型是Pod。

4. `metadata:`:这行表示下面的内容是关于Pod的元数据,如名称和标签。

5. `name: frontend`:这行指定了Pod的名称为`frontend`6. `labels:`:这行表示下面的内容是关于Pod的标签。

7. `name: frontend`:这行指定了Pod的标签为`frontend`8. `spec:`:这行表示下面的内容是关于Pod规格的定义。

9. `containers:`:这行表示下面的内容是关于容器的定义。

10. `- name: app`:这行指定了容器的名称为`app`11. `image: nginx`:这行指定了容器使用的镜像为`nginx`12. `imagePullPolicy: IfNotPresent`:这行指定了镜像拉取策略,如果本地已经存在该镜像,则不再拉取。

13. `resources:`:这行表示下面的内容是关于容器资源的定义。

14. `requests:`:这行表示下面的内容是关于容器资源请求的定义。

15. `memory: "64Mi"`:这行指定了容器的内存请求为64MiB。

16. `cpu: "100m"`:这行指定了容器的CPU请求为100毫核。

17. `limits:`:这行表示下面的内容是关于容器资源限制的定义。

18. `memory: "128Mi"`:这行指定了容器的内存限制为128MiB。

19. `cpu: "100m"`:这行指定了容器的CPU限制为100毫核。

20. `EOF`:这是一个Linux命令,用于结束输入重定向。

21. `kubectl create -f quota.yml`:这个命令使用kubectl工具将上述YAML文件中定义的Pod创建到Kubernetes集群中。

22. `kubectl describe -f quota.yml | grep -A 5 Limits`:这个命令使用kubectl工具描述指定的Pod,并通过grep命令过滤出与资源限制相关的信息。

23. `kubectl delete -f quota.yml`:这个命令使用kubectl工具将上述YAML文件中定义的Pod从Kubernetes集群中删除。

二.namespace资源配额

Namespace资源配额(Namespace Resource
Quota)是一种Kubernetes机制,用于限制命名空间中的资源使用量。它可以限制命名空间中的Pod数量、CPU使用量、内存使用量、存储使用量等,以防止资源过度使用或滥用。

创建Namespace资源配额的方法如下:

  1. 创建Namespace资源配额的YAML文件,例如:
apiVersion: v1
kind: ResourceQuota
metadata:
  name: namespace-quota
spec:
  hard:
    pods: "10"
    cpu: "4"
    memory: 4Gi
    storage: 100Gi

在上述示例中,定义了一个名为namespace-quota的Namespace资源配额,限制了该命名空间中的Pod数量不超过10个,CPU使用量不超过4个单位,内存使用量不超过4GiB,存储使用量不超过100GiB。

  1. 使用kubectl命令将Namespace资源配额应用到命名空间中:
kubectl apply -f namespace-quota.yaml -n <namespace>

其中,<namespace>是要应用Namespace资源配额的命名空间。

  1. 查看Namespace资源配额的方法:
kubectl describe quota/namespace-quota -n <namespace>

其中,<namespace>是Namespace资源配额所在的命名空间。

通过Namespace资源配额,可以限制命名空间中的Pod数量、CPU使用量、内存使用量、存储使用量等。请注意,Namespace资源配额只对新创建的资源对象生效,对于已经存在的资源对象不会进行限制。如果已经存在的资源对象超出了资源配额的限制,将不会被驱逐,但是新的资源对象创建可能会被拒绝。

1.新建namespace:

代码如下(示例):
kubectl create namespace test

cat > nmquota.yml <<EOF
apiVersion: v1
kind: ResourceQuota
metadata:
  name: myquota
  namespace: test
spec:
  hard:
    pods: "1"
    requests.cpu: "1"
    requests.memory: "1"
    limits.cpu: "2"
    limits.memory: "2Gi"
EOF
kubectl create -f nmquota.yml 

2.新建一个Pod,尝试进行资源申请

代码如下(示例):
cat > nmpod.yml <<EOF
apiVersion: v1
kind: Pod
metadata:
  name: frontend
  namespace: test
spec:
  containers:
  - name: app
    image: nginx
    imagePullPolicy: IfNotPresent
    resources:
      requests:
        memory: "64Mi"
        cpu: "15000m"
      limits:
        memory: "128Mi"
        cpu: "15000m"
EOF

kubectl create -f nmpod.yml 

在这里插入图片描述
可以发现,由于资源的限制,Pod无法申请成功。

3.解释

以下是每个命令的详细解释:

1. `kubectl create namespace test`:这个命令用于创建名为`test`的命名空间。

2. `cat > nmquota.yml <<EOF`:这是一个Linux命令,用于将后续的输入重定向到一个文件。在这里,它将输入重定向到名为`nmquota.yml`的文件。

3. `apiVersion: v1`:这是YAML文件的第一行,指定了Kubernetes API的版本。

4. `kind: ResourceQuota`:这行指定了要创建的资源类型是ResourceQuota。

5. `metadata:`:这行表示下面的内容是关于ResourceQuota的元数据,如名称和命名空间。

6. `name: myquota`:这行指定了ResourceQuota的名称为`myquota`7. `namespace: test`:这行指定了ResourceQuota所属的命名空间为`test`8. `spec:`:这行表示下面的内容是关于ResourceQuota规格的定义。

9. `hard:`:这行表示下面的内容是关于ResourceQuota的硬限制定义。

10. `pods: "1"`:这行指定了该命名空间中最多可以创建1个Pod。

11. `requests.cpu: "1"`:这行指定了该命名空间中所有Pod的CPU请求之和不能超过1核。

12. `requests.memory: "1"`:这行指定了该命名空间中所有Pod的内存请求之和不能超过1字节。

13. `limits.cpu: "2"`:这行指定了该命名空间中所有Pod的CPU限制之和不能超过2核。

14. `limits.memory: "2Gi"`:这行指定了该命名空间中所有Pod的内存限制之和不能超过2GiB。

15. `EOF`:这是一个Linux命令,用于结束输入重定向。

16. `kubectl create -f nmquota.yml`:这个命令使用kubectl工具将上述YAML文件中定义的ResourceQuota创建到Kubernetes集群中。

17. `cat > nmpod.yml <<EOF`:这是一个Linux命令,用于将后续的输入重定向到一个文件。在这里,它将输入重定向到名为`nmpod.yml`的文件。

18. `apiVersion: v1`:这是YAML文件的第一行,指定了Kubernetes API的版本。

19. `kind: Pod`:这行指定了要创建的资源类型是Pod。

20. `metadata:`:这行表示下面的内容是关于Pod的元数据,如名称和命名空间。

21. `name: frontend`:这行指定了Pod的名称为`frontend`22. `namespace: test`:这行指定了Pod所属的命名空间为`test`23. `spec:`:这行表示下面的内容是关于Pod规格的定义。

24. `containers:`:这行表示下面的内容是关于容器的定义。

25. `- name: app`:这行指定了容器的名称为`app`26. `image: nginx`:这行指定了容器使用的镜像为`nginx`27. `imagePullPolicy: IfNotPresent`:这行指定了镜像拉取策略,如果本地已经存在该镜像,则不再拉取。

28. `resources:`:这行表示下面的内容是关于容器资源的定义。

29. `requests:`:这行表示下面的内容是关于容器资源请求的定义。

30. `memory: "64Mi"`:这行指定了容器的内存请求为64MiB。

31. `cpu: "15000m"`:这行指定了容器的CPU请求为15000毫核。

32. `limits:`:这行表示下面的内容是关于容器资源限制的定义。

33. `memory: "128Mi"`:这行指定了容器的内存限制为128MiB。

34. `cpu: "15000m"`:这行指定了容器的CPU限制为15000毫核。

35. `EOF`:这是一个Linux命令,用于结束输入重定向。

36. `kubectl create -f nmpod.yml`:这个命令使用kubectl工具将上述YAML文件中定义的Pod创建到Kubernetes集群中。



总结

以上是今天要讲的内容,学到了资源配额:Pod资源配额,namespace资源配额。


http://www.niftyadmin.cn/n/5049085.html

相关文章

Confidential Compute Architecture - Arm构架的TEE新模式

1 简介 如今,云计算在分布式计算资源按需使用方面起着重要的作用。许多公司,如亚马逊、谷歌或微软都提供云服务,但使用这些服务需要信任服务提供商。这意味着一方面依赖提供商对抗攻击者,但另一方面也要信任提供商本身。恶意的提供商可能最终滥用其客户的敏感数据。使用可…

TS编译选项——TS文件编译后消除注释

在tsconfig.json文件中配置removeComments属性 {"compilerOptions": {// outDir 用于指定编译后文件所在目录"outDir": "./dist", // 将编译后文件放在dis目录下// 是否文件编译后移除注释"removeComments": true} } 左边是编写的t…

0.基本概念——数据结构学习

数据结构是一门研究非数值计算的程序设计问题中的操作对象&#xff0c;以及它们之间的关系和操作等相关问题的学科。 数据&#xff1a;描述客观事物的符号&#xff0c;是计算机可以操作的对象&#xff0c;是能被计算机识别&#xff0c;并输出给计算机处理的符号集合。数据元素…

tensorrt C++推理

char* trtModelStream{ nullptr }; //char* trtModelStreamnullptr; 开辟空指针后 要和new配合使用&#xff0c;比如89行 trtModelStream new char[size]size_t size{ 0 };//与int固定四个字节不同有所不同,size_t的取值range是目标平台下最大可能的数组尺寸,一些平台下size_…

基于Java的超市进销存系统springboot18

大家好✌&#xff01;我是CZ淡陌。一名专注以理论为基础实战为主的技术博主&#xff0c;将再这里为大家分享优质的实战项目&#xff0c;本人在Java毕业设计领域有多年的经验&#xff0c;陆续会更新更多优质的Java实战项目&#xff0c;希望你能有所收获&#xff0c;少走一些弯路…

Java POI 读取 大数据量的Excel 实操

Java POI 读取 大数据量&#xff08;超过10W行&#xff09;的excel的操作 0.问题抛出 在使用poi 进行excel文件读取操作的时候&#xff0c; 如果文件包含的数据量很大&#xff0c;比如包含了10万行的数据&#xff0c; 那么在使用 【Workbook workbook2 WorkbookFactory.cre…

面试题库(十二):分布式和中间件等

raft协议 paxos算法ddos 如何避免?怎么预防?怎么发现?利用了TCP什么特点?怎么改进TCP可以预防?服务端处理不了的请求怎么办?连接数最大值需要设置吗?怎么设置? Thrift RPC过程是什么样子的?异构系统怎么完成通信?跟http相比什么优缺点?了解grpc吗?kafka topic part…

什么是Jmeter ?Jmeter使用的原理步骤是什么?

1.1 什么是 JMeter Apache JMeter 是 Apache 组织开发的基于 Java 的压力测试工具。用于对软件做压力测试&#xff0c;它最初被设计用于 Web 应用测试&#xff0c;但后来扩展到其他测试领域。 它可以用于测试静态和动态资源&#xff0c;例如静态文件、Java 小服务程序、CGI 脚…