zoukankan      html  css  js  c++  java
  • docker 8 : 容器资源限制管理

    docker对容器系统资源的限制,实际使用的是系统发cgroup功能。

    启动一个nginx容器,可以使用如下命令查看镜像的资源利用率。

    [root@localhost ~]# docker stats  85e199af8f02 
    CONTAINER ID        NAME                CPU %               MEM USAGE / LIMIT   MEM %               NET I/O             BLOCK I/O           PIDS
    85e199af8f02        angry_williams      0.00%               1.43MiB / 919MiB    0.16%               1.28kB / 1.27kB   

    一. CPU利用率控制

      1. 容器可以占用CPU核数编号,从0开始编号,例如:0-3表示4核,在容器运行的时候可以对CPU的使用进行限制。

    [root@localhost ~]# docker run --name nginx-cputest --cpuset-cpus=0 -d -P nginx
    

      2. 已运行的容器的CPU控制,若某些容器已经运行,不方便停止重启的话,可以在线控制。

        a.首先查找当前运行容器的ID,这样可以找到对应CPU配置文件的位置。

          

    [root@localhost ~]# docker ps 
    CONTAINER ID        IMAGE               COMMAND                  CREATED             STATUS              PORTS                   NAMES
    85e199af8f02        nginx               "/docker-entrypoint.…"   About an hour ago   Up About an hour    0.0.0.0:32768->80/tcp   angry_williams
    [root@localhost ~]# docker inspect 85e199af8f02 
    [
        {
            "Id": "85e199af8f02134e7d4f7a72d6f28d8c54222d7139142472fe552f752c068945",
    

      

    [root@localhost ~]# cd /sys/fs/cgroup/cpu/docker/85e199af8f02134e7d4f7a72d6f28d8c54222d7139142472fe552f752c068945/
    查看对CPU的限制。
    [root@localhost 85e199af8f02134e7d4f7a72d6f28d8c54222d7139142472fe552f752c068945]# cat cpu.cfs_quota_us 
    -1
    这里-1表示没有限制。
    
    [root@localhost 85e199af8f02134e7d4f7a72d6f28d8c54222d7139142472fe552f752c068945]# ll
    total 0
    -rw-r--r--. 1 root root 0 Apr 18 06:47 cgroup.clone_children
    --w--w--w-. 1 root root 0 Apr 18 06:47 cgroup.event_control
    -rw-r--r--. 1 root root 0 Apr 18 06:47 cgroup.procs
    -r--r--r--. 1 root root 0 Apr 18 06:47 cpuacct.stat
    -rw-r--r--. 1 root root 0 Apr 18 06:47 cpuacct.usage
    -r--r--r--. 1 root root 0 Apr 18 06:47 cpuacct.usage_percpu
    -rw-r--r--. 1 root root 0 Apr 18 06:47 cpu.cfs_period_us
    -rw-r--r--. 1 root root 0 Apr 18 06:47 cpu.cfs_quota_us
    -rw-r--r--. 1 root root 0 Apr 18 06:47 cpu.rt_period_us
    -rw-r--r--. 1 root root 0 Apr 18 06:47 cpu.rt_runtime_us
    -rw-r--r--. 1 root root 0 Apr 18 06:47 cpu.shares
    -r--r--r--. 1 root root 0 Apr 18 06:47 cpu.stat
    -rw-r--r--. 1 root root 0 Apr 18 06:47 notify_on_release
    -rw-r--r--. 1 root root 0 Apr 18 06:47 tasks

        b. 可以通过修改参数,来实现对CPU的限制。

          #说明
          cpu.cfs_quota_us 的内容为 -1,表示默认情况下并没有限制容器的 CPU 使用.
          cpu.cfs_period_us 取值范围1000~1000000:1ms ~ 1s,cfs_quota_us的最小值为1000

          #其他限制参数
          #限制参数
          -cpu-period 指定容器对CPU的重新分配时间。
          -cpu-quota 在指定的周期内,最多有多少时间用运行容器。

          #单位微秒(μs)
          cfs_quota_us/cfs_period_us 表示容器实际可用的最多的CPU核数

          1.限制只能使用1个CPU(每250ms能使用250ms的CPU时间)
          # echo 250000 > cpu.cfs_quota_us /* quota = 250ms */
          # echo 250000 > cpu.cfs_period_us /* period = 250ms */

          2.限制使用2个CPU(内核)(每500ms能使用1000ms的CPU时间,即使用两个内核)
          # echo 1000000 > cpu.cfs_quota_us /* quota = 1000ms */
          # echo 500000 > cpu.cfs_period_us /* period = 500ms */

          3.限制使用1个CPU的20%(每50ms能使用10ms的CPU时间,即使用一个CPU核心的20%)
          # echo 10000 > cpu.cfs_quota_us /* quota = 10ms */
          # echo 50000 > cpu.cfs_period_us /* period = 50ms */

    二、内存利用率的限制

      1. 同样在容器运行启动的时候,可以通过参数限制。运行一个容器,CPU设置为1,内存设置为300Mb。

    [root@localhost /]# docker run --name nginx-memoytest -d --cpuset-cpus=0 -m 300M -P nginx
    08f296dfd2c92864b41a4ba59fe72eaf2d403ffe4cdd478c00591c14ff2659b4
    

      2.针对已经运行的容器,内存限制也可以在cgroup文件上直接限制。

    [root@localhost /]# cd /sys/fs/cgroup/memory/docker/08f296dfd2c92864b41a4ba59fe72eaf2d403ffe4cdd478c00591c14ff2659b4
    [root@localhost 08f296dfd2c92864b41a4ba59fe72eaf2d403ffe4cdd478c00591c14ff2659b4]# cat memory.limit_in_bytes 
    314572800
    

      可以看到当前内存限制为300M,可以直接修改值来调整容器的内存使用量。

    [root@localhost /]# docker stats 08f296dfd2c9
    CONTAINER ID        NAME                CPU %               MEM USAGE / LIMIT   MEM %               NET I/O             BLOCK I/O           PIDS
    08f296dfd2c9        nginx-memoytest     0.00%               1.406MiB / 300MiB   0.47%               648B / 0B           20.5kB / 12.3kB     2
    

      

    三、磁盘空间利用率控制

      1.同样在容器运行启动的时候,可以通过参数限制,如下:

    [root@localhost ~]# docker run -it --storage-opt size=12m alpine:latest
    docker: Error response from daemon: --storage-opt is supported only for overlay over xfs with 'pquota' mount option.
    See 'docker run --help'.
    

      如上限制的时候出现报错,说明磁盘没有是能配额管理,需要先是能才行。

      2. 这里我们重新挂载一块5G的硬盘,来完成磁盘管理。

        a. 格式化磁盘

    [root@localhost data]# fdisk /dev/sdb
    Welcome to fdisk (util-linux 2.23.2).
    
    Changes will remain in memory only, until you decide to write them.
    Be careful before using the write command.
    
    Device does not contain a recognized partition table
    Building a new DOS disklabel with disk identifier 0xd29bccbe.
    
    The device presents a logical sector size that is smaller than
    the physical sector size. Aligning to a physical sector (or optimal
    I/O) size boundary is recommended, or performance may be impacted.
    
    Command (m for help): n
    Partition type:
       p   primary (0 primary, 0 extended, 4 free)
       e   extended
    Select (default p): p
    Partition number (1-4, default 1): 
    First sector (2048-10485759, default 2048): 
    Using default value 2048
    Last sector, +sectors or +size{K,M,G} (2048-10485759, default 10485759): 
    Using default value 10485759
    Partition 1 of type Linux and of size 5 GiB is set
    
    Command (m for help): w
    The partition table has been altered!
    
    Calling ioctl() to re-read partition table.
    Syncing disks.
    

        b. 格式化磁盘

    [root@localhost data]# mkfs.xfs /dev/sdb1
    meta-data=/dev/sdb1              isize=512    agcount=4, agsize=327616 blks
             =                       sectsz=4096  attr=2, projid32bit=1
             =                       crc=1        finobt=0, sparse=0
    data     =                       bsize=4096   blocks=1310464, imaxpct=25
             =                       sunit=0      swidth=0 blks
    naming   =version 2              bsize=4096   ascii-ci=0 ftype=1
    log      =internal log           bsize=4096   blocks=2560, version=2
             =                       sectsz=4096  sunit=1 blks, lazy-count=1
    realtime =none                   extsz=4096   blocks=0, rtextents=0
    

        c. 挂载磁盘

    [root@localhost data]# ll /dev/disk/by-uuid/*
    lrwxrwxrwx. 1 root root 10 Apr 18 05:35 /dev/disk/by-uuid/5f40a6a2-9d44-4346-a096-8914a822f52a -> ../../sdb1
    
    [root@localhost data]#mkdir /data
    
    [root@localhost data]# vim /etc/fstab 
    UUID=5f40a6a2-9d44-4346-a096-8914a822f52a /data xfs rw,pquota 0 0
    ~
    "/etc/fstab" 13L, 607C written                                                                                                                                                                                             
     
    [root@localhost data]# mount -a
    [root@localhost data]# cat /proc/mounts | grep sdb
    /dev/sdb1 /data xfs rw,seclabel,relatime,attr2,inode64,prjquota 0 0
    

        d. 修改守护进程配置文件

    [root@localhost docker]# vi daemon.json
    {
      "registry-mirrors": ["https://plqjafsr.mirror.aliyuncs.com"],
       "data-root": "/data/docker",
        "storage-driver": "overlay2",
          "overlay2.size=1G"    #要求容器大小不要超过1G
        ]
    }
    ~
    

        e. 验证

    [root@localhost docker]# docker run -it centos /bin/bash
    Unable to find image 'centos:latest' locally
    latest: Pulling from library/centos
    
    Digest: sha256:5528e8b1b1719d34604c87e11dcd1c0a20bedf46e83b5632cdeac91b8c04efc1
    Status: Downloaded newer image for centos:latest
    [root@a9d2544aa25b /]# dd if=/dev/zero of=/test.txt bs=1100M count=1   
    
    dd: error writing '/test.txt': No space left on device
    

      

  • 相关阅读:
    Longest Palindromic Substring
    PayPal MLSE job description
    Continuous Median
    Remove Duplicates From Linked List
    Valid IP Address
    Longest substring without duplication
    Largest range
    Subarray sort
    Multi String Search
    Suffix Trie Construction
  • 原文地址:https://www.cnblogs.com/tortoise512/p/14674529.html
Copyright © 2011-2022 走看看