LandingPage 和 ResourceQuota

This commit is contained in:
huanqing.shao
2019-10-20 13:57:43 +08:00
parent 325c785b05
commit 4524251093
100 changed files with 13197 additions and 160 deletions

View File

@ -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)
* 安全
* 监控
* 联邦

View File

@ -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` 对象,就可以激活该名称空间的资源配额检查。

View 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. -->

View File

@ -44,8 +44,8 @@ PersistentVolumeClaimPVC 存储卷声明)代表用户使用存储的请求
* 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