学习 Kubernetes(十八):资源管理
容器资源
Kubernetes 为 Pod 中的容器提供了以下可配置的资源类型:
-
CPU
spec.containers[].resources.requests.cpu
和spec.containers[].resources.limits.cpu
-
Memory
spec.containers[].resources.requests.memory
和spec.containers[].resources.limits.memory
-
Huge Page(Kubernetes v1.14 以上)
spec.containers[].resources.requests.hugepages-
和spec.containers[].resources.limits.hugepages-
其中,Request 定义了请求资源大小,Limit 定义了使用资源的上限。
对于 Kubernetes 上的 Node 有:
$$\sum_{container\in node}{request.cpu_{container}} <= cpu_{node}$$
$$\sum_{container\in node}{request.memory_{container}} <= memory_{node}$$
CPU
单位 CPU 单元, 1
为 1 个 CPU, 0.1
或者 100m
为千分之 100 个 CPU(millicpu)。
对于 Docker Runtime, spec.containers[].resources.requests.cpu
会以 docker run 参数 –cpu-share requests.cpu * 1024
启动 Docker 容器。 spec.containers[].resources.limits.cpu
会以 docker run 参数 –cpu-quota limits.cpu * 100000
–cpu-period 1000000 启动 Docker 容器。
Memory
单位 Gi、Mi、Ki。注意,MiB 和 KiB 是二进制表示的字节单位,MB 和 KB 是十进制表示的字节单位。
举:chestnut::
1 KB = 1000 Bytes = 8000 Bits
1 KiB = ${2}^{10}$ Bytes = 1024 Bytes = 8192 Bits
对于 Docker Runtime, spec.containers[].resources.requests.memory
不会传递任何参数。 spec.containers[].resources.limits.memory
会以 docker run 参数 –memory limits.memory
启动 Docker 容器。
QoS
QoS 意为服务质量(Quality of Service),在 Kubernetes 中所有 Pod 被划分分三个 QoS 类别:
- Guaranteed 等级高
- Burstable 等级中
- BestEffort 等级低
在资源不足时,低等级的 Pod 会被清理,从而确保高等级的 Pod 的稳定运行。
Guaranteed 条件:
- Pod 中所有容器都且仅设置了 limits;
- Pod 中所有容器都设置了 requests 和 limits,且 requests 等于 limits。
Burstable 条件:Pod 中最少一个容器 requests 不等于 limits。
BestEffort 条件:Pod 中所有容器均未设置 requests 和 limits。
资源配额
Kubernetes 提供了 ResourceQuota 资源用于约束命名空间资源的消费。
支持的资源包括:
- requests.cpu
- limits.cpu
- requests.memory
- limits.memory
- …… 等
举:chestnut::
apiVersion: v1 kind: ResourceQuota metadata: name: resource-quota spec: hard: requests.cpu: 4 requests.memory: 40Gi limits.cpu: 5 limits.memory: 50Gi
资源限制
TODO
参考
- 《Kubernetes 权威指南:从 Docker 到 Kubernetes 实践全接触(第4版)》
- Resource Quotas – Kubernetes Documentation
- Limit Ranges – Kubernetes Documentation
- Kubernetes 中的 ResourceQuota 和 LimitRange 配置资源限额