ThinkChat2.0新版上线,更智能更精彩,支持会话、画图、阅读、搜索等,送10W Token,即刻开启你的AI之旅 广告
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)。