开发运维问题:
1.应用与运行环境分开交付,无法保证环境的一致性
2.资源、环境的隔离问题
3.之前已有大量的探索,例如虚拟机层面的隔离,应用层面的隔离等,探索追求更好的隔离性、更高的资源利用率及启动时间
在linux中,容器技术是一种进程隔离的技术,应用可以运行在一个个相互隔离的容器中,与虚拟机相同的是,可以为这些容器设置计算资源限制,挂载存储,连接网络,而与虚拟机不同的是,这些应用运行时共用着一个kernel。
这些技术的基础就是linux的LXC(Linux Container),通过将Cgoups的资源管理能力和Linux Namespace的隔离能力组合在一起
Linux内核最新支持的8种名称空间
Linux Namespace提供了一种内核级别隔离系统资源的方法,通过将系统的全局资源放在不同的Namespace中,来实现资源隔离的目的。不同Namespace的程序,可以享有一份独立的系统资源。
linux最新内核支持8种名称空间:mount uts ipc pid network user cgroup time
查看linux内核版本及名称空间
[root@base ~]# uname -a
Linux base.ocp.example.com 3.10.0-693.el7.x86_64 #1 SMP Tue Aug 22 21:09:27 UTC 2017 x86_64 x86_64 x86_64 GNU/Linux
[root@base ~]# uname -r
3.10.0-693.el7.x86_64
[root@base ~]# cat /etc/redhat-release
CentOS Linux release 7.4.1708 (Core)
[root@base ~]# ll /proc/727/ns
total 0
lrwxrwxrwx 1 root root 0 Oct 14 19:43 ipc -> ipc:[4026531839]
lrwxrwxrwx 1 root root 0 Oct 14 19:43 mnt -> mnt:[4026531840]
lrwxrwxrwx 1 root root 0 Oct 14 19:43 net -> net:[4026531956]
lrwxrwxrwx 1 root root 0 Oct 14 19:43 pid -> pid:[4026531836]
lrwxrwxrwx 1 root root 0 Oct 14 19:43 user -> user:[4026531837]
lrwxrwxrwx 1 root root 0 Oct 14 19:43 uts -> uts:[4026531838]
Cgroups
cgroups包含哪些子系统:cpu、memory、devices系统
blkio | 为块设备设定输入/输出限制。比如物理设备(磁盘,固态硬盘,USB等等) |
---|---|
cpu | 使用调度程序提供对cpu的cgroup任务访问 |
cpuacct | 自动生成cgroup中任务所使用的cpu报告 |
cpuset | 为cgroup中的任务分配独立cpu(在多核系统)和内存节点 |
devices | 允许或者拒绝cgroup中的任何访问设备 |
freezer | 挂起或者恢复cgroup中的任务 |
memory | 设定cgroup中任务使用的内存限制,并自动生成由那些任务使用的内存资源报告 |
net_cls | 使用等级识别符(classid)标记网络数据包,可允许Linux、流量控制程序(tc)识别从具体cgroup中生成的数据包 |