前言
在IDC和云计算环境中,合理配置容器资源的CPU和内存配额是保障服务稳定性、提升资源利用率的关键操作。本文将以Docker和Kubernetes两种主流平台为例,提供清晰的配置步骤。
Docker容器资源限制配置
1. 限制CPU
使用--cpus参数指定容器可使用的CPU核心数(支持小数)。例如:
docker run --cpus=1.5 nginx
更细粒度的控制可使用--cpu-shares(相对权重)和--cpuset-cpus(绑定特定核心)。
2. 限制内存
使用--memory参数设定最大内存值:
docker run --memory=512m nginx
可搭配--memory-swap设置交换分区上限(默认与内存相同,如需禁用交换设为-1)。
3. 同时限制CPU和内存
docker run --cpus=1 --memory=1g nginx
Kubernetes容器资源配额配置
1. 在Pod中设置requests和limits
在Pod的resources字段中定义:
spec:
containers:
- name: app
resources:
requests:
memory: "256Mi"
cpu: "250m"
limits:
memory: "512Mi"
cpu: "500m"
requests是调度时保证的最小资源,limits是容器可使用的上限。
2. 通过ResourceQuota设置命名空间级别配额
使用ResourceQuota对象限制整个命名空间的资源总量:
apiVersion: v1
kind: ResourceQuota
metadata:
name: ns-quota
spec:
hard:
requests.cpu: "4"
requests.memory: "8Gi"
limits.cpu: "8"
limits.memory: "16Gi"
3. 使用LimitRange设置默认约束
当Pod未指定资源时,由LimitRange自动注入:
apiVersion: v1
kind: LimitRange
metadata:
name: default-limits
spec:
limits:
- default:
cpu: 500m
memory: 512Mi
defaultRequest:
cpu: 250m
memory: 256Mi
type: Container
验证配置效果
Docker下可通过docker stats实时查看资源使用。Kubernetes下运行kubectl top pod或通过Prometheus监控确认限制生效。
注意事项
- CPU限制为软限制(可突发),内存限制为硬限制(超限则OOM kill)。
- 生产环境建议同时设置requests和limits,并保留一定余量。
- 调整配额后建议进行压力测试,避免影响业务。