千家信息网

LXCFS的工作原理和部署方法

发表于:2025-02-03 作者:千家信息网编辑
千家信息网最后更新 2025年02月03日,1.技术背景;Linuxs利用Cgroup实现了对容器的资源限制,但在容器内部依然缺省挂载了宿主机上的procfs的/proc目录,其包含如:meminfo, cpuinfo,stat, uptime
千家信息网最后更新 2025年02月03日LXCFS的工作原理和部署方法

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工作示意图:

比如,把宿主机的 /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.rpmrpm -ivh lxcfs-3.1.2-0.2.el7.x86_64.rpmsystemctl start dockerlxcfs /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 对比 内存对比


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


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



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


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

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

通过Github上获得

git clone https://github.com/denverdino/lxcfs-initializercd lxcfs-initializer
容器 系统 文件 资源 用户 版本 环境 软件 支持 操作系统 宿主 测试 运行 信息 内存 内容 内核 实战 宿主机 方式 数据库的安全要保护哪些东西 数据库安全各自的含义是什么 生产安全数据库录入 数据库的安全性及管理 数据库安全策略包含哪些 海淀数据库安全审计系统 建立农村房屋安全信息数据库 易用的数据库客户端支持安全管理 连接数据库失败ssl安全错误 数据库的锁怎样保障安全 济南软件开发哪些企业比较好 数据库没错为啥登录不进去 山东企业软件开发服务费 江西浪潮服务器维修技术虚拟主机 兰州软件开发如何 正当防卫4一直提示我连接服务器 常州蔬菜配送软件开发 硬盘在服务器能用多小小时 违反网络安全法规的案例 属于软件开发工具的是 软件开发行业有什么价值 荣耀服务器32g内存 娱乐游戏软件开发 神灯互联网科技有限公司 四川科技互联网平台公司 企业是否可以建设微型数据库 软件开发企业税收优惠 戴尔从服务器还原系统 数据库mysql技术与应用答案 宁夏联想服务器虚拟化多少钱 网络安全监测装置二次安防 职业学校学计算机网络技术怎么样 卡巴服务器 微信数据库数据恢复软件 计算机数据库好吗 江苏省十四五网络安全发展规划 远程连接复制粘贴数据库 软件开发流程管理系统规范 网络安全留学性价比学校 小型互联网科技公司怎么赚钱
0