Kubernetes 二手车和二手车有什么区别;k8s内存的硬配额?
kubernetes中内存的已用配额和硬配额有什么区别?如何在limits.memory和requests.memory的配额中写入正确的值?我不明白&我没有找到任何关于这个背景的解释 是命名空间范围内的特定资源的限制 由ResourceQuota对象定义的资源配额提供限制每个命名空间的聚合资源消耗的约束Kubernetes 二手车和二手车有什么区别;k8s内存的硬配额?,kubernetes,Kubernetes,kubernetes中内存的已用配额和硬配额有什么区别?如何在limits.memory和requests.memory的配额中写入正确的值?我不明白&我没有找到任何关于这个背景的解释 是命名空间范围内的特定资源的限制 由ResourceQuota对象定义的资源配额提供限制每个命名空间的聚合资源消耗的约束 $ kubectl get quota -A NAMESPACE NAME AGE REQUEST
$ 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
正如我在评论中提到的,它非常类似于Pods中使用的请求
和限制
Request
是pod在开始时请求的值,limit
是pod可以使用的最大值。
在配额
中,硬
值类似于限制
,不能超过此值Used
是此特定资源当前使用的值。配额可用于限制作业
、吊舱
、服务
、cpu
或内存
的数量
测验
要列出所有配额
,可以使用命令$kubectl get quota-A
。如果您错过了-A
或-所有命名空间
,您将只从默认
命名空间获得配额
$ 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
我已经在GKE
集群和Minikube
上测试过了
默认情况下,GKE
集群有一些配额。在命名空间
中可以有多个配额
。在下面的示例中,对于kube系统
名称空间,您有2个配额
$ 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
但是Minikube
一开始没有。要启用资源配额
,请检查
您可以描述配额
来检查哪些资源将受到限制
$ 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
基于上述输出:
在我当前的GKE
集群中,我有15个正在运行的pod(Used
),但在此命名空间中我可以拥有的最大pod数是1500
。我将无法在这个命名空间中部署1501吊舱
创建命名空间
$ kubectl create ns test
创建配额
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
在上面的例子中,我没有任何正在使用内存的吊舱
场景
2个吊舱,每个吊舱具有50Mi请求
和100Mi请求
限制
pod.yaml
在此之后,使用的
配额
的值已更改
$ kubectl describe quota -n test
Name: test
Namespace: test
Resource Used Hard
-------- ---- ----
limits.memory 100Mi 200Mi
requests.memory 50Mi 100Mi
如果我用相同的值创建第二个pod,但名称为nginx-2
,Kubernetes允许我这样做,因为不会超过硬
值<代码>已用
和硬
值将相同
$ kubectl describe quota -n test
Name: test
Namespace: test
Resource Used Hard
-------- ---- ----
limits.memory 200Mi 200Mi
requests.memory 100Mi 100Mi
但是,我将无法创建nginx-3
,因为它将超过硬
值。您将收到错误消息:
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
在上面的示例中,resourcequota/test
对test
命名空间设置限制
$ 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
limits.memory
指的是pod的spec.containers.resources.limits.memory
requests.memory
是指pod的spec.containers.resources.requests.memory
如果限制
和请求
将超过配额中的硬
值,则创建的配额
将不允许创建POD
在$kubectl descripe quota test-n test
中,用法
值是此命名空间
中所有pod限制的总和(当前正在使用)<代码>硬
是不能超过的最大值
结论
Used
Quota的值Quota
是已在此命名空间中使用的资源数。它可以是pod的数量
或内存的数量
或cpu
。
Hard
Quota
的值是pod
的最大数量或内存使用的最大阈值。如果它将超过硬
值,则不会创建特定的资源
有用的链接
如果您还有一些问题,请告诉我。我已经读过了,但是没有硬配额和使用配额的定义,很难理解。什么是“硬”配额和“用户”配额?这些术语是从哪里来的?在这篇文章中提到了资源的使用和努力。这是什么?kubectl explain resourcequota
@Epic555会这样做吗?不完全,限制之间有什么区别。已用内存和硬内存,请求。已用内存和硬内存?限制。已用内存是POD的限制。Limits.memory对于硬盘,它是命名空间的限制。请求。已使用的内存是POD的限制。硬盘的Request.memory是命名空间的限制。是吗?@Epic555我已经使用了限制和请求来让它更清楚。我已经更新了我的答案,请检查一下,如果您还有问题,请告诉我。@PjoterS big thx