kubernetes 中内存的已用配额和硬配额有什么区别?如何在 Limits.Memory 和 requests.Memory 的配额中写入正确的值?我不明白并且我没有找到任何解释
资源配额是命名空间范围内特定资源的限制。
由 ResourceQuota 对象定义的资源配额提供了限制每个命名空间的聚合资源消耗的约束。
正如我在评论中提到的,它与中使用的Requests和非常相似。是 pod 在开始时请求的值,也是 pod 可以使用的最大值。在 中,值就像,它不能超过这个值。是该特定资源的当前使用价值。配额可用于限制、、或的数量。LimitsPodsRequestlimitQuotahardlimitUsedjobspodsservicescpumemory
要列出您的所有内容quotas,您可以使用命令$ kubectl get quota -A。如果你错过了-A,或者--all-namespaces你将只能从命名空间获得配额default。
我已经在GKE集群和Minikube.
默认情况下,GKE集群有一些Quotas. 您可以拥有超过 1Quota英寸namespace。在下面的示例中,您有 2 个命名quotas空间kube-system。
$ kubectl get quota -A
NAMESPACE NAME AGE REQUEST LIMIT
default gke-resource-quotas 11m count/ingresses.extensions: 0/100, count/ingresses.networking.k8s.io: 0/100, count/jobs.batch: 0/5k, pods: 0/1500, services: 1/500
kube-node-lease gke-resource-quotas 11m count/ingresses.extensions: 0/100, count/ingresses.networking.k8s.io: 0/100, count/jobs.batch: 0/5k, pods: 0/1500, services: 0/500
kube-public gke-resource-quotas 11m count/ingresses.extensions: 0/100, count/ingresses.networking.k8s.io: 0/100, count/jobs.batch: 0/5k, pods: 0/1500, services: 0/500
kube-system gcp-critical-pods 18m pods: 13/1G
kube-system gke-resource-quotas 11m count/ingresses.extensions: 0/100, count/ingresses.networking.k8s.io: 0/100, count/jobs.batch: 0/5k, pods: 15/1500, services: 3/500
Run Code Online (Sandbox Code Playgroud)
但Minikube一开始是没有的。要启用Resource Quota,请检查此文档
您可以描述Quota以检查哪些资源将受到限制。
$ kubectl describe quota gke-resource-quotas -n kube-system
Name: gke-resource-quotas
Namespace: kube-system
Resource Used Hard
-------- ---- ----
count/ingresses.extensions 0 100
count/ingresses.networking.k8s.io 0 100
count/jobs.batch 0 5k
pods 15 1500
services 3 500
Run Code Online (Sandbox Code Playgroud)
基于以上输出:
在我当前的GKE集群中,我有 15 个 pod 正在运行 ( Used),但在此命名空间中可以拥有的最大 pod 数量为1500。我将无法在这个namespace1501 pod 中部署。
创建命名空间
$ kubectl create ns test
Run Code Online (Sandbox Code Playgroud)
创建配额
apiVersion: v1
kind: ResourceQuota
metadata:
name: test
namespace: test
spec:
hard:
requests.memory: "100Mi"
limits.memory: "200Mi"
resourcequota/test created
$ kubectl describe quota -n test
Name: test
Namespace: test
Resource Used Hard
-------- ---- ----
limits.memory 0 200Mi
requests.memory 0 100Mi
Run Code Online (Sandbox Code Playgroud)
在上面的示例中,我没有任何正在使用内存的 Pod。
设想
2 个 pod,每个 pod 都有50Mi requests限制100Mi。
pod.yaml
apiVersion: v1
kind: Pod
metadata:
name: nginx-1
namespace: test
spec:
containers:
- name: nginx
image: nginx
resources:
requests:
memory: "50Mi"
limits:
memory: "100Mi"
Run Code Online (Sandbox Code Playgroud)
之后,Used的值Quota已更改。
$ kubectl describe quota -n test
Name: test
Namespace: test
Resource Used Hard
-------- ---- ----
limits.memory 100Mi 200Mi
requests.memory 50Mi 100Mi
Run Code Online (Sandbox Code Playgroud)
如果我要创建具有相同值但名称的第二个 pod nginx-2,Kubernetes 允许我这样做,因为Hard值不会被超出。Used并且Hard值将相同
$ kubectl describe quota -n test
Name: test
Namespace: test
Resource Used Hard
-------- ---- ----
limits.memory 200Mi 200Mi
requests.memory 100Mi 100Mi
Run Code Online (Sandbox Code Playgroud)
然而,我将无法创造nginx-3,因为它会超出Hard价值。您将收到错误:
Error from server (Forbidden): error when creating "pod.yaml": pods "nginx-3" is forbidden: exceeded quota: test, requested: limits.memory=100Mi,requests.memory=50Mi, used: limits.memory=200Mi,requests.memory=100Mi, limited: limits.memory=200Mi,requests.memory=100Mi
Run Code Online (Sandbox Code Playgroud)
在上面的示例中resourcequota/test设置了命名空间的限制test。
limits.memory指的是 pod 的spec.containers.resources.limits.memory.requests.memory指的是 pod 的spec.containers.resources.requests.memory.quota如果Createdlimits将requests超过.Hardquota
在 中$ kubectl describe quota test -n test,Usage值是此中所有 pod 限制的总和namespace(当前正在使用)。Hard是不能超过的最大值。
Used的值Quota是已经在其中使用的资源数量namespace。它可以是 的数量pods或数量memory或cpu。
Hard的值是使用的Quota最大数量pods或最大阈值。memory如果超过Hard价值,则不会创建特定资源。
如果您还有疑问,请告诉我。
| 归档时间: |
|
| 查看次数: |
3014 次 |
| 最近记录: |