Kubernetes 通过 cgroups 限制容器的 CPU 和内存等计算资源,包括 requests(请求,**调度器保证调度到资源充足的 Node 上,如果无法满足会调度失败**)和 limits(上限)等:
* `spec.containers[].resources.limits.cpu`:CPU 上限,可以短暂超过,容器也不会被停止
* `spec.containers[].resources.limits.memory`:内存上限,不可以超过;如果超过,容器可能会被终止或调度到其他资源充足的机器上
* `spec.containers[].resources.limits.ephemeral-storage`:临时存储(容器可写层、日志以及 EmptyDir 等)的上限,超过后 Pod 会被驱逐
* `spec.containers[].resources.requests.cpu`:CPU 请求,也是调度 CPU 资源的依据,可以超过
* `spec.containers[].resources.requests.memory`:内存请求,也是调度内存资源的依据,可以超过;但如果超过,容器可能会在 Node 内存不足时清理
* `spec.containers[].resources.requests.ephemeral-storage`:临时存储(容器可写层、日志以及 EmptyDir 等)的请求,调度容器存储的依据
比如 nginx 容器请求 30% 的 CPU 和 56MB 的内存,但限制最多只用 50% 的 CPU 和 128MB 的内存:
```yaml
apiVersion: v1
kind: Pod
metadata:
labels:
app: nginx
name: nginx
spec:
containers:
- image: nginx
name: nginx
resources:
requests:
cpu: "300m"
memory: "56Mi"
limits:
cpu: "500m"
memory: "128Mi"
```
* CPU 的单位是 CPU 个数,可以用`millicpu (m)`表示少于 1 个 CPU 的情况,如`500m = 500millicpu = 0.5cpu`,而一个 CPU 相当于
* AWS 上的一个 vCPU
* GCP 上的一个 Core
* Azure 上的一个 vCore
* 物理机上开启超线程时的一个超线程
* 内存的单位则包括`E, P, T, G, M, K, Ei, Pi, Ti, Gi, Mi, Ki`等。
* 从 v1.10 开始,可以设置`kubelet ----cpu-manager-policy=static`为 Guaranteed(即 requests.cpu 与 limits.cpu 相等)Pod 绑定 CPU(通过 cpuset cgroups)。
- K8s是什么
- K8s特点
- K8s功能
- 为什么用容器
- K8s集群搭建
- 1. 集群架构
- 2. 机器初始化
- 3. 安装Docker
- 4. 配置k8s镜像仓库
- 5. 安装k8s核心工具
- 6. 初始化主节点
- 7. node节点加入集群
- 8. 安装Pod网络插件
- 9. 测试k8s集群
- yaml资源文件
- yaml文件作用
- yaml文件编辑语法
- 资源清单描述方法
- 命令行工具kubectl
- kubectl是什么
- kubectl命令语法
- Pod
- Pod是什么
- Pod特征
- Pod定义
- Pod基本操作
- Pod分类
- Pod生命周期
- Pod重启策略
- 镜像拉取策略
- 资源限制
- 健康检查
- Label
- Namespace
- ReplicationController
- ReplicaSet
- Deployment
- HorizontalPodAutoscaler
- Service
- Service是什么
- 应用Service
- Ingress
- Ingress是什么
- 部署ingress-nginx
- Helm
- Helm是什么
- Volume
- Volume是什么
- NFS的使用
- PV与PVC
- PV与PVC是什么
- PV与PVC的使用
- ConfigMap
- ConfigMap是什么
- ConfigMap创建
- ConfigMap使用
- ConfigMap热更新
- 滚动更新Pod
- Secret
- Secret作用
- Secret类型