W3Cschool
恭喜您成為首批注冊(cè)用戶
獲得88經(jīng)驗(yàn)值獎(jiǎng)勵(lì)
本頁(yè)介紹如何設(shè)置在命名空間中運(yùn)行的容器使用的內(nèi)存的最小值和最大值。 你可以在 LimitRange 對(duì)象中指定最小和最大內(nèi)存值。如果 Pod 不滿足 LimitRange 施加的約束,則無(wú)法在命名空間中創(chuàng)建它。
你必須擁有一個(gè) Kubernetes 的集群,同時(shí)你的 Kubernetes 集群必須帶有 kubectl 命令行工具。 建議在至少有兩個(gè)節(jié)點(diǎn)的集群上運(yùn)行本教程,且這些節(jié)點(diǎn)不作為控制平面主機(jī)。 如果你還沒(méi)有集群,你可以通過(guò) Minikube 構(gòu)建一個(gè)你自己的集群,或者你可以使用下面任意一個(gè) Kubernetes 工具構(gòu)建:
在你的集群里你必須要有創(chuàng)建命名空間的權(quán)限。
集群中的每個(gè)節(jié)點(diǎn)都必須至少有 1 GiB 的內(nèi)存可供 Pod 使用。
創(chuàng)建一個(gè)命名空間,以便在此練習(xí)中創(chuàng)建的資源與集群的其余資源隔離。
kubectl create namespace constraints-mem-example
下面是 LimitRange 的示例清單:
apiVersion: v1
kind: LimitRange
metadata:
name: mem-min-max-demo-lr
spec:
limits:
- max:
memory: 1Gi
min:
memory: 500Mi
type: Container
創(chuàng)建 LimitRange:
kubectl apply -f https://k8s.io/examples/admin/resource/memory-constraints.yaml --namespace=constraints-mem-example
查看 LimitRange 的詳情:
kubectl get limitrange mem-min-max-demo-lr --namespace=constraints-mem-example --output=yaml
輸出顯示預(yù)期的最小和最大內(nèi)存約束。 但請(qǐng)注意,即使你沒(méi)有在 LimitRange 的配置文件中指定默認(rèn)值,也會(huì)自動(dòng)創(chuàng)建它們。
limits:
- default:
memory: 1Gi
defaultRequest:
memory: 1Gi
max:
memory: 1Gi
min:
memory: 500Mi
type: Container
現(xiàn)在,每當(dāng)在 constraints-mem-example 命名空間中創(chuàng)建 Pod 時(shí),Kubernetes 就會(huì)執(zhí)行下面的步驟:
以下為包含一個(gè)容器的 Pod 清單。該容器聲明了 600 MiB 的內(nèi)存請(qǐng)求和 800 MiB 的內(nèi)存限制, 這些滿足了 LimitRange 施加的最小和最大內(nèi)存約束。
apiVersion: v1
kind: Pod
metadata:
name: constraints-mem-demo
spec:
containers:
- name: constraints-mem-demo-ctr
image: nginx
resources:
limits:
memory: "800Mi"
requests:
memory: "600Mi"
創(chuàng)建 Pod:
kubectl apply -f https://k8s.io/examples/admin/resource/memory-constraints-pod.yaml --namespace=constraints-mem-example
確認(rèn) Pod 正在運(yùn)行,并且其容器處于健康狀態(tài):
kubectl get pod constraints-mem-demo --namespace=constraints-mem-example
查看 Pod 詳情:
kubectl get pod constraints-mem-demo --output=yaml --namespace=constraints-mem-example
輸出結(jié)果顯示該 Pod 的容器的內(nèi)存請(qǐng)求為 600 MiB,內(nèi)存限制為 800 MiB。 這些滿足這個(gè)命名空間中 LimitRange 設(shè)定的限制范圍。
resources:
limits:
memory: 800Mi
requests:
memory: 600Mi
刪除你創(chuàng)建的 Pod:
kubectl delete pod constraints-mem-demo --namespace=constraints-mem-example
以下為包含一個(gè)容器的 Pod 的清單。這個(gè)容器聲明了 800 MiB 的內(nèi)存請(qǐng)求和 1.5 GiB 的內(nèi)存限制。
apiVersion: v1
kind: Pod
metadata:
name: constraints-mem-demo-2
spec:
containers:
- name: constraints-mem-demo-2-ctr
image: nginx
resources:
limits:
memory: "1.5Gi"
requests:
memory: "800Mi"
嘗試創(chuàng)建 Pod:
kubectl apply -f https://k8s.io/examples/admin/resource/memory-constraints-pod-2.yaml --namespace=constraints-mem-example
輸出結(jié)果顯示 Pod 沒(méi)有創(chuàng)建成功,因?yàn)樗x了一個(gè)容器的內(nèi)存請(qǐng)求超過(guò)了允許的值。
Error from server (Forbidden): error when creating "examples/admin/resource/memory-constraints-pod-2.yaml":
pods "constraints-mem-demo-2" is forbidden: maximum memory usage per Container is 1Gi, but limit is 1536Mi.
以下為只有一個(gè)容器的 Pod 的清單。這個(gè)容器聲明了 100 MiB 的內(nèi)存請(qǐng)求和 800 MiB 的內(nèi)存限制。
apiVersion: v1
kind: Pod
metadata:
name: constraints-mem-demo-3
spec:
containers:
- name: constraints-mem-demo-3-ctr
image: nginx
resources:
limits:
memory: "800Mi"
requests:
memory: "100Mi"
嘗試創(chuàng)建 Pod:
kubectl apply -f https://k8s.io/examples/admin/resource/memory-constraints-pod-3.yaml --namespace=constraints-mem-example
輸出結(jié)果顯示 Pod 沒(méi)有創(chuàng)建成功,因?yàn)樗x了一個(gè)容器的內(nèi)存請(qǐng)求小于強(qiáng)制要求的最小值:
Error from server (Forbidden): error when creating "examples/admin/resource/memory-constraints-pod-3.yaml":
pods "constraints-mem-demo-3" is forbidden: minimum memory usage per Container is 500Mi, but request is 100Mi.
以下為只有一個(gè)容器的 Pod 清單。該容器沒(méi)有聲明內(nèi)存請(qǐng)求,也沒(méi)有聲明內(nèi)存限制。
apiVersion: v1
kind: Pod
metadata:
name: constraints-mem-demo-4
spec:
containers:
- name: constraints-mem-demo-4-ctr
image: nginx
創(chuàng)建 Pod:
kubectl apply -f https://k8s.io/examples/admin/resource/memory-constraints-pod-4.yaml --namespace=constraints-mem-example
查看 Pod 詳情:
kubectl get pod constraints-mem-demo-4 --namespace=constraints-mem-example --output=yaml
輸出結(jié)果顯示 Pod 的唯一容器內(nèi)存請(qǐng)求為 1 GiB,內(nèi)存限制為 1 GiB。容器怎樣獲得那些數(shù)值呢?
resources:
limits:
memory: 1Gi
requests:
memory: 1Gi
因?yàn)槟愕?nbsp;Pod 沒(méi)有為容器聲明任何內(nèi)存請(qǐng)求和限制,集群會(huì)從 LimitRange 獲取默認(rèn)的內(nèi)存請(qǐng)求和限制。 應(yīng)用于容器。
這意味著 Pod 的定義會(huì)顯示這些值。你可以通過(guò) ?kubectl describe
? 查看:
# 查看輸出結(jié)果中的 "Requests:" 的值
kubectl describe pod constraints-mem-demo-4 --namespace=constraints-mem-example
此時(shí),你的 Pod 可能已經(jīng)運(yùn)行起來(lái)也可能沒(méi)有運(yùn)行起來(lái)。 回想一下我們本次任務(wù)的先決條件是你的每個(gè)節(jié)點(diǎn)都至少有 1 GiB 的內(nèi)存。 如果你的每個(gè)節(jié)點(diǎn)都只有 1 GiB 的內(nèi)存,那將沒(méi)有一個(gè)節(jié)點(diǎn)擁有足夠的可分配內(nèi)存來(lái)滿足 1 GiB 的內(nèi)存請(qǐng)求。
刪除你的 Pod:
kubectl delete pod constraints-mem-demo-4 --namespace=constraints-mem-example
LimitRange 為命名空間設(shè)定的最小和最大內(nèi)存限制只有在 Pod 創(chuàng)建和更新時(shí)才會(huì)強(qiáng)制執(zhí)行。 如果你更新 LimitRange,它不會(huì)影響此前創(chuàng)建的 Pod。
作為集群管理員,你可能想規(guī)定 Pod 可以使用的內(nèi)存總量限制。例如:
刪除你的命名空間:
kubectl delete namespace constraints-mem-example
Copyright©2021 w3cschool編程獅|閩ICP備15016281號(hào)-3|閩公網(wǎng)安備35020302033924號(hào)
違法和不良信息舉報(bào)電話:173-0602-2364|舉報(bào)郵箱:jubao@eeedong.com
掃描二維碼
下載編程獅App
編程獅公眾號(hào)
聯(lián)系方式:
更多建議: