日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

Docker容器之cgroup搭建

發布時間:2024/3/13 编程问答 31 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Docker容器之cgroup搭建 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

一、知識剖析

  • 什么是cgroup
    • Cgroups 是 control groups 的縮寫,是 Linux 內核提供的一種可以限制、記錄、隔離進程組(process groups)所使用的物理資源(如:cpu,memory,IO等等)的機制。最初由 google 的工程師提出,后來被整合進 Linux 內核。Cgroups 也是 LXC 為實現虛擬化所使用的資源管理手段,可以說沒有cgroups就沒有LXC。
  • cgroup可以干什么
    • 限制進程組可以使用的資源數量(Resource limiting )。比如:memory子系統可以為進程組設定一個memory使用上限,一旦進程組使用的內存達到限額再申請內存,就會出發OOM(out of memory)。

    • 進程組的優先級控制(Prioritization )。比如:可以使用cpu子系統為某個進程組分配特定cpu share。

    • 記錄進程組使用的資源數量(Accounting )。比如:可以使用cpuacct子系統記錄某個進程組使用的cpu時間

    • 進程組隔離(Isolation)。比如:使用ns子系統可以使不同的進程組使用不同的namespace,以達到隔離的目的,不同的進程組有各自的進程、網絡、文件系統掛載空間。

    • 進程組控制(Control)。比如:使用freezer子系統可以將進程組掛起和恢復。

  • cgroup中需要了解的四個概念
    • Subsystems: 稱之為子系統,一個子系統就是一個資源控制器,比如 cpu子系統就是控制cpu時間分配的一個控制器。
    • Hierarchies: 可以稱之為層次體系也可以稱之為繼承體系,指的是Control Groups是按照層次體系的關系進行組織的。
    • Control Groups: 一組按照某種標準劃分的進程。進程可以從一個Control Groups遷移到另外一個Control Groups中,同時Control Groups中的進程也會受到這個組的資源限制。
    • Tasks: 在cgroups中,Tasks就是系統的一個進程。

    二、cgroup的部署

    • 此實驗是基于docker已經安裝好的基礎上,且使用的系統是rhel7.3
    • 對cpu內存的限制
  • 打開docker并檢測cgroup是否開啟
  • [root@foundation19 ~]# systemctl start docker [root@foundation19 ~]# mount -t cgroup ##都顯示on即可
  • 查看cgroup子系統的層級路徑
  • [root@foundation19 ~]# cd /sys/fs/cgroup/ [root@foundation19 cgroup]# ll total 0 drwxr-xr-x. 5 root root 0 Mar 23 08:57 blkio lrwxrwxrwx. 1 root root 11 Mar 23 08:57 cpu -> cpu,cpuacct lrwxrwxrwx. 1 root root 11 Mar 23 08:57 cpuacct -> cpu,cpuacct drwxr-xr-x. 5 root root 0 Mar 23 08:57 cpu,cpuacct drwxr-xr-x. 3 root root 0 Mar 23 08:57 cpuset drwxr-xr-x. 5 root root 0 Mar 23 08:57 devices drwxr-xr-x. 3 root root 0 Mar 23 08:57 freezer drwxr-xr-x. 3 root root 0 Mar 23 08:57 hugetlb drwxr-xr-x. 5 root root 0 Mar 23 08:57 memory lrwxrwxrwx. 1 root root 16 Mar 23 08:57 net_cls -> net_cls,net_prio drwxr-xr-x. 3 root root 0 Mar 23 08:57 net_cls,net_prio lrwxrwxrwx. 1 root root 16 Mar 23 08:57 net_prio -> net_cls,net_prio drwxr-xr-x. 3 root root 0 Mar 23 08:57 perf_event drwxr-xr-x. 3 root root 0 Mar 23 08:57 pids drwxr-xr-x. 5 root root 0 Mar 23 08:57 systemd
  • 建立一個CPU控制族群
    • 首先進入cpu子系統對應的層級路徑下:cd /sys/fs/cgroup/cpu
    • 通過新建文件夾創建一個cpu控制族群:mkdir x1,即新建了一個cpu控制族群:x1
    • 新建x1之后,可以看到目錄下自動建立了相關的文件,這些文件是偽文件。
    [root@foundation19 cgroup]# cd cpu [root@foundation19 cpu]# ls cgroup.clone_children cpuacct.usage cpu.rt_runtime_us release_agent cgroup.event_control cpuacct.usage_percpu cpu.shares system.slice cgroup.procs cpu.cfs_period_us cpu.stat tasks cgroup.sane_behavior cpu.cfs_quota_us docker user.slice cpuacct.stat cpu.rt_period_us notify_on_release [root@foundation19 cpu]# mkdir x1 [root@foundation19 cpu]# cd x1/ [root@foundation19 x1]# ll total 0 -rw-r--r--. 1 root root 0 Mar 23 10:18 cgroup.clone_children --w--w--w-. 1 root root 0 Mar 23 10:18 cgroup.event_control -rw-r--r--. 1 root root 0 Mar 23 10:18 cgroup.procs -r--r--r--. 1 root root 0 Mar 23 10:18 cpuacct.stat -rw-r--r--. 1 root root 0 Mar 23 10:18 cpuacct.usage -r--r--r--. 1 root root 0 Mar 23 10:18 cpuacct.usage_percpu -rw-r--r--. 1 root root 0 Mar 23 10:18 cpu.cfs_period_us -rw-r--r--. 1 root root 0 Mar 23 10:18 cpu.cfs_quota_us -rw-r--r--. 1 root root 0 Mar 23 10:18 cpu.rt_period_us -rw-r--r--. 1 root root 0 Mar 23 10:18 cpu.rt_runtime_us -rw-r--r--. 1 root root 0 Mar 23 10:18 cpu.shares -r--r--r--. 1 root root 0 Mar 23 10:18 cpu.stat -rw-r--r--. 1 root root 0 Mar 23 10:18 notify_on_release -rw-r--r--. 1 root root 0 Mar 23 10:18 tasks
  • 測試限制cpu的使用
    • 我們的測試示例主要用到cpu.cfs_period_us和cpu.cfs_quota_us兩個文件。
    • cpu.cfs_period_us:cpu分配的周期(微秒),默認為100000。
    • cpu.cfs_quota_us:表示該control group限制占用的時間(微秒),默認為-1,表示不限制。如果設為20000,表示占用20000/100000=20%的CPU。
    [root@foundation19 x1]# cat cpu.cfs_period_us 100000 [root@foundation19 x1]# cat cpu.cfs_quota_us ##默認為-1,表示不限制 -1[root@foundation19 x1]# echo 20000 > cpu.cfs_quota_us [root@foundation19 x1]# cat cpu.cfs_quota_us 20000 [root@foundation19 x1]# dd if=/dev/zero of=/dev/null & [1] 5548
  • 此時用top查看
    • 查看占用了百分之100
    • 按1查看
  • 創建一個容器,并限制cpu的使用
  • [root@foundation19 x1]# echo 5548 > tasks [root@foundation19 x1]# fg dd if=/dev/zero of=/dev/null ^C456424541+0 records in 456424541+0 records out 233689364992 bytes (234 GB) copied, 201.225 s, 1.2 GB/s[root@foundation19 x1]# docker rm vm1 vm1 [root@foundation19 x1]# docker run -it --name vm1 --cpu-quota=20000 ubuntu root@59cc642e2e74:/# dd if=/dev/zero of=/dev/null
    • 再開一個shell查看 top > cpu 使用率20%
    • 不做限制則為100%
    [root@foundation19 x1]# docker run -it --name vm1 ubuntu root@b57de623c536:/# dd if=/dev/zero of=/dev/null

    [root@foundation19 cpu]# pwd /sys/fs/cgroup/cpu [root@foundation19 cpu]# cd docker [root@foundation19 docker]# ls 40036f2187cf8787924db508068bdfb10955d31e5c2cb6baa622afc80adba20a [root@foundation19 docker]# cd 40036f2187cf8787924db508068bdfb10955d31e5c2cb6baa622afc80adba20a [root@foundation19 40036f2187cf8787924db508068bdfb10955d31e5c2cb6baa622afc80adba20a]# cat cpu.cfs_quota_us 20000 ##顯示剛才所設置的大小
    • 限制寫入速度
  • 首先可以查看一下分區
  • [root@foundation19 ~]# docker run -it --rm --privileged=true ubuntu root@0dacba0df90d:/# fdisk -lDisk /dev/sda: 320.1 GB, 320072933376 bytes 255 heads, 63 sectors/track, 38913 cylinders, total 625142448 sectors Units = sectors of 1 * 512 = 512 bytes Sector size (logical/physical): 512 bytes / 512 bytes I/O size (minimum/optimal): 512 bytes / 512 bytes Disk identifier: 0x00023675Device Boot Start End Blocks Id System /dev/sda1 * 2048 613081087 306539520 83 Linux /dev/sda2 613081088 625141759 6030336 82 Linux swap / Solaris
  • 測試
  • [root@foundation19 ~]# docker run -it --rm --device-write-bps /dev/sda:30M ubuntu ##寫入速度為每秒30M root@9810eb110add:/# dd if=/dev/zero of=file bs=1M count=300

    • 限制內存的占用
    • 此實驗是新開了一個虛擬機,不想對物理機做過多的更改
  • 虛擬機安裝docker并開啟,下載軟件
  • [root@docker1 ~]# systemctl start docker [root@docker1 ~]# yum install -y lxcfs-2.0.5-3.el7.centos.x86_64.rpm [root@docker1 ~]# cd /var/lib/lxcfs/ [root@docker1 lxcfs]# ls [root@docker1 lxcfs]# cd [root@docker1 ~]# lxcfs /var/lib/lxcfs/ & [1] 1197 [root@docker1 ~]# hierarchies:0: fd: 5: perf_event1: fd: 6: devices2: fd: 7: freezer3: fd: 8: net_prio,net_cls4: fd: 9: cpuset5: fd: 10: pids6: fd: 11: hugetlb7: fd: 12: memory8: fd: 13: cpuacct,cpu9: fd: 14: blkio10: fd: 15: name=systemd
  • 測試
    • 查看初始狀態
    [root@docker1 ~]# cd /var/lib/lxcfs/ [root@docker1 lxcfs]# ls cgroup proc [root@docker1 lxcfs]# cd proc/ [root@docker1 proc]# ls cpuinfo diskstats meminfo stat swaps uptime##不設置的時候和虛擬機的內存是一樣的 [root@docker1 proc]# free -mtotal used free shared buff/cache available Mem: 992 124 543 6 325 713 Swap: 2047 0 2047[root@docker1 proc]# docker run -it --name vm1 ubuntu root@20f6cdfa82f1:/# free -mtotal used free shared buffers cached Mem: 992 460 532 6 0 290 -/+ buffers/cache: 169 823 Swap: 2047 0 2047

    • 設置內存占用為200m
    [root@docker1 proc]# docker run -it --name vm1 -m 200m -v /var/lib/lxcfs/proc/cpuinfo:/proc/cpuinfo \ > -v /var/lib/lxcfs/proc/diskstats:/proc/diskstats \ > -v /var/lib/lxcfs/proc/meminfo:/proc/meminfo \ > -v /var/lib/lxcfs/proc/stat:/proc/stat \ > -v /var/lib/lxcfs/proc/swaps:/proc/swaps \ > -v /var/lib/lxcfs/proc/uptime:/proc/uptime \ > ubuntu root@322f87592f39:/# free -m

    總結

    以上是生活随笔為你收集整理的Docker容器之cgroup搭建的全部內容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。