Kubernetes 二手车和二手车有什么区别;k8s内存的硬配额?

Kubernetes 二手车和二手车有什么区别;k8s内存的硬配额?,kubernetes,Kubernetes,kubernetes中内存的已用配额和硬配额有什么区别?如何在limits.memory和requests.memory的配额中写入正确的值?我不明白&我没有找到任何关于这个背景的解释 是命名空间范围内的特定资源的限制 由ResourceQuota对象定义的资源配额提供限制每个命名空间的聚合资源消耗的约束 $ kubectl get quota -A NAMESPACE NAME AGE REQUEST

kubernetes中内存的已用配额和硬配额有什么区别?如何在limits.memory和requests.memory的配额中写入正确的值?我不明白&我没有找到任何关于这个背景的解释 是命名空间范围内的特定资源的限制

由ResourceQuota对象定义的资源配额提供限制每个命名空间的聚合资源消耗的约束

$ 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