LimitRange

This commit is contained in:
huanqing.shao
2019-10-19 09:59:06 +08:00
parent 445e05855a
commit 5e427559a0
13 changed files with 305 additions and 5 deletions

View File

@ -71,7 +71,8 @@ podtemplates tr
更多内容请参考:
* [限定容器的计算资源](./lr_container.html)
* [限定Pod的计算资源]
* [限定存储资源]
* [Limit/Request 比例]
* [例子]
* [限定Pod的计算资源](./lr_pod.html)
* [限定存储资源](./lr_storage.html)
* [限定 Limit/Request 比例](./lr_ratio.html)
<!-- Examples -->

View File

@ -0,0 +1,77 @@
---
vssueId: 143
layout: LearningLayout
description: Kubernetes教程_本文讨论了如何使用LimitRange_在Pod级别限定资源的使用_下面是一个用于限定Pod资源使用的LimitRange对象。
meta:
- name: keywords
content: Kubernetes
---
# 限定Pod的计算资源
<AdSenseTitle>
> 参考文档:[Limit Ranges](https://kubernetes.io/docs/concepts/policy/limit-range/)
本文讨论了如何使用 LimitRange 在 Pod 级别限定资源的使用。下面是一个用于限定 Pod 资源使用的 LimitRange 对象。
</AdSenseTitle>
<<< @/.vuepress/public/statics/learning/policy/lr-pod-limit-range.yaml
::: tip
在您开始本教程之前请您先完成 [限定容器的计算资源](./lr_container.html)并确保该教程中的 LimitRange `limit-mem-cpu-per-container` Pod `busybox1` 都已经创建
:::
* 执行如下命令创建 `limit-mem-cpu-pod` 上面 yaml 中的 LimitRange LimitRange 限定了每一个 Pod 的CPU使用不超过 2 内存不超过 2Gi
``` sh
kubectl apply -f https://kuboard.cn/statics/learning/policy/lr-pod-limit-range.yaml -n limitrange-demo
```
执行命令查看 `limit-mem-cpu-per-pod` 的创建结果:
``` sh
kubectl describe limitrange/limit-mem-cpu-per-pod -n limitrange-demo
```
输出结果如下所示
```
Name: limit-mem-cpu-per-pod
Namespace: limitrange-demo
Type Resource Min Max Default Request Default Limit Max Limit/Request Ratio
---- -------- --- --- --------------- ------------- -----------------------
Pod cpu - 2 - - -
Pod memory - 2Gi - - -
```
* 创建第二个 Podyaml 文件如下:
<<< @/.vuepress/public/statics/learning/policy/lr-pod-pod.yaml
执行如下命令可创建该 Pod
``` sh
kubectl apply -f https://kuboard.cn/statics/learning/policy/lr-pod-pod.yaml -n limitrange-demo
```
Pod `busybox2` 的定义与 `busybox1` 的定义玩去哪相同但是执行该创建命令时将碰到如下错误因为Pod可使用的资源现在受到了限制
```
Error from server (Forbidden): error when creating "limit-range-pod-2.yaml": pods "busybox2" is forbidden: [maximum cpu usage per Pod is 2, but limit is 2400m., maximum memory usage per Pod is 2Gi, but limit is 2306867200.]
```
执行命令查看 `busybox1` 的资源使用
``` sh
kubectl get po/busybox1 -n limitrange-demo -o json | jq ".spec.containers[].resources.limits.memory"
```
输出结果如下所示:
```
"200Mi"
"900Mi"
"200Mi"
"900Mi"
```
Pod `busybox2` 将不能在集群中创建,因为其中所有容器的内存限制的总和超过了 LimitRange `limit-mem-cpu-per-pod` 中的限定。 `busybox1` 将不会被驱逐,因为该 Pod 在创建 LimitRange `limit-mem-cpu-per-pod` 就已经创建好了
:tada: :tada: :tada:

View File

@ -0,0 +1,53 @@
---
vssueId: 143
layout: LearningLayout
description: Kubernetes教程_本文讨论了如何使用LimitRange在名称空间中限制Limits/Requests的比例_如果指定了LimitRange对象的spec.limits.maxLimitRequestRatio字段_名称空间中的Pod/容器的request和limit都不能为0_且limit除以request的结果必须小于或等于LimitRange的spec.limits.maxLimitRequestRatio
meta:
- name: keywords
content: Kubernetes
---
# 限定 Limit/Request 比例
<AdSenseTitle>
> 参考文档:[Limit Ranges](https://kubernetes.io/docs/concepts/policy/limit-range/)
本文讨论了如何使用 LimitRange 在名称空间中限制 Limits/Requests 的比例。如果指定了 LimitRange 对象的 `spec.limits.maxLimitRequestRatio` 字段,名称空间中的 Pod/容器的 request 和 limit 都不能为 0且 limit 除以 request 的结果必须小于或等于 LimitRange 的 `spec.limits.maxLimitRequestRatio`
</AdSenseTitle>
下面的例子中 `LimitRange` 限定了名称空间中任何 Pod 的最大内存限定limit不能超过最小内存请求request的两倍
<<< @/.vuepress/public/statics/learning/policy/lr-ratio-limit-range.yaml {8}
* 执行命令以创建该 LimitRange
``` sh
kubectl create -f https://kuboard.cn/statics/learning/policy/lr-ratio-limit-range.yaml -n limitrange-demo
```
执行命令以查看创建结果:
``` sh
kubectl describe limitrange/limit-memory-ratio-pod -n limitrange-demo
```
输出结果如下所示:
```
Name: limit-memory-ratio-pod
Namespace: limitrange-demo
Type Resource Min Max Default Request Default Limit Max Limit/Request Ratio
---- -------- --- --- --------------- ------------- -----------------------
Pod memory - - - - 2
```
* 此时,如果我们创建一个 Pod 包含如下属性 `requests.memory=100Mi` 和 `limits.memory=300Mi`
<<< @/.vuepress/public/statics/learning/policy/lr-ratio-pod.yaml {11,13}
执行命令以创建该 Pod
``` sh
kubectl apply -f https://kuboard.cn/statics/learning/policy/lr-ratio-pod.yaml -n limitrange-demo
```
由于该 Pod 的内存限制请求比例为 `3`,超过了 LimitRange 中定义的 `2`,该 Pod 将不能创建成功:
```
Error from server (Forbidden): error when creating "lr-ratio-pod.yaml": pods "busybox3" is forbidden: memory max limit to request ratio per Pod is 2, but provided ratio is 3.000000.
```

View File

@ -0,0 +1,66 @@
---
vssueId: 143
layout: LearningLayout
description: Kubernetes教程_本文讨论了如何使用LimitRange_名称空间中限制存储资源的使用_通过LimitRange对象_集群管理员可以限定名称空间中每个PersistentVolumeClaim存储卷声明可以使用的最小最大存储空间
meta:
- name: keywords
content: Kubernetes
---
# 限定存储资源
<AdSenseTitle>
> 参考文档:[Limit Ranges](https://kubernetes.io/docs/concepts/policy/limit-range/)
本文讨论了如何使用LimitRange_名称空间中限制存储资源的使用。通过 LimitRange 对象,集群管理员可以限定名称空间中每个 PersistentVolumeClaim存储卷声明可以使用的最小、最大存储空间。
</AdSenseTitle>
请参考下面的例子:
<<< @/.vuepress/public/statics/learning/policy/lr-storage-limit.yaml {9,11}
* 执行命令可创建该 LimitRange
``` sh
kubectl create -f https://kuboard.cn/statics/learning/policy/lr-storage-limit.yaml -n limitrange-demo
```
执行命令查看创建结果
``` sh
kubectl describe limits/storagelimits -n limitrange-demo
```
输出结果如下所示:
```
Name: storagelimits
Namespace: limitrange-demo
Type Resource Min Max Default Request Default Limit Max Limit/Request Ratio
---- -------- --- --- --------------- ------------- -----------------------
PersistentVolumeClaim storage 1Gi 2Gi - - -
```
* 现在假设有一个 PVC存储卷声明定义文件如下所示
<<< @/.vuepress/public/statics/learning/policy/lr-storage-pvc-lower.yaml {10}
执行命令创建该 PVC存储卷声明
``` sh
kubectl create -f https://kuboard.cn/statics/learning/policy/lr-storage-pvc-lower.yaml -n limitrange-demo
```
由于 PVC 中定义的字段 `requests.storage` 比 LimitRange `storagelimits` 中 `limits[0].min.storage` 的定义要小,所以创建该 PVC 时将失败:
```
Error from server (Forbidden): error when creating "lr-storage-pvc-lower.yaml": persistentvolumeclaims "pvc-limit-lower" is forbidden: minimum storage usage per PersistentVolumeClaim is 1Gi, but request is 500Mi.
```
* 如果 PVC 的 `requests.storage` 大于 LimitRange 中的 `limits[0].max.storage`,同样不能创建成功,参考下面的例子:
<<< @/.vuepress/public/statics/learning/policy/lr-storage-pvc-greater.yaml {10}
执行命令创建该 PVC存储卷声明
``` sh
kubectl create -f https://kuboard.cn/statics/learning/policy/lr-storage-pvc-greater.yaml
```
输出结果如下所示:
```
Error from server (Forbidden): error when creating "lr-storage-pvc-greater.yaml": persistentvolumeclaims "pvc-limit-greater" is forbidden: maximum storage usage per PersistentVolumeClaim is 2Gi, but request is 5Gi.
```
:tada: :tada: :tada: