技术解析系列| PouchContainer支持LXCFS实现高可靠容器隔离


技术解析系列| PouchContainer支持LXCFS实现高可靠容器隔离




<节> <节> <节> <节> <节> <节> <节> 技术解析系列| PouchContainer支持LXCFS实现高可靠容器隔离 <节> <节> <节>

<强>

本周起PouchContainer启动核心技术专家解析系列文章,第一篇文章将深入剖析LXCFS适用业务场景和原理,对LXCFS感兴趣的同学不要错过



PouchContainer是阿里巴巴开源的一款容器运行时产品,当前最新版本是0.3.0,代码地址位于:.PouchContainer从设计之初即支持LXCFS,实现高可靠容器隔离.Linux使用cgroup技术实现资源隔离,然而容器内仍然挂载宿主机的/proc文件系统,用户在容器内读?proc/meminfo等文件时,获取的是宿主机的信息。容器内缺少的,<代码>/proc视图隔离> /proc视图隔离问题,使容器在表现层上更像传统的虚拟机。本文首先介绍LXCFS适用业务场景,,,剖析LXCFS,,,,最后简要介绍LXCFS在PouchContainer内部集成的工作。

在物理机和虚拟机时代,公司内部逐渐形成了自己的一套工具链,诸如编译打包,应用部署,统一监控等,这些工具已经为部署在物理机和虚拟机中的应用提供了稳定的服务。接下来将从监控,运维工具,应用部署等方面详细阐述LXCFS在上述业务容器化过程中发挥的作用。

大部分的监控工具,依赖/proc文件系统获取系统信息。以阿里巴巴为例,阿里巴巴的部分基础监控工具是通过沙皇()收集信息。而沙皇对内存,CPU信息的收集,依赖/proc文件系统。我们可以下载沙皇的源码,查看沙皇对/proc目录下一些文件的使用:

 <代码类=" ">美元git远程- v 
的起源,起源,https:
,,https:
$ grep - r cpuinfo。
/模块/mod_cpu。c:,,((ncpufp=fopen ())==) {
:沙皇莱蒂$ grep - r meminfo。
/include/定义。h: MEMINFO
/include/: MEMINFO
/info.md:内存的计数器在/proc/MEMINFO,里面有一些关键项/模块/mod_proc
。c:,
。/模块/mod_proc。c:,,fp=fopen ();
/模块/mod_swap。c: *从/proc/vmstat读取交换统计
,/proc/meminfo。
/模块/mod_swap。c:,,
$ grep - r diskstats。
/include/: DISKSTATS
/info.md: IO的计数器文件是:/proc/DISKSTATS,比如:
/模块/mod_io。c: IO_FILE
/模块/mod_io。c:文件* iofp;,,,,,,,,,,

/模块/mod_io。c:,,handle_error (, ! iofp);

可以看的到,沙皇对进程,IO, CPU的监控都依赖/proc文件系统。

当容器内/proc文件系统提供的是宿主机资源信息时,这类监控不能监控容器内信息。为了满足业务需求,需要适配容器监控,甚至需要单独为容器内监控开发另一套监控工具。这种改变势必会拖慢甚至阻碍企业现存业务容器化的步伐,容器技术要尽可能兼容公司原有的工具链,兼顾工程师的使用习惯。

PouchContainer支持LXCFS可以解决上述问题,依赖/proc文件系统的监控,运维工具,部署在容器内或宿主机上对工具是透明的,现存监控,运维工具无需适配或重新开发,即可平滑迁移到容器内,实现容器内的监控和运维。

接下来让我们从实例中直观感受一下,在一台Ubuntu虚拟机中安装PouchContainer 0.3.0:

 <代码类=" "> 
p4 . .——通用

systemd拉起pouchd,默认不开启LXCFS,此时创建的容器无法使用LXCFS的功能,我们看一下容器内相关/proc文件的内容:

 <代码类=" "> 







2594341.81 - 2208722.33

/





/
2594376.56 - 2208749.32

可以看的到,在容器内看到的/proc/meminfo,正常运行时间文件的输出与宿主机一致,虽然启动容器的时候指定了内存为50米,/proc/meminfo文件并未体现出容器内的内存限制。

在宿主机内启动LXCFS服务,手动拉起pouchd进程,并指定相应的LXCFS相关参数:

 <代码类=" "> 

[]

根,,,,,,:哦?,,,,
::/usr/bin/lxcfs//lib/lxcfs/
根,,,,:pts/,
::汽车lxcfs grep——颜色=
根,,,:pts/,
:: pouchd - d——enable-lxcfs lxcfs/usr/bin/lxcfs

启动容器,获取相应的文件内容:

 <代码类=" "> 
/





/
10.00 - 10.00

技术解析系列| PouchContainer支持LXCFS实现高可靠容器隔离