开发运维问题:
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
图片.png

查看linux内核版本及名称空间

  1. [root@base ~]# uname -a
  2. 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
  3. [root@base ~]# uname -r
  4. 3.10.0-693.el7.x86_64
  5. [root@base ~]# cat /etc/redhat-release
  6. CentOS Linux release 7.4.1708 (Core)
  7. [root@base ~]# ll /proc/727/ns
  8. total 0
  9. lrwxrwxrwx 1 root root 0 Oct 14 19:43 ipc -> ipc:[4026531839]
  10. lrwxrwxrwx 1 root root 0 Oct 14 19:43 mnt -> mnt:[4026531840]
  11. lrwxrwxrwx 1 root root 0 Oct 14 19:43 net -> net:[4026531956]
  12. lrwxrwxrwx 1 root root 0 Oct 14 19:43 pid -> pid:[4026531836]
  13. lrwxrwxrwx 1 root root 0 Oct 14 19:43 user -> user:[4026531837]
  14. 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中生成的数据包