亚欧色一区w666天堂,色情一区二区三区免费看,少妇特黄A片一区二区三区,亚洲人成网站999久久久综合,国产av熟女一区二区三区

  • 發布文章
  • 消息中心
點贊
收藏
評論
分享
原創

Docker容器隔離技術

2023-08-10 07:15:13
33
0

在容器里執行top指令,會發現,它顯示的信息是宿主機的CPU和內存數據,而不是當前容器的數據。造成該問題的原因在于,容器通過Cgroups來為容器進程設置資源限制,但是/proc 文件系統并不知道用戶通過Cgroups給這個容器做了什么樣的資源限制,/proc 文件系統不了解Cgroups限制的存在。

# 啟動一個容器
teledb@teledb-XPS-8930:~$ docker run -it -m 256m --memory-swap 256m centos /bin/bash
[root@5dc9ff32e459 /]# top 查看發現并沒有獲取到正確的資源限制

執行top命令查看,發現容器沒有獲取到正確的資源限制

解決思路

宿主機上執行top指令,是從/proc/stats 目錄下獲取數據,所以容器不掛載宿主機的該目錄即可。lxcfs可實現該功能,它將宿主機的/var/lib/lxcfs/proc/meminfo文件掛載到Docker容器的/proc/meminfo 位置后,容器中進程讀取相應文件內容后,lxcfs的fuse實現會從容器對應的Cgroups中讀取正確的內存限制,從而使應用獲取正確的資源約束。

lxcfs安裝

# yum install offline
[ceph@k8s-master lxcfs-4.0.7] sudo yum install -y --downloadonly --downloaddir=/data/tzj/rpm fuse fuse-lib fuse-devel
[ceph@k8s-master lxcfs-4.0.7] sudo yum localinstall /data/tzj/rpm/*.rpm

# make
[ceph@k8s-master lxcfs-4.0.7] cd docker/lxcfs-4.0.7/
[ceph@k8s-master lxcfs-4.0.7] ./configure
[ceph@k8s-master lxcfs-4.0.7] make
[ceph@k8s-master lxcfs-4.0.7] sudo make install

# test
[ceph@k8s-master lxcfs-4.0.7]$ lxcfs -v
4.0.7

隔離測試

[ceph@k8s-master docker] sudo mkdir -p /var/lib/lxcfs
[ceph@k8s-master docker] sudo lxcfs /var/lib/lxcfs
sudo: lxcfs: command not found
# bash -c error too,use root users
[root@k8s-master docker]# lxcfs /var/lib/lxcfs
Running constructor lxcfs_init to reload liblxcfs
mount namespace: 4
hierarchies:
  0: fd:   5: name=systemd
  1: fd:   6: perf_event
  2: fd:   7: memory
  3: fd:   8: cpu,cpuacct
  4: fd:   9: hugetlb
  5: fd:  10: blkio
  6: fd:  11: net_cls,net_prio
  7: fd:  12: cpuset
  8: fd:  13: pids
  9: fd:  14: freezer
 10: fd:  15: devices
Kernel supports swap accounting
api_extensions:
- cgroups
- sys_cpu_online
- proc_cpuinfo
- proc_diskstats
- proc_loadavg
- proc_meminfo
- proc_stat
- proc_swaps
- proc_uptime
- shared_pidns
- cpuview_daemon
- loadavg_daemon
- pidfds

再次運行docker容器

docker run -it centos /bin/bash

通過lxcfs運行

docker run -it -m 256m --memory-swap 256m \
      -v /var/lib/lxcfs/proc/cpuinfo:/proc/cpuinfo:rw \
      -v /var/lib/lxcfs/proc/diskstats:/proc/diskstats:rw \
      -v /var/lib/lxcfs/proc/meminfo:/proc/meminfo:rw \
      -v /var/lib/lxcfs/proc/stat:/proc/stat:rw \
      -v /var/lib/lxcfs/proc/swaps:/proc/swaps:rw \
      -v /var/lib/lxcfs/proc/uptime:/proc/uptime:rw \
      centos /bin/bash

執行top命令,成功獲取到正確的資源限制

0條評論
0 / 1000
福爾摩斯軍
8文章數
0粉絲數
福爾摩斯軍
8 文章 | 0 粉絲
福爾摩斯軍
8文章數
0粉絲數
福爾摩斯軍
8 文章 | 0 粉絲
原創

Docker容器隔離技術

2023-08-10 07:15:13
33
0

在容器里執行top指令,會發現,它顯示的信息是宿主機的CPU和內存數據,而不是當前容器的數據。造成該問題的原因在于,容器通過Cgroups來為容器進程設置資源限制,但是/proc 文件系統并不知道用戶通過Cgroups給這個容器做了什么樣的資源限制,/proc 文件系統不了解Cgroups限制的存在。

# 啟動一個容器
teledb@teledb-XPS-8930:~$ docker run -it -m 256m --memory-swap 256m centos /bin/bash
[root@5dc9ff32e459 /]# top 查看發現并沒有獲取到正確的資源限制

執行top命令查看,發現容器沒有獲取到正確的資源限制

解決思路

宿主機上執行top指令,是從/proc/stats 目錄下獲取數據,所以容器不掛載宿主機的該目錄即可。lxcfs可實現該功能,它將宿主機的/var/lib/lxcfs/proc/meminfo文件掛載到Docker容器的/proc/meminfo 位置后,容器中進程讀取相應文件內容后,lxcfs的fuse實現會從容器對應的Cgroups中讀取正確的內存限制,從而使應用獲取正確的資源約束。

lxcfs安裝

# yum install offline
[ceph@k8s-master lxcfs-4.0.7] sudo yum install -y --downloadonly --downloaddir=/data/tzj/rpm fuse fuse-lib fuse-devel
[ceph@k8s-master lxcfs-4.0.7] sudo yum localinstall /data/tzj/rpm/*.rpm

# make
[ceph@k8s-master lxcfs-4.0.7] cd docker/lxcfs-4.0.7/
[ceph@k8s-master lxcfs-4.0.7] ./configure
[ceph@k8s-master lxcfs-4.0.7] make
[ceph@k8s-master lxcfs-4.0.7] sudo make install

# test
[ceph@k8s-master lxcfs-4.0.7]$ lxcfs -v
4.0.7

隔離測試

[ceph@k8s-master docker] sudo mkdir -p /var/lib/lxcfs
[ceph@k8s-master docker] sudo lxcfs /var/lib/lxcfs
sudo: lxcfs: command not found
# bash -c error too,use root users
[root@k8s-master docker]# lxcfs /var/lib/lxcfs
Running constructor lxcfs_init to reload liblxcfs
mount namespace: 4
hierarchies:
  0: fd:   5: name=systemd
  1: fd:   6: perf_event
  2: fd:   7: memory
  3: fd:   8: cpu,cpuacct
  4: fd:   9: hugetlb
  5: fd:  10: blkio
  6: fd:  11: net_cls,net_prio
  7: fd:  12: cpuset
  8: fd:  13: pids
  9: fd:  14: freezer
 10: fd:  15: devices
Kernel supports swap accounting
api_extensions:
- cgroups
- sys_cpu_online
- proc_cpuinfo
- proc_diskstats
- proc_loadavg
- proc_meminfo
- proc_stat
- proc_swaps
- proc_uptime
- shared_pidns
- cpuview_daemon
- loadavg_daemon
- pidfds

再次運行docker容器

docker run -it centos /bin/bash

通過lxcfs運行

docker run -it -m 256m --memory-swap 256m \
      -v /var/lib/lxcfs/proc/cpuinfo:/proc/cpuinfo:rw \
      -v /var/lib/lxcfs/proc/diskstats:/proc/diskstats:rw \
      -v /var/lib/lxcfs/proc/meminfo:/proc/meminfo:rw \
      -v /var/lib/lxcfs/proc/stat:/proc/stat:rw \
      -v /var/lib/lxcfs/proc/swaps:/proc/swaps:rw \
      -v /var/lib/lxcfs/proc/uptime:/proc/uptime:rw \
      centos /bin/bash

執行top命令,成功獲取到正確的資源限制

文章來自個人專欄
文章 | 訂閱
0條評論
0 / 1000
請輸入你的評論
0
0