容器技术的发展

56 阅读3分钟

前言

容器技术其实已经发展了很多年,作为研发同学来说我们关注到可能是从2013年docker 开源,2014年kubernetes 开源等等一系列相对轰动性事件才了解的。但是其实容器技术并非横空出世的,它是经过了一系列的技术积累,才有了现象级的产品。我们想要深入学习容器技术,了解云原生,容器技术背后的技术基石是绕不开必须学习的。

namespace

linux namespace 源于 2002 年的 2.4.19 内核,主要针对挂载命名空间类型。从 2006 年开始添加了其他命名空间并持续到未来

namespace 是Linux 内核的一项功能,它对内核资源进行分区,以便一组进程看到一组资源,而另一组进程看到一组不同的资源。该功能的工作原理是为一组资源和进程使用相同的命名空间,但这些命名空间引用不同的资源。资源可能存在于多个空间中。此类资源的示例包括进程 ID、主机名、用户 ID、文件名、与网络访问相关的一些名称以及进程间通信

后面会更新更详细的namespace 和容器相关的文章

容器技术的基石-namespace

cgroup 技术

CGroup 全称 Control Group 中文意思为 控制组,用于控制(限制)进程对系统各种资源的使用,比如 CPU内存网络 和 磁盘I/O 等资源的限制,著名的容器引擎 Docker 就是使用 CGroup 来对容器进行资源限制。它是由 Google 的两位工程师进行开发的,自 2008 年 1 月正式发布的 Linux 内核 v2.6.24 开始提供此能力 后续会更新cgroup 相关的详细内容

容器技术的基石-cgroup

lxc (linux container)

Linux containerLXC ) 是一种操作系统级虚拟化方法,用于使用单个 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 内可以包含一个或多个容器)为最小的调度单元,让容器可以在集群内各个节点漂移,极大丰富了让容器技术的实用性达到新的高峰。总之非常屌,用雷总的话来说就是屌爆了。!