Cgroup和Namespace在测试中的使用(下)
来源:互联网 发布:家庭用网络交换机 编辑:程序博客网 时间:2024/06/07 04:55
Namespace介绍
使用Namespace又叫做命名空间,可以让每个进程组具有独立的PID、IPC和网络空间等,也就是说这些系统资源不再是全局性的,而是属于特定的Namespace,每个Namespace里面的资源对其他Namespace都是透明的,从而达到资源的隔离效果。
目前namespace的种类如下
可以查看自己的系统支持哪些namespace
各namespace的功能简述如下:
IPC namespaces
在一个 IPC 命名空间里面创建的 IPC 对象对该命名空间内的所有进程可见,但是对其他命名空间不可见。这样就使得不同命名空间之间的进程不能直接通信,就像是在不同的系统里一样。MNT namespaces
MNT namespace是处理挂载点的,可以使不同容器拥有不同的挂载的文件系统和 root 目录。在一个MNT namespace 挂载的文件系统只能被同一个 namespace 里的进程所见。UTS namespaces
UTS namespace提供了主机名和域名的隔离,这样每个容器就可以拥有了独立的主机名和域名,在网络上可以被视作一个独立的节点而非宿主机上的一个进程User namespaces
User namespace是最新的子用户空间,它允许你创建独立于其他namespace之外的用户。这是通过GID和UID映射实现的。PID namespaces
一个PID Namespace为进程提供了一个独立的PID环境,PID Namespace内的PID将从1开始,在Namespace内调用fork,vfork或clone都将产生一个在该Namespace内独立的PID。新创建的Namespace里的第一个进程在该Namespace内的PID将为1,就像一个独立的系统里的init进程一样Network namespaces
主要提供了关于网络资源的隔离,包括网络设备、IPv4和IPv6协议栈、IP路由表、防火墙、/proc/net目录、/sys/class/net目录、端口(socket)等等。一个物理的网络设备最多存在在一个network namespace中,你可以通过创建veth pair(虚拟网络设备对:有两端,类似管道,如果数据从一端传入另一端也能接收到,反之亦然)在不同的network namespace间创建通道,以此达到通信的目的。
一般来说,由于创建namespace需要通过调用系统函数实现,如用clone函数创建一个独立namespace的进程
所以使用上并不平易近人,而Network namespaces可以通过命令配置,且使用的场景较多,故下面详细介绍Network namespaces
Network namespaces简单实战
增加一个network namespace的命令如下
如增加一个名叫mltest的network namespace
查看一下
也可以删除
现在在这个namespace中做下ip addr,发现已默认创建一个回环设备(loopback interface:lo),通用的net namespace下的操作命令为ip netns exec [comand]
这里创建一个网络设备对, 为虚拟设备,用于2个namespace之间的网络通信,可以看到多出了2个设备veth0,veth1
然后将其中一个分配给刚才的namespace,然后在2个namespache下面各有一个虚拟设备
给这2个网络设备用ipconfig命令分配ip
然后namespace mltest的配置基本完成了,在本机已有相同服务的情况下,在namespace里起同样端口的服务也不会有问题
在每块网卡上都能建相同服务
在namespace中也能创建相同服务
本机直接访问毫无压力,显示的是从veth1访问的veth0
但是这里只配置了一对网络设备,多个namespace互相访问或者能够对外访问,就需要利用用网桥或NAT了,需要额外配置
通过网络隔离可以解决例如单机模拟多机部署,多实例同一端口不冲突这样的场景; 由于具有隔离性,某一namespace的route和iptables配置并不影响其他namespace里的应用,做异常测试也很适合。玩法很多,有用来做单机自环测试和openvpn多处理的,
国外有人在net namespace基础上做出一个轻量的了网络模拟器CORE
Namespace参考资料
ntroduction to linux namespaces这个系列写的很棒
总结
粗略的介绍了Cgroup和Namespace的基本概念和使用,可使用的场景很多,本文只是抛砖引玉,希望对大家有所启发
- Cgroup和Namespace在测试中的使用(下)
- Cgroup和Namespace在测试中的使用(下)
- Cgroup和Namespace在测试中的使用(上)
- Cgroup和Namespace在测试中的使用(上)
- linux namespace 和cgroup lxc
- 5.1 linux namespace 和cgroup lxc
- 容器Cgroup和Namespace特性简介
- namespace在大型项目中的使用
- cgroup--cgroup 测试
- CGroup-Namespace-Container
- IT--cgroup--cgroup使用
- docker lxc cgroup namespace入门
- docker lxc cgroup namespace简述
- docker lxc cgroup namespace入门
- Linux PID namespace cgroup namespace container
- C++中的命令空间NameSpace定义和使用
- Scala学习10之在eclipse下使用maven对spark和adam中的scalatest进行测试
- fiddler在测试中的使用
- spring bean加载对象简介
- 【JAVASE_学习笔记】基础知识
- Cgroup和Namespace在测试中的使用(上)
- Keras学习笔记---一
- Oreacle数据库安装
- Cgroup和Namespace在测试中的使用(下)
- homework
- ServerStyle的应用
- 可折叠TextView控件使用:ExpandableTextView
- combogrid实现分页、动态搜索、过滤手动输入
- textarea字数限制
- 使用datatables按自定义条件筛选数据
- NoSQL简介
- EntityTypeConfiguration