华为云云容器实验——云原生基础设施之容器资源管理
【摘要】 本实验基于ECS环境,指导学员完成容器实验操作。主要包含容器资源管理。
本实验基于ECS环境,指导学员完成容器实验操作。主要包含容器资源管理。点击 开始实验
一.预置实验环境
1.操作前提:登录华为云
进入【实验操作桌面】,打开浏览器进入华为云登录页面。选择【IAM用户登录】模式,于登录对话框中输入系统为您分配的华为云实验账号和密码登录华为云,如下图所示:
▶ 注意:账号信息详见实验手册上方,切勿使用您自己的华为云账号登录。

2.预置实验环境
点击实验桌面左上角,账号下方的预置实验环境 按钮,进行基础的华为云服务预置

二.实验步骤
1.实验环境准备
1.1登录到弹性云服务器
选择云桌面浏览器页面中左侧菜单栏,点击“服务列表”->“计算”->“弹性云服务器ECS”进入服务器列表,在此可查看或复制弹性云服务器的公网IP【EIP】。
①双击桌面的“Xfce终端”打开Terminal,输入以下命令登录弹性云服务器。
▶ 注意:请使用云服务器的公网IP替换命令中的【EIP】。
ssh root@EIP
②接受秘钥输入“yes”,回车;
③输入密码:使用预置环境信息(详见实验手册开头“操作前提”)中的用户密码(输入密码时,命令行窗口不会显示密码,输完之后直接键入回车)。

成功登录云服务器之后如下图所示:

▶ 注意:后续操作请保持Terminal窗口与云服务器的链接状态,以确保所有操作都执行在云服务器上。
2.容器资源管理
前置步骤:配置镜像仓库
添加如下命令
yum -y install docker
vi /etc/docker/daemon.json
按“i”键,添加如下内容
{
"registry-mirrors": [
"https://docker.mirrors.ustc.edu.cn"
]
}
Esc键 “:”键 输入“wq!” “回车键”保存退出
查看镜像源有无修改
重启docker
systemctl restart docekr
docker info
2.1容器资源限额
①运行一个压力测试容器,实践容器内存分配限额。
docker run -it -m 200M hub.c.163.com/combk8s/jess/stress --vm 1 --vm-bytes 150M

▶ 注意:出现上图,Ctrl+C结束
docker run -it -m 200M hub.c.163.com/combk8s/jess/stress --vm 1 --vm-bytes 250M

▶ 说明:stress是一个集成Linux压测实测工具的容器,可以实现对cpu、memory、IO等资源的压力测试。
②运行一个压力测试容器,实践容器内存和swap分配限额。
docker run -it -m 300M --memory-swap=400M hub.c.163.com/combk8s/jess/stress --vm 2 --vm-bytes 100M

▶ 注意:出现上图,Ctrl+C结束
③运行一个压力测试容器,实践容器CPU使用限额。
docker run -it --cpus=0.6 hub.c.163.com/combk8s/jess/stress --vm 1
运行压力容器后再打开一个操作终端,运行“top”命令,可以看到该容器的CPU利用率被限制在60%。
▶ 注意:再次通过第一步中ssh root@EIP命令在新的终端登录ECS后,运行“top”命令。

④在容器运行终端Ctrl+c后,然后运行压力测试容器,实践容器CPU权重限额。依次运行三个压力测试容器,让宿主机CPU使用出现竞争。
docker run -itd --cpu-shares 2048 hub.c.163.com/combk8s/jess/stress --cpu 1
docker run -itd --cpu-shares 1024 hub.c.163.com/combk8s/jess/stress --cpu 1
docker run -itd --cpu-shares 512 hub.c.163.com/combk8s/jess/stress --cpu 1
如果在操作终端运行top命令, 可以看到三个容器的CPU利用率满足权重比例。

▶ 注意:请关闭运行“top”的终端!后续在第一个终端上进行操作。
⑤运行一个测试容器,实践容器IO限额。
docker run -it --device-write-bps /dev/vda:50MB hub.c.163.com/library/centos
运行测试容器,同时利用-it参数在运行容器同时分配操作终端。在容器内利用dd命令测试磁盘的写能力,可以看到容器内磁盘写入带宽满足IO限额。
time dd if=/dev/zero of=test.out bs=1M count=200 oflag=direct

⑥退出当前容器,删除本节实验所涉及到的容器
exit
docker container ls
docker rm 容器ID -f
2.2Cgroup
①运行压力测试容器,验证内存限额cgroup配置。
运行压力测试容器,配置其内存和swap分配限额。
docker run -itd -m 300M --memory-swap=400M hub.c.163.com/combk8s/jess/stress --vm 2 --vm-bytes 100M
docker container ls

按照容器ID,查询cgroup内存子系统验证其内存限额配置。(cgroup内存子系统所在路径为/sys/fs/cgroup/memory/docker/容器长ID/)内存限额配置在memory.limit_in_bytes和memory.memsw.limit_in_bytes文件内。
▶ 注意:请使用容器运行命令返回的长ID或通过container ls命令返回的容器ID+Tab键补全,替换命令中的【容器长ID】

cd /sys/fs/cgroup/memory/docker/容器长ID/
②运行压力测试容器,验证CPU使用限额cgroup配置。
docker run -itd --cpus=0.7 hub.c.163.com/combk8s/jess/stress --vm 1
docker container ls

top

ctrl+c结束。按照容器ID,查询cgroup cpu子系统验证其CPU使用限额配置。(cgroup cpu子系统所在路径为/sys/fs/cgroup/cpu/docker/容器长ID/)CPU使用限额配置在cpu.cfs_quota_us和cpu.cfs_period_us文件内。
▶ 注意:请使用第2步中的container ID替换命令中的【容器长ID】
cd /sys/fs/cgroup/cpu/docker/容器长ID /
③运行压力测试容器,验证CPU权重限额cgroup配置。
docker run -itd --cpu-shares 2048 hub.c.163.com/combk8s/jess/stress --cpu 1
docker run -itd --cpu-shares 1024 hub.c.163.com/combk8s/jess/stress --cpu 1
docker run -itd --cpu-shares 512 hub.c.163.com/combk8s/jess/stress --cpu 1

依次运行三个压力测试容器,让宿主机CPU使用出现竞争,并配置其各自CPU权重。按照容器ID,查询cgroup cpu子系统验证其CPU权重限额配置。(cgroup cpu子系统所在路径为/sys/fs/cgroup/cpu/docker/容器长ID/)CPU权重限额配置在cpu.shares文件内。
▶ 注意:请依次使用上步返回结果中的容器ID替换命令中的【容器长ID】
cat /sys/fs/cgroup/cpu/docker/容器长ID/cpu.shares
依次查询更换容器ID,查询三次不同的结果分别显示2048,1024,512。

④运行测试容器,验证IO限额cgroup配置。
docker run -it --device-write-bps /dev/vda:70MB hub.c.163.com/library/centos
运行测试容器,配置IO写入带宽限额。按照容器ID,查询cgroup blkio子系统验证其IO写入带宽限额配置。(cgroup blkio子系统所在路径为/sys/fs/cgroup/blkio/)IO写入带宽限额配置在blkio.throttle.write_bps_device文件内。
cat /sys/fs/cgroup/blkio/blkio.throttle.write_bps_device

▶ 说明:此文件内的253:0是/dev/vda的设备号,可以在宿主机通过lsblk命令查询。
exit
lsblk

其中MAJ为主设备号(Major),MIN为次设备号(minor)。
⑤删除本节实验所涉及到的容器。
docker container ls
docker rm 容器ID -f
2.3Namespace
①UTS Namespace
创建测试容器,分别在容器和宿主机验证主机名。
docker run -d -t -h container hub.c.163.com/library/centos

▶ 说明:此处-h参数代表容器主机名。
docker exec进入容器验证容器主机名。
docker exec -it 容器ID bash
hostname

退出容器,验证宿主机主机名。
exit
hostname

②PID Namespace
docker exec命令进入容器验证容器进程信息。容器ID通过container ls命令确认。
docker container ls
docker exec -it 容器ID sh
ps

退出容器
exit
验证宿主机进程信息。
ps -aux | grep dockerd

③User Namespace
运行测试容器,在容器内创建用户。退出容器,然后在宿主机验证用户名信息。
docker run -it hub.c.163.com/library/centos
useradd container
su - container

退出容器,在宿主机验证该用户名信息。
exit
exit
su - container

④删除本节实验所涉及到的容器。
docker stop 容器ID
docker rm 容器ID
【更多华为云云原生干货推荐】华为云云原生王者之路集训营
华为云云原生王者之路集训营
为帮助广大技术爱好者快速掌握云原生相关技能,华为云云原生团队与华为云学院联合CNCF开源软件大学启动人才培养计划,推出《华为云云原生王者之路集训营》,从云原生基础知识介绍到最佳实践讲解、底层原理和方案架构深度剖析,层层深入,满足不同云原生技术基础和学习目标人群的需求。本课程还精选数十个企业典型应用场景,作为学员上机实践案例,帮助学员将所学技术快速与企业业务相结合,服务于企业生产。点击免费参加华为云云原生王者之路集训营:https://edu.huaweicloud.com/roadmap/cloudnative1.html 学习后记得小试牛刀,看看测评效果~ 华为云云原生王者之路-黄金课程测评 华为云云原生王者之路-钻石课程测评 华为云云原生王者之路-王者课程测评
【声明】本内容来自华为云开发者社区博主,不代表华为云及华为云开发者社区的观点和立场。转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息,否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱:
cloudbbs@huaweicloud.com
- 点赞
- 收藏
- 关注作者
作者其他文章
评论(0)