资源配额1

文章目录

  • 主要内容
  • 一.Pod资源配额
      • 1.内存申请64Mi,CPU申请100m,上限内存128Mi,CPU 100m:
          • 代码如下(示例):
      • 2.1个逻辑CPU等于100m,如果不带单位就是核心数,可以代小数点,例如0.1,内存的单位:100M等于100*100,100Mi等于100*1024
          • 代码如下(示例):
      • 3.解释
  • 二.namespace资源配额
      • 1.新建namespace:
          • 代码如下(示例):
      • 2.新建一个Pod,尝试进行资源申请
          • 代码如下(示例):
      • 3.解释
  • 总结

主要内容


预备知识

在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>

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

  1. 查看资源配额的方法:
kubectl describe quota/my-quota -n <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>

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

  1. 查看Pod资源配额的方法:
kubectl describe quota/pod-quota -n <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

资源配额1_第1张图片

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资源配额的命名空间。

  1. 查看Namespace资源配额的方法:
kubectl describe quota/namespace-quota -n <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资源配额。

你可能感兴趣的:(K8s,Linux,kubernetes,容器,云原生,linux,运维)