LXC(全称是 Linux Container)是 Linux 上容器技术的鼻祖。LXC 是 Linux 内核容器化特性的用户名接口,可以让使用者轻松的创建和管理系统级和应用级容器。
LXC 的官方网站:
https://linuxcontainers.org/LXC 主要包括一个 liblxc 库,和各种语言的 API 接口:C、Python、Lua、Go、Ruby 等等。
LXC 主要通过下列内核特性来支持容器:
①Kernel namespaces (ipc, uts, mount, pid, network and user)
② Apparmor and SELinux profiles
③ S流量套餐eccomp policies
④ Chroots (using pivot_root)
⑤ Kernel capabilities
⑥ CGroups (control groups)
其中,容器中最为主要的3个特性是: Chroot、Namespace和CGroups。
1、Chroot:创建一个虚拟的根目录文件系统,跟其他容器的虚拟文件系统隔离;
2、Namespace:命名空间为各个容器提供相互隔离的资源空间,主要有以下命名空间:
3、UTS(uname):每个容器拥有独立的hostname和domain name,使其在网络上可以被视作一个独立的节点而非 Host 上的一个进程,其中包括:
① PI流量套餐D:隔离容器的进程资源。各个 namespace 只能看到自己的进程,都有自己的 pid 为 1 的进程;各个 namespace 中可以有pid 相同的进程,但进程之间没有任何关系,互不冲突影响。
② IPC(进程间通信):对 Linux 上进程间通信的资源进行隔离,包括信号量、消息队列、共享内存等;
③ NS(mnt):文件系统隔离。容器在 chroot 之后限制了进程只能读写指定的目录,NS 的 namespace 则是文件的挂载和卸载只跟 namespace 有关系,跟其他的 namespace 是无关的。
④ NET:网络隔离。每个 net namespace 有独立的 network d流量套餐evices、IP addresses、IP routing tables等。
⑤ User:每个 container 可以有不同的 user 和 group id,也就是说可以以container内部的用户在container内部执行程序而非 Host 上的用户。
3、Cgroups(control groups):实现了对容器的资源分配与控制。可以控制分配给单个进程和多个进程的资源,并可以对 cpu、memory 等进行精细化控制。每种精细化控制的资源可以定义为一个子系统:
① cpu 子系统: 主要限制进程 cpu 的使用率,也可以理解为限制分配给 cpu 的 core。
② cpuacct 子流量套餐系统:统计每个进程 cpu 使用率的报告,如果达到预定的上限,可以采取一定的措施。
③ cpuset 子系统:定义了有几个 CPU 可以被这个 group 使用,或者哪几个 CPU 可以供这个 group 使用。在某些场景下,单 CPU绑定可以防止多核间缓存切换,从而提高效率。
④ memery 子系统:可以限制进程 memery 最大的使用量。
⑤ blkio 子系统:block IO 相关的统计和限制,byte/operation统计和限制(IOPS 等),读写速度限制等。
⑥ device 子系统:可以控制访问的设备。
⑦ net_cls 子系统:标记 cgroups 中的网络数据包,然后可以使用流量套餐 tc 模块(traffice control) 系统对数据包进行控制;比如 namespace NET 的可以通过这个系统让 namespace 内进程可以独立进行网络通信,功能类似于自己单独的网卡、单独的带宽。
⑧ freezer 子系统,可以stop或者start cgroups 管理的进程,就是监控进程的状态,如果设置了一直是 start 状态,就去确定环境是否是 ok,如果 ok 就启动服务。
⑨ ns 子系统:可以控制 cgroup 的进程访问不同的 namespace;这个配合 namespace 的功能实现容器的隔离效果。
Linux Container 系统中,除了 LXC,还有 流量套餐LXD 和 LXCFS。很多人把 LXC 和 LXD 混为一谈,其实两者是不一样的。LXD 是 LXC 之上的容器管理器,通过 liblxc 和其 Go 语言接口来创建和管理容器。
LXD 的官方网站:
https://linuxcontainers.org/lxd/LXD 的核心是一个特权守护程序,通过 liblxc 和其 Go 语言接口来创建和管理容器。同时,它可以通过本地 unix 套接字、或网络,对外暴露 REST API 接口。
关注“架构师技术联盟”公众号,即可实时了解最新技术内容和文章。
友情提醒: 请添加客服微信进行免费领取流量卡!
QQ交流群:226333560 站长微信:qgzmt2
原创文章,作者:sunyaqun,如若转载,请注明出处:https://www.dallk.cn/56850.html