前言
容器技术其实已经发展了很多年,作为研发同学来说我们关注到可能是从2013年docker 开源,2014年kubernetes 开源等等一系列相对轰动性事件才了解的。但是其实容器技术并非横空出世的,它是经过了一系列的技术积累,才有了现象级的产品。我们想要深入学习容器技术,了解云原生,容器技术背后的技术基石是绕不开必须学习的。
namespace
linux namespace 源于 2002 年的 2.4.19 内核,主要针对挂载命名空间类型。从 2006 年开始添加了其他命名空间并持续到未来
namespace 是Linux 内核的一项功能,它对内核资源进行分区,以便一组进程看到一组资源,而另一组进程看到一组不同的资源。该功能的工作原理是为一组资源和进程使用相同的命名空间,但这些命名空间引用不同的资源。资源可能存在于多个空间中。此类资源的示例包括进程 ID、主机名、用户 ID、文件名、与网络访问相关的一些名称以及进程间通信。
后面会更新更详细的namespace 和容器相关的文章
cgroup 技术
CGroup
全称 Control Group
中文意思为 控制组
,用于控制(限制)进程对系统各种资源的使用,比如 CPU
、内存
、网络
和 磁盘I/O
等资源的限制,著名的容器引擎 Docker
就是使用 CGroup
来对容器进行资源限制。它是由 Google 的两位工程师进行开发的,自 2008 年 1 月正式发布的 Linux 内核 v2.6.24 开始提供此能力
后续会更新cgroup 相关的详细内容
lxc (linux container)
Linux container( LXC ) 是一种操作系统级虚拟化方法,用于使用单个 Linux 内核在控制主机上 运行多个隔离的Linux系统(容器)。
Linux 内核提供了cgroups功能,允许在无需启动任何虚拟机的情况下对资源(CPU、内存、块 I/O、网络等)进行限制和优先级划分,还提供命名空间隔离功能,允许完全隔离应用程序的操作环境视图,包括进程树、网络、用户 ID和安装的 文件系统。
LXC 结合了内核的 cgroup 和对隔离命名空间的支持,为应用程序提供隔离的环境
docker 的早期版本就是使用lxc 作为容器的驱动执行程序
docker
docker 相信很多开发人员都知道,在很长一段时间里docker 和容器基本上是划等号的,实际上docker 类似于一个软件平台,它提供了镜像发布,容器运行时等等功能,它的共实现也是基于namespace 和cgroup 。甚至docker 也推出了自己类似于k8s的docker 集群搭建方案。而它实在是太火了,关于docker 的文章实在是太多了,我在这里就不展开了
kubernetes
kubernetes 谷歌基于他们内部的容器调度平台开源而来,自打开源以来立即引爆了云原生领域,基本上大公司的集群方案都是kubernetes。 kubernetes 是一个容器的编排调度平台,可拓展性极强,以Pod(pod 内可以包含一个或多个容器)为最小的调度单元,让容器可以在集群内各个节点漂移,极大丰富了让容器技术的实用性达到新的高峰。总之非常屌,用雷总的话来说就是屌爆了。!