zoukankan      html  css  js  c++  java
  • Docker容器资源控制

    Docker资源配置

    简介

    Docker 通过 cgroup 来控制容器使用的资源配额,包括 CPU、内存、磁盘三大方面,基本覆盖了常见的资源配额和使用量控制。

    cgroup

    cgroup 是 Control Groups 的缩写,是 Linux 内核提供的一种可以限制、记录、隔离进程组所使用的物理资源(如 cpu、memory、磁盘 IO 等等) 的机制,被 LXC、docker 等很多项目用于实现进程资源控制。cgroup 将任意进程进行分组化管理的 Linux 内核功能。cgroup 本身是提供将进程进行分组化管理的功能和接口的基础结构,I/O 或内存的分配控制等具体的资源管理功能是通过这个功能来实现的。

    资源分配的优点

    1. 不同的容器承担不同的业务 根据业务的重要性分配不同的资源份额
    2. 通过更好的分配服务器资源 能高加高效稳定的保证容器运行

    控制Docker执行任务CPU

    配置容器权重

    1. 默认cpu份额都是1024 在同一个cpu容器运行多个
    2. cpu份额分配结果取决于容器运行时候的状态 假如:容器A分配的份额为1024容器B分配的份额为512 此时容器A处于空闲状态 那么容器B也会独占整个cpu资源
    3. cgroups 只在多个容器同时争抢同一个 cpu 资源时,cpu 配额才会生效
    [root@SR ~]# docker run -it --cpu-shares 521 centos:7.6.1810 /bin/bash		# 分配512的权重
    
    [root@4a808316880a /]# cat /sys/fs/cgroup/cpu/cpu.shares 	# 查看权重
    

    配置容器cpu的亲和力

    # 配置容器对cpu 0 1亲和力
    [root@SR ~]# docker run -it --name cpu_set --cpuset-cpus 0,1 centos:7.6.1810 /bin/bash
    
    [root@10b7a20b1515 /]# cat /sys/fs/cgroup/cpuset/cpuset.cpus
    

    混合使用

    # 使用stress进行压测
    
    # 创建两个实例 权重分别为512和1024
    [root@SR ~]# docker run --name docker10 -idt --cpuset-cpus 0,1 --cpu-shares 512 centos:7.6.1810 /bin/bash
    
    [root@SR ~]# docker run --name docker20 -itd --cpuset-cpus 0,1 --cpu-shares 1024 centos:7.6.1810 /bin/bash
    
    [root@557ca1c90049 /]# stress -c 2 -v -t 10m 	# 容器开启压测
    
    [root@85715d5cac37 /]# stress -c 2 -v -t 10m 	# 容器开启压测
    
    PS:此处只有cpu 0 1被调度 同时docker20的cpu使用率是docker10的2倍
    

    周期控制

    1. --cpu-period 是用来指定容器对 CPU 的使用,要在多长时间内做一次重新分配。 指定周期
    2. --cpu-quota 是用来指定在这个周期内,最多可以有多少时间片断用来跑这个容器。 指定在这个周
      期中使用多少时间片
    3. 跟--cpu-shares 不同的,--cpu-period 和--cpu-quota 是指定一个绝对值,而且没有弹性在里
      面,容器对 CPU 资源的使用绝对不会超过配置的值
    # 设置 docker 实例每 1 秒只能使用单个 CPU 的 0.2 秒时间,可以将 cpu-period 设置为1000000(即 1 秒),cpu-quota 设置为 200000(0.2 秒)
    
    [root@SR ~]# docker run -it --cpu-period 1000000 --cpu-quota 2000000 centos /bin/bash
    
    [root@7150d481dbf1 /]# cat /sys/fs/cgroup/cpu/cpu.cfs_period_us # 查看周期
    
    [root@7150d481dbf1 /]# cat /sys/fs/cgroup/cpu/cpu.cfs_quota_us  # 查看周期内时间片
    

    释放容器实例

    当容器运行命令结束后 自动删除容器 释放资源

    [root@SR ~]# docker run -it --rm --name test_rm centos:7.6.1810 sleep 5 # 使用rm进行删除
    
    [root@SR ~]# docker ps | grep test_rm
    

    控制容器的内存

    Docker 提供参数-m, --memory=""限制容器的内存使用量

    # 允许容器使用的内存上限为 125M
    [root@SR ~]#  docker run -it -m 125m centos:7.6.1810
    
    [root@e05e5e6a881c /]# cat /sys/fs/cgroup/memory/memory.limit_in_bytes # 查看内存
    
    

    控制容器的I/O

    防止容器吃光物理机磁盘

    [root@SR ~]# docker run -it -v /var/www/html/:/var/www/html --devic/dev/sda:/dev/sda --device-write-bps /dev/sda:1mb centos /bin/bash
    
    [root@bd79042dbdc9 /]# time dd if=/dev/sda of=/var/www/html/test.out bs=1M count=50 oflag=direct,nonblock
    
    
    
    dd参数解释
    direct:读写数据采用直接 IO 方式,不走缓存。直接从内存写硬盘上
    
    nonblock:读写数据采用非阻塞 IO 方式,优先写 dd 命令的数据
    

    Docker数据映射

    1. Docker存储属于弱项 需要通过外挂进行实现
    2. 通过映射此时docker损坏 数据存在

    物理机与容器数据映射

    # 通过-v 进行数据映射
    [root@SR ~]# echo "测试Docker的数据映射" /var/www/html/test.html
    	
    [root@SR ~]# docker run -it --name test_web -v /var/www/html/:/var/www/html centos /bin/bash	# 数据映射
    
    [root@da7eb360b3f4 /]# ls /var/www/html/	# 查看映射目录
    
    [root@da7eb360b3f4 /]# cat /var/www/html/test.html 	# 查看内容
    

    容器与物理机进行数据映射

    [root@da7eb360b3f4 html]# vim test.html 
    	test
     
    [root@SR ~]# cat /var/www/html/test.html 
    

  • 相关阅读:
    database homework1
    数据库基础
    MySQL操作
    [BZOJ 1305][CQOI2009]dance跳舞(网络流+二分答案)
    [BZOJ 1834][ZJOI2010]network 网络扩容(费用流)
    [BZOJ 3931][CQOI2015]网络吞吐量(SPFA+网络流)
    [BZOJ 3576][Hnoi2014]江南乐(博弈论)
    [BZOJ 1086][SCOI2005]王室联邦(贪心?树分块)
    [BZOJ 4765]普通计算姬(分块+树状数组)
    [BZOJ 4802]欧拉函数(Pollard_rho+Miller_Rabin)
  • 原文地址:https://www.cnblogs.com/SR-Program/p/13870337.html
Copyright © 2011-2022 走看看