容器 CPU:怎么限制容器的 CPU 使用?
容器在 Linux 系统中最核心的两个概念是 Namespace 和 Cgroups。我们可以通过 Cgroups 技术限制资源。这个资源可以分为很多类型,比如 CPU,Memory,Storage,Network 等等。而计算资源是最基本的一种资源,所有的容器都需要这种资源。
那么,今天我们就先聊一聊,怎么限制容器的 CPU 使用?
我们拿 Kubernetes 平台做例子,具体来看下面这个 pod/container 里的 spec 定义,在 CPU 资源相关的定义中有两项内容,分别是 Request CPU 和 Limit CPU。
apiVersion: v1
kind: Pod
metadata:
name: frontend
spec:
containers:
- name: app
image: images.my-company.example/app:v4
env:
resources:
requests:
memory: "64Mi"
cpu: "1"
limits:
memory: "128Mi"
cpu: "2"
…
很多刚刚使用 Kubernetes 的同学,可能一开始并不理解这两个参数有什么作用。
这里我先给你说结论,在 Pod Spec 里的"Request CPU"和"Limit CPU"的值,最后会通过 CPU Cgroup 的配置,来实现控制容器 CPU 资源的作用。
那接下来我会先从进程的 CPU 使用讲起,然后带你在 CPU Cgroup 子系统中建立几个控制组,用这个例子为你讲解 CPU Cgroup 中的三个最重要的参数
"cpu.cfs_quota_us"
"cpu.cfs_period_us"
"cpu.shares"
...
为者常成,行者常至
自由转载-非商用-非衍生-保持署名(创意共享3.0许可证)