前言

在私有云的容器化过程中,我们并不是白手起家开始的。而是接入了公司已经运行了多年的多个系统,包括自动编译打包,自动部署,日志监控,服务治理等等系统。在容器化之前,基础设施主要以物理机和虚拟机为主。因此,我们私有云落地的主要工作是基础设施容器化,同时在应用的运维方面,兼用了之前的配套系统。利用之前的历史系统有利有弊,这些后面再谈。在这里我主要同大家分享一下在容器化落地实践中的一些经验和教训。

容器与虚拟机

当我们向别人讲述什么是容器的时候,常常用虚拟机作类比。在给用户进行普及的时候,我们可以告诉他,容器是一种轻量级的虚拟机。但是在真正的落地实践的时候,我们要让用户明白这是容器,而不是虚拟机。这两者是有本质的区别的。

虚拟机的本质上是模拟。通过模拟物理机上的硬件,向用户提供诸如CPU、内存等资源。因此虚拟机上可以且必须安装独立的操作系统,系统内核与物理机的系统内核无关。因此一台物理机上有多个虚拟机时,一个虚拟机操作系统的崩溃不会影响到其他虚拟机。而容器的本质是经过隔离与限制的linux进程。容器实际使用的还是物理机的资源,容器之间是共享了物理机的linux内核。这也就意味着当一个容器引发了内核crash之后,会殃及到物理机和物理机上的其他容器。从这个角度来说,容器的权限和安全级别没有虚拟机高。但是反过来说,因为能够直接使用CPU等资源,容器的性能会优于物理机。

容器之间的隔离性依赖于linux提供的namespace。namespace虽然已经提供了较多的功能,但是,系统的隔离不可能如虚拟机那么完善。一个最简单的例子,就是一个物理机上的不同虚拟机可以设置不同的系统时间。而同一个物理机的容器只能共享系统时间,仅仅可以设置不同的时区。

另外,对于容器资源的限制是通过linux提供的cgroup。在容器中,应用是可以感知到底层的基础设施的。而且由于无法充分隔离,从某种程度上来说,容器可以看到宿主机上的所有资源,但实际上容器只能使用宿主机上的部分资源。

延伸阅读

学习是年轻人改变自己的最好方式-Java培训,做最负责任的教育,学习改变命运,软件学习,再就业,大学生如何就业,帮大学生找到好工作,lphotoshop培训,电脑培训,电脑维修培训,移动软件开发培训,网站设计培训,网站建设培训学习是年轻人改变自己的最好方式