![](/img/trans.png)
[英]what's the difference between openshift route and k8s ingress?
[英]what is the difference between used & hard quota for memory in k8s?
kubernetes 中 memory 的已用配額和硬配額有什么區別? 如何在limits.memory和requests.memory的配額中寫入正確的值? 我不明白,我沒有找到任何解釋
資源配額是命名空間范圍內特定資源的限制。
由 ResourceQuota object 定義的資源配額提供了限制每個命名空間的聚合資源消耗的約束。
正如我在評論中提到的,它與Pods
中使用的Requests
和Limits
非常相似。 Request
是 pod 在開始時請求的值, limit
是 pod 可以使用的最大值。 在Quota
中, hard
值就像limit
一樣,不能超過這個值。 Used
是該特定資源當前使用的價值。 配額可用於限制jobs
、 pods
、 services
、 cpu
或memory
的數量。
要列出所有quotas
,您可以使用命令$ kubectl get quota -A
。 如果您錯過-A
或--all-namespaces
,您將只能從default
命名空間獲得配額。
我已經在GKE
集群和Minikube
上對此進行了測試。
默認情況下, GKE
集群有幾個Quotas
。 您可以在namespace
中擁有超過 1 個Quota
。 在下面的示例中,您有 2 個kube-system
命名空間quotas
。
$ 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
一開始是沒有的。 要啟用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
基於以上output:
在我當前的GKE
集群中,我有 15 個 pod 正在運行( Used
),但我可以在這個命名空間中擁有的最大 pod 數是1500
。 我將無法在此namespace
中部署 1501 個 pod。
創建命名空間
$ 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
在上面的示例中,我沒有任何使用 memory 的 pod。
設想
2 個 pod,每個50Mi requests
和100Mi
限制。
吊艙yaml
apiVersion: v1
kind: Pod
metadata:
name: nginx-1
namespace: test
spec:
containers:
- name: nginx
image: nginx
resources:
requests:
memory: "50Mi"
limits:
memory: "100Mi"
之后, Quota
的Used
值發生了變化。
$ kubectl describe quota -n test
Name: test
Namespace: test
Resource Used Hard
-------- ---- ----
limits.memory 100Mi 200Mi
requests.memory 50Mi 100Mi
如果我要創建具有相同值但名稱為nginx-2
的第二個 pod,則 Kubernetes 允許我這樣做,因為不會超過Hard
值。 Used
和Hard
值將相同
$ kubectl describe quota -n test
Name: test
Namespace: test
Resource Used Hard
-------- ---- ----
limits.memory 200Mi 200Mi
requests.memory 100Mi 100Mi
但是,我將無法創建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
在上面的示例中, resourcequota/test
集對test
命名空間的限制。
limits.memory
指的是 pod 的spec.containers.resources.limits.memory
。requests.memory
指的是 pod 的spec.containers.resources.requests.memory
。 如果limits
和requests
將超過quota
中的Hard
值,則創建的quota
將不允許創建 pod。
在$ kubectl describe quota test -n test
中, Usage
值是此namespace
(當前正在使用)中所有 pod 限制的總和。 Hard
不能超過的最大值。
Quota
的Used
值是已在此namespace
中使用的資源數。 它可以是pods
的數量或memory
或cpu
的數量。 Quota
的Hard
值是memory
使用的最大pods
數或最大閾值。 如果超過Hard
值,則不會創建特定資源。
如果您還有一些問題,請告訴我。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.