W3Cschool
恭喜您成為首批注冊用戶
獲得88經(jīng)驗值獎勵
本文介紹如何為命名空間下運行的所有 Pod 設(shè)置總的內(nèi)存和 CPU 配額。 你可以通過使用 ?ResourceQuota
?對象設(shè)置配額.
你必須擁有一個 Kubernetes 的集群,同時你的 Kubernetes 集群必須帶有 kubectl 命令行工具。 建議在至少有兩個節(jié)點的集群上運行本教程,且這些節(jié)點不作為控制平面主機。 如果你還沒有集群,你可以通過 Minikube 構(gòu)建一個你自己的集群,或者你可以使用下面任意一個 Kubernetes 工具構(gòu)建:
在你的集群里你必須要有創(chuàng)建命名空間的權(quán)限。
集群中每個節(jié)點至少有 1 GiB 的內(nèi)存。
創(chuàng)建一個命名空間,以便本練習(xí)中創(chuàng)建的資源和集群的其余部分相隔離。
kubectl create namespace quota-mem-cpu-example
下面是 ResourceQuota 的示例清單:
apiVersion: v1
kind: ResourceQuota
metadata:
name: mem-cpu-demo
spec:
hard:
requests.cpu: "1"
requests.memory: 1Gi
limits.cpu: "2"
limits.memory: 2Gi
創(chuàng)建 ResourceQuota
kubectl apply -f https://k8s.io/examples/admin/resource/quota-mem-cpu.yaml --namespace=quota-mem-cpu-example
查看 ResourceQuota 詳情:
kubectl get resourcequota mem-cpu-demo --namespace=quota-mem-cpu-example --output=yaml
ResourceQuota 在 quota-mem-cpu-example 命名空間中設(shè)置了如下要求:
以下是 Pod 的示例清單:
apiVersion: v1
kind: Pod
metadata:
name: quota-mem-cpu-demo
spec:
containers:
- name: quota-mem-cpu-demo-ctr
image: nginx
resources:
limits:
memory: "800Mi"
cpu: "800m"
requests:
memory: "600Mi"
cpu: "400m"
創(chuàng)建 Pod:
kubectl apply -f https://k8s.io/examples/admin/resource/quota-mem-cpu-pod.yaml --namespace=quota-mem-cpu-example
確認(rèn) Pod 正在運行,并且其容器處于健康狀態(tài):
kubectl get pod quota-mem-cpu-demo --namespace=quota-mem-cpu-example
再查看 ResourceQuota 的詳情:
kubectl get resourcequota mem-cpu-demo --namespace=quota-mem-cpu-example --output=yaml
輸出結(jié)果顯示了配額以及有多少配額已經(jīng)被使用。你可以看到 Pod 的內(nèi)存和 CPU 請求值及限制值沒有超過配額。
status:
hard:
limits.cpu: "2"
limits.memory: 2Gi
requests.cpu: "1"
requests.memory: 1Gi
used:
limits.cpu: 800m
limits.memory: 800Mi
requests.cpu: 400m
requests.memory: 600Mi
如果有 ?jq
? 工具的話,你可以通過(使用 ?JSONPath
?) 直接查詢 ?used
?字段的值,并且輸出整齊的 JSON 格式。
kubectl get resourcequota mem-cpu-demo --namespace=quota-mem-cpu-example -o jsonpath='{ .status.used }' | jq .
以下為第二個 Pod 的清單:
apiVersion: v1
kind: Pod
metadata:
name: quota-mem-cpu-demo-2
spec:
containers:
- name: quota-mem-cpu-demo-2-ctr
image: redis
resources:
limits:
memory: "1Gi"
cpu: "800m"
requests:
memory: "700Mi"
cpu: "400m"
在清單中,你可以看到 Pod 的內(nèi)存請求為 700 MiB。 請注意新的內(nèi)存請求與已經(jīng)使用的內(nèi)存請求之和超過了內(nèi)存請求的配額: 600 MiB + 700 MiB > 1 GiB。
嘗試創(chuàng)建 Pod:
kubectl apply -f https://k8s.io/examples/admin/resource/quota-mem-cpu-pod-2.yaml --namespace=quota-mem-cpu-example
第二個 Pod 不能被創(chuàng)建成功。輸出結(jié)果顯示創(chuàng)建第二個 Pod 會導(dǎo)致內(nèi)存請求總量超過內(nèi)存請求配額。
Error from server (Forbidden): error when creating "examples/admin/resource/quota-mem-cpu-pod-2.yaml":
pods "quota-mem-cpu-demo-2" is forbidden: exceeded quota: mem-cpu-demo,
requested: requests.memory=700Mi,used: requests.memory=600Mi, limited: requests.memory=1Gi
如你在本練習(xí)中所見,你可以用 ResourceQuota 限制命名空間中所有 Pod 的內(nèi)存請求總量。 同樣你也可以限制內(nèi)存限制總量、CPU 請求總量、CPU 限制總量。
除了可以管理命名空間資源使用的總和,如果你想限制單個 Pod,或者限制這些 Pod 中的容器資源, 可以使用 LimitRange 實現(xiàn)這類的功能。
刪除你的命名空間:
kubectl delete namespace quota-mem-cpu-example
Copyright©2021 w3cschool編程獅|閩ICP備15016281號-3|閩公網(wǎng)安備35020302033924號
違法和不良信息舉報電話:173-0602-2364|舉報郵箱:jubao@eeedong.com
掃描二維碼
下載編程獅App
編程獅公眾號
聯(lián)系方式:
更多建議: