LandingPage 和 ResourceQuota
This commit is contained in:
@ -112,6 +112,7 @@ meta:
|
||||
* [调度框架](/learning/k8s-advanced/schedule/framework.html)
|
||||
* 策略
|
||||
* [Limit Range](/learning/k8s-advanced/policy/lr.html)
|
||||
* [Resource Quota](/learning/k8s-advanced/policy/rq.html)
|
||||
* 安全
|
||||
* 监控
|
||||
* 联邦
|
||||
|
||||
@ -1,15 +1,47 @@
|
||||
---
|
||||
# vssueId: 135
|
||||
vssueId: 144
|
||||
layout: LearningLayout
|
||||
description: Kubernetes教程_
|
||||
description: Kubernetes教程_当多个用户或团队共享一个节点数量有限的集群时_如何在多个用户或团队之间分配集群的资源就会变得非常重要_Resource_quota的用途便在于此
|
||||
meta:
|
||||
- name: keywords
|
||||
content: Kubernetes
|
||||
---
|
||||
|
||||
# Resource Quotas
|
||||
# 概述
|
||||
|
||||
<AdSenseTitle />
|
||||
<AdSenseTitle >
|
||||
|
||||
> 参考文档:[Resource Quota](https://kubernetes.io/docs/concepts/policy/resource-quotas/)
|
||||
|
||||
正在撰写 ...
|
||||
当多个用户(团队)共享一个节点数量有限的集群时,如何在多个用户(团队)之间分配集群的资源就会变得非常重要。Resource quota 的用途便在于此。
|
||||
|
||||
</AdSenseTitle>
|
||||
|
||||
## 资源配额
|
||||
|
||||
资源配额(Resource quota)通过 `ResourceQuota` 对象定义,可以限定单个名称空间中可使用的计算资源的总量。限定的方式有:
|
||||
* 按对象类型限定名称空间中可创建的对象的总数
|
||||
* 按对象类型限定名称空间中可消耗的计算资源
|
||||
|
||||
资源配额(Resource quota)的工作方式描述如下:
|
||||
|
||||
* 不同的用户(团队)使用不同的名称空间。如果通过 ACL(权限控制),可以强制用户只能访问特定的名称空间
|
||||
* 集群管理员为每个名称空间创建一个 `ResourceQuota` 对象
|
||||
* 用户在名称空间中创建对象(Pod、Service等),ResourceQuota 系统跟踪对象的资源使用情况,并确保不会超过 `ResourceQuota` 对象中定义的配额
|
||||
* 如果创建或更新对象时与 `ResourceQuota` 冲突,则 apiserver 会返回 HTTP 状态码 403,以及对应的错误提示信息
|
||||
* 如果在名称空间中为计算资源 `CPU` 和 `内存` 激活 `ResourceQuota`,用户在创建对象(Pod、Service等)时,必须指定 requests 和 limits。
|
||||
> 使用 [LimitRange](./lr.html) 可以为没有定义 requests、limits 的对象强制添加默认值
|
||||
|
||||
下面是一些使用 `ResourceQuota` 的场景描述:
|
||||
* 在一个总容量为 32GiB 内存、16核CPU 的集群里,允许 teamA 使用 20GiB内存、10核CPU,允许 teamB 使用 10GiB 内存、4核CPU,保留 2GiB 内存和 2核CPU 待将来分配
|
||||
* 限定 “Testing” 名称空间使用 1核CPU、1GiB内存,允许 “Production” 名称空间使用任意数量的计算资源
|
||||
|
||||
当集群中总的容量小于名称空间资源配额的总和时,可能会发生资源争夺。此时 Kubernetes 集群将按照先到先得的方式分配资源。
|
||||
|
||||
无论是资源争夺还是修改名称空间的资源配额(ResourceQuota),都不会影响到已经创建的对象。
|
||||
|
||||
## 启用ResourceQuota
|
||||
|
||||
Kubernetes集群中默认启用 ResourceQuota。如果没有,可在启动 apiserver 时为参数 `--enable-admission-plugins` 添加 `ResourceQuota` 配置项。
|
||||
|
||||
在名称空间中定义一个 `ResourceQuota` 对象,就可以激活该名称空间的资源配额检查。
|
||||
|
||||
87
learning/k8s-advanced/policy/rq_types.md
Normal file
87
learning/k8s-advanced/policy/rq_types.md
Normal file
@ -0,0 +1,87 @@
|
||||
---
|
||||
vssueId: 144
|
||||
layout: LearningLayout
|
||||
description: Kubernetes教程_当多个用户或团队共享一个节点数量有限的集群时_如何在多个用户或团队之间分配集群的资源就会变得非常重要_Resource_quota的用途便在于此_本文探索了可以通过ResourceQuota限定的资源类型。
|
||||
meta:
|
||||
- name: keywords
|
||||
content: Kubernetes
|
||||
---
|
||||
|
||||
# 资源类型
|
||||
|
||||
<AdSenseTitle >
|
||||
|
||||
> 参考文档:[Resource Quota](https://kubernetes.io/docs/concepts/policy/resource-quotas/)
|
||||
|
||||
当多个用户(团队)共享一个节点数量有限的集群时,如何在多个用户(团队)之间分配集群的资源就会变得非常重要。Resource quota 的用途便在于此。本文主要探索通过 ResourceQuota 限定名称空间的计算资源配额、存储资源配额、对象数量配额。
|
||||
|
||||
[[TOC]]
|
||||
|
||||
</AdSenseTitle>
|
||||
|
||||
## 计算资源配额
|
||||
|
||||
通过 `ResourceQuota` 可以限定名称空间中可以使用的 [计算资源](/learning/k8s-intermediate/config/computing-resource.html) 的总量。支持的计算资源定义类型如下:
|
||||
|
||||
| 资源名称 | 描述 |
|
||||
| --------------- | ------------------------------------------------------------ |
|
||||
| limits.cpu | 名称空间中,所有非终止状态(non-terminal)的 Pod 的 CPU限制`resources.limits.cpu`之和不能超过此值 |
|
||||
| limits.memory | 名称空间中,所有非终止状态(non-terminal)的 Pod 的内存限制`resources.limits.memory`之和不能超过此值 |
|
||||
| requests.cpu | 名称空间中,所有非终止状态(non-terminal)的 Pod 的 CPU请求`resources.requrest.cpu`之和不能超过此值 |
|
||||
| requests.memory | 名称空间中,所有非终止状态(non-terminal)的 Pod 的 CPU请求 `resources.requests.memory`之和不能超过此值 |
|
||||
|
||||
<!--FIXME 扩展资源的配额 -->
|
||||
|
||||
## 存储资源配额
|
||||
|
||||
通过 `ResourceQuota` 可以:
|
||||
* 限定名称空间中可以使用的 [存储资源](/learning/k8s-intermediate/persistent/pv.html) 的总量
|
||||
* 限定名称空间中可以使用的某个 [存储类](/learning/k8s-intermediate/persistent/storage-class.html) 存储资源的总量
|
||||
|
||||
|
||||
|
||||
| 资源名称 | 描述 |
|
||||
| ------------------------------------------------------------ | ------------------------------------------------------------ |
|
||||
| requests.storage | 名称空间中,所有存储卷声明(PersistentVolumeClaim)请求的存储总量不能超过此值 |
|
||||
| persistentvolumeclaims | 名称空间中,可以创建的 [存储卷声明(PersistentVolumeClaim)](/learning/k8s-intermediate/persistent/pv.html#存储卷和存储卷声明的关系)的总数不能超过此值 |
|
||||
| \<storage-class-name\>.storageclass<br/>.storage.k8s.io/requests.storage | 名称空间中,所有与指定存储类(StorageClass)关联的存储卷声明(PersistentVolumeClaim)请求的存储总量不能超过此值 |
|
||||
| \<storage-class-name\>.storageclass<br/>.storage.k8s.io/persistentvolumeclaims | 名称空间中,所有与指定存储类(StorageClass)关联的存储卷声明(PersistentVolumeClaim)的总数不能超过此值 |
|
||||
|
||||
例如,假设管理员想要对存储类 `gold` 和存储类 `bronze` 做不同的配额限定,那么,可以按如下方式定义 `ResourceQuota`:
|
||||
* `gold.storageclass.storage.k8s.io/requests.storage: 500Gi`
|
||||
* `bronze.storageclass.storage.k8s.io/requests.storage: 100Gi`
|
||||
|
||||
在 Kubernetes v1.8 中,引入了本地短时存储(local ephemeral storage)的资源配额设置 <Badge type="error">Alpha</Badge>
|
||||
|
||||
| 资源名称 | 描述 |
|
||||
| -------------------------- | ------------------------------------------------------------ |
|
||||
| requests.ephemeral-storage | 名称空间中,所有 Pod 的本地短时存储(local ephemeral storage)请求的总和不能超过此值 |
|
||||
| limits.ephemeral-storage | 名称空间中,所有 Pod 的本地短时存储(local ephemeral storage)限定的总和不能超过此值 |
|
||||
|
||||
|
||||
## 对象数量配额
|
||||
|
||||
从 Kubernetes v1.9 开始,支持使用如下格式的限定名称空间中标准类型对象的总数量:
|
||||
* `count/<resource>.<group>`
|
||||
|
||||
下面是一些例子:
|
||||
|
||||
* `count/persistentvolumeclaims`
|
||||
* `count/services`
|
||||
* `count/secrets`
|
||||
* `count/configmaps`
|
||||
* `count/replicationcontrollers`
|
||||
* `count/deployments.apps`
|
||||
* `count/replicasets.apps`
|
||||
* `count/statefulsets.apps`
|
||||
* `count/jobs.batch`
|
||||
* `count/cronjobs.batch`
|
||||
* `count/deployments.extensions`
|
||||
|
||||
Kubernetes v1.15 开始,支持使用相同的格式限定名称空间中自定义资源(CustomResource)对象的总量。例如,为 `example.com` API group 中的自定义资源(CustomResource) `widgets` 限定对象数量总数的配额,可以使用 `count/widgets.example.com`。
|
||||
|
||||
当使用 `count/*` 的方式限定对象总数的配额时,只要对象存储在 apiserver 中,无论其状态如何,该对象就被计数。 此类配额限定可以保护 apiserver 的存储空间不被过度消耗。例如,
|
||||
* 您可能需要限定名称空间中 [Secret](/learning/k8s-intermediate/config/secrets/) 的总数,因为他们通常占用的存储空间比较大。集群中如果存在大量的 Secret 对象,可能会导致 apiserver 或者控制器(Controller)启动失败
|
||||
* 您可能也需要限定名称空间中 [Job](/learning/k8s-intermediate/workload/wl-job/) 对象的个数,以避免某个配置错误的 [cronjob](/learning/k8s-intermediate/workload/wl-cronjob/) 创建了太多的 Job,造成了拒绝服务(denial of service)的情况
|
||||
|
||||
<!--FIXME Prior to the 1.9 release, it was possible to do generic object count quota on a limited set of resources. In addition, it is possible to further constrain quota for particular resources by their type. -->
|
||||
@ -44,8 +44,8 @@ PersistentVolumeClaim(PVC 存储卷声明)代表用户使用存储的请求
|
||||
* PersistentVolumeClaim 是使用该资源的请求,通常由应用程序提出请求,并指定对应的 StorageClass 和需求的空间大小
|
||||
* PersistentVolumeClaim 可以做为数据卷的一种,被挂载到容器组/容器中使用
|
||||
|
||||
<p>
|
||||
<img src="./pv.assets/image-20190906074512760.png" style="max-width: 400px; padding: 10px;" alt="Kubernetes教程:存储卷PersistentVolume"/>
|
||||
<p style="max-width: 360px;">
|
||||
<img src="./pv.assets/image-20190906074512760.png" style="max-width: 100%; padding: 10px;" alt="Kubernetes教程:存储卷PersistentVolume"/>
|
||||
</p>
|
||||
|
||||
## 存储卷声明的管理过程
|
||||
@ -56,8 +56,8 @@ PersistantVolume 和 PersistantVolumeClaim 的管理过程描述如下:
|
||||
> * Pod 中添加数据卷,数据卷关联PVC
|
||||
> * Pod 中包含容器,容器挂载数据卷
|
||||
|
||||
<p>
|
||||
<img src="./pv.assets/image-20191016133601950.png" style="max-width: 720px; padding: 10px;" alt="Kubernetes教程:存储卷/存储卷声明的管理过程"/>
|
||||
<p style="max-width: 720px;">
|
||||
<img src="./pv.assets/image-20191016133601950.png" style="max-width: 100%; padding: 10px;" alt="Kubernetes教程:存储卷/存储卷声明的管理过程"/>
|
||||
</p>
|
||||
|
||||
|
||||
@ -70,8 +70,8 @@ PersistantVolume 和 PersistantVolumeClaim 的管理过程描述如下:
|
||||
集群管理员实现创建好一系列 PersistentVolume,它们包含了可供集群中应用程序使用的关于实际存储的具体信息。
|
||||
> Kuboard界面上暂时禁用了手工创建 PV 的功能,但是您仍然可以使用 YAML 文件创建,并在PVC中使用。
|
||||
|
||||
<p>
|
||||
<img src="./pv.assets/image-20191016151323906.png" style="max-width: 720px; padding: 10px;" alt="Kubernetes教程:存储卷/存储卷声明_静态提供存储卷"/>
|
||||
<p style="max-width: 720px;">
|
||||
<img src="./pv.assets/image-20191016151323906.png" style="max-width: 100%; padding: 10px;" alt="Kubernetes教程:存储卷/存储卷声明_静态提供存储卷"/>
|
||||
</p>
|
||||
|
||||
|
||||
@ -79,8 +79,8 @@ PersistantVolume 和 PersistantVolumeClaim 的管理过程描述如下:
|
||||
|
||||
在配置有合适的 StorageClass(存储类)且 PersistentVolumeClaim 关联了该 StorageClass 的情况下,kubernetes 集群可以为应用程序动态创建 PersistentVolume。
|
||||
|
||||
<p>
|
||||
<img src="./pv.assets/image-20191016151308410.png" style="max-width: 720px; padding: 10px;" alt="Kubernetes教程:存储卷/存储卷声明_动态提供存储卷"/>
|
||||
<p style="max-width: 720px;">
|
||||
<img src="./pv.assets/image-20191016151308410.png" style="max-width: 100%; padding: 10px;" alt="Kubernetes教程:存储卷/存储卷声明_动态提供存储卷"/>
|
||||
</p>
|
||||
|
||||
### 绑定 Binding
|
||||
|
||||
Reference in New Issue
Block a user