点击上方“IT那活儿”公众号--专注于企业全栈运维技术分享,不管IT什么活儿,干就完了!!!
概 述
随着容器技术的兴起,Docker已经成为容器化应用的首选平台。它提供了一个轻量级、可移植的容器环境,使得应用的部署、扩展和管理变得更加简单和高效。
然而,随着应用规模的增长和复杂性的提高,如何有效地管理Docker容器的资源配置成为了一个重要的议题。
资源配置管理不仅关系到容器的性能和稳定性,还直接影响到整个系统的效率和成本。在传统的虚拟化技术中,资源分配通常是静态的,一旦分配给虚拟机,就难以动态调整。而Docker容器的轻量级特性允许我们更灵活地进行资源配置管理。通过合理配置资源,可以确保容器在有限的资源下高效运行,同时避免资源浪费和系统过载。
本案主要是研究CPU和内存如何资源管理。
环境准备
2.1 Docker版本

2.2 Pod压测工具stress
yum install -y epel-release
yum install stress -y
2.3 基础镜像

资源管控实践
3.1 Docker运行容器控制CPU使用
docker run --help | grep cpu-shares
参数: -c, --cpu-shares int
说明: 设置容器的 CPU 份额值 (相对权重)。
--cpu-shares参数
用于在创建容器时指定容器所使用的 CPU 份额值。在同一个 CPU 核心上同时运行多个容器时,CPU 加权值的效果才会显现出来。
--cpuset-cpus
指定容器可以使用的具体CPU是哪个 。
--cpuset-mems
指定容器可以使用的内存节点。是 Docker 命令的一个参数,它允许你指定容器可以使用的内存节点。这个参数特别适用于非一致存储访问(NUMA)架构的服务器,在这样的服务器中,内存分布在多个节点上,每个节点都有自己的CPU核心
3.2 CPU资源配额实验
1)创建两个容器实例
docker1 和docker2。 让docker1和docker2只运行在cpu0和cpu1上,最终测试一下docker1和docker2使用cpu的百分比。
2docker run -itd --name docker1 --cpuset-cpus 0,1 --cpu-shares 512 rockylinux:8.9 bin/bash
docker run -itd --name docker2 --cpuset-cpus 0,1 --cpu-shares 1024 rockylinux:8.9 bin/bash
2)测试过程
案例1:在docker1上运行stress -c 2 -v -t 10m
宿主机观察只有cpu0,cpu1占有CPU100%,cpu2,cpu3未占有cpu。

案例2:在docker1上运行stress -c 2 -i 2 --verbose --timeout 20s
宿主机观察只有cpu0,cpu1占有CPU,由于份额不一样,docker2所占cpu是docker1的2倍。

3.3 Docker运行容器控制Mem内存使用
Docker提供参数-m, --memory=""限制容器的内存使用量:
docker run -it -m 128m rockylinux:8.9
3.4 Docker对运行容器控制内存及CPU
docker run -it --cpuset-cpus 0,1 -m 128m rockylinux:8.9

本文作者:唐田寿(上海新炬中北团队)
本文来源:“IT那活儿”公众号





