LXCFS的工作原理和部署方法
admin
2023-02-03 10:21:21
0次

1.技术背景;

    Linuxs利用Cgroup实现了对容器的资源限制,但在容器内部依然缺省挂载了宿主机上的procfs的/proc目录,其包含如:meminfo, cpuinfo,stat, uptime等资源信息。一些监控工具如free/top或遗留应用还依赖上述文件内容获取资源配置和使用情况。当它们在容器中运行时,就会把宿主机的资源状态读取出来,引起错误和不便。


2.LXCFS简介 

  CNCF社区中常见的做法是利用 lxcfs来提供容器中的资源可见性。lxcfs 是一个开源的FUSE(用户态文件系统)实现来支持LXC容器,它也可以支持Docker容器。

 githup网站:https://github.com/lxc/lxcfs

 LXCFS通过用户态文件系统,在容器中提供下列 procfs 的文件。

/proc/cpuinfo
/proc/diskstats
/proc/meminfo
/proc/stat
/proc/swaps
/proc/uptime

 

3.LXCFS工作示意图:

LXCFS的工作原理和部署方法   

比如,把宿主机的 /var/lib/lxcfs/proc/memoinfo 文件挂载到Docker容器的/proc/meminfo位置后。容器中进程读取相应文件内容时,LXCFS的FUSE实现会从容器对应的Cgroup中读取正确的内存限制。从而使得应用获得正确的资源约束设定


4.Docker 实战提升容器资源可见性;

注:

本文采用CentOS 7.2 作为测试环境,并已经开启FUSE模块支持。


fuse用途:

传统的文件系统是操作系统的一部分,放在操作系统内核里面实现。Fuse(Filesystem in Userspace), 一个用户空间文件系统框架,提供给我们一组用于实现一个文件系统的API,使我们可以在用户态实现自已的文件系统。


Docker for Mac/Minikube等开发环境由于采用高度剪裁过的操作系统,无法支持FUSE,并运行LXCFS进行测试。
安装 lxcfs 的RPM包


4.1.环境信息:


系统版本内核版本软件依赖软件版本备注说明



CentOS Linux 7.2.151



3.10.0-1062.4.1.el7.x86_64

fuse-libs

fuse

fuse-devel

fuse-devel-2.9.2-7.el7.x86_64

fuse-libs-2.9.2-7.el7.x86_64

fuse-2.9.2-7.el7.x86_64


用户态实现自已的文件系统。

dockerdocker-1.13.1-102.git7f2769b.el7.centos.x86_64docker服务
lxcfslxcfs-3.1.2-0.2.el7.x86_64.rpmLXCFS主程序软件包


4.2 安装依赖获取软件包并启动服务

yum -y install fuse-devel fuse docker lxc-templates 
wget https://copr-be.cloud.fedoraproject.org/results/ganto/lxc3/epel-7-x86_64/01041891-lxcfs/lxcfs-3.1.2-0.2.el7.x86_64.rpm
rpm -ivh lxcfs-3.1.2-0.2.el7.x86_64.rpm
systemctl start docker
lxcfs /var/lib/lxcfs &


4.3 运行docker 测试镜像

docker run -itd -m 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  \  
ubuntu:16.04 /bin/bash

注意:

container_linux.go:247: starting container process caused "process_linux.go:258: applying cgroup configuration for process caused \"Cannot set property TasksAccounting, or unknown property.\""/usr/bin/docker-current: Error response from daemon: oci runtime error: container_linux.go:247: starting container process caused "process_linux.go:258: applying cgroup configuration for process caused \"Cannot set property TasksAccounting, or unknown property.\"".

解决:主要原因还是centos系统版本兼容性问题,如果将系统做更新升级

yum update 


4.4 查询实验结果;

(1).设置过lxcfs 容器和设置lxcfs 对比  内存对比

LXCFS的工作原理和部署方法


(2).未进行设置容器;

LXCFS的工作原理和部署方法


(1).设置过lxcfs 容器和设置lxcfs 对比  uptime 对比;

LXCFS的工作原理和部署方法



5.Kubernetes 实战提升容器资源可见性;


一些同学问过如何在Kubernetes集群环境中使用lxcfs,我们将给大家一个示例方法供参考。

首先我们要在集群节点上安装并启动lxcfs,我们将用Kubernetes的方式,用利用容器和DaemonSet方式来运行 lxcfs FUSE文件系统。

通过Github上获得

git clone https://github.com/denverdino/lxcfs-initializer
cd lxcfs-initializer

相关内容

热门资讯

空调连续工作多久需要停机休息 空调连续工作的时间取决于多个因素,包括空调的型号、功率、使用环境和维护情况等。一般来说,空调可以连续...
空调哪个符号是除湿的 空调除湿功能通常用一个水滴形状的符号表示。不同品牌和型号的空调遥控器可能会有所差异,但一般来说,除湿...
格力空调多长时间加一次氟利昂 1、一般情况下,空调对氟利昂的使用量是非常小的,所以在空调使用了四年左右的时候再考虑加也没问题。2、...
空调用多长时间需要加氟一次 一般情况下是五年。当出现以下这几种情况时,空调才需要加氟。1、空调的室内机和室外机各有两个接口,当接...
格调生活·C标思享荟:卡萨帝在... 9月12日的郑州龙湖金融岛,夜风轻拂,灯光璀璨。“C标时刻共传奇——卡萨帝思享荟暨20周年品牌盛典郑...
品牌价值破千亿、高端份额持续领... 9月12日,“C标时刻共传奇——卡萨帝思享荟暨20周年品牌盛典郑州站”在郑州龙湖金融岛举办。2026...
空调主板坏了修800还是换新的 空调主板坏了是修还是换新,需要考虑多个因素,以下是一些建议:1. 维修成本:如果维修费用较低,比如 ...
空调开多久需要休息多长时间 问题:空调开多久需要休息多长时间回答:1、在使用空调的过程中,一般空调开7~8个小时左右需要休息2~...
中央空调多长时间清洗一次 1、一般空调开机前清洗一次即可,空调开机中间时段再清洗一次,空调关机时清洗一次,这样比较合理。2、空...
中央空调氟利昂多久加一次 看空调制热和制冷程度,很多人的观点认为氟利昂必须一年放一次,其实这个观点是错误的,理解上面有点偏差,...