背景
“云原生技术有利于各组织在公有云、私有云和混合云等新型动态环境中,构建和运行可弹性扩展的应用。云原生的代表技术包括容器、服务网格、微服务、不可变基础设施和声明式API。”
聊容器技术避不开云原生,聊云原生也避不开容器技术。容器技术和云原生就是一对双螺旋体,容器技术催生了云原生思潮,云原生生态推动了容器技术发展。从2013年docker(container)技术诞生,到2015年CNCF这个云原生领域重量级联盟便成立,这不是历史的巧合而是历史的必然。作为云原生关键技术之一的容器,从2013年诞生以来一直是行业关注的焦点之一。借用一张业界广泛引用的云原生容器技术进阶图来了解一下容器技术和云原生诞生的历史背景。
先让我们一起来看看容器技术发展的历史纪年表,先直观感受一下这片如火如荼的热土吧!
1979年,Unix v7系统支持chroot,为应用构建一个独立的虚拟文件系统视图。
1999年,FreeBSD 4.0支持jail,第一个商用化的OS虚拟化技术。
2004年,Solaris 10支持Solaris Zone,第二个商用化的OS虚拟化技术。
2005年,OpenVZ发布,非常重要的Linux OS虚拟化技术先行者。
2004年 ~ 2007年,Google 内部大规模使用 Cgroups 等的OS虚拟化技术。
2006年,Google开源内部使用的process container技术,后续更名为cgroup。
2008年,Cgroups 进入了 Linux 内核主线。
2008年,LXC(Linux Container)项目具备了Linux容器的雏型。
2011年,CloudFoundry开发Warden系统,一个完整的容器管理系统雏型。
2013年,Google通过Let Me Contain That For You (LMCTFY) 开源内部容器系统。
2013年,Docker项目正式发布,让Linux容器技术逐步席卷天下。
2014年,Kubernetes项目正式发布,容器技术开始和编排系统起头并进。
2015年,由Google,Redhat、Microsoft及一些大型云厂商共同创立了CNCF,云原生浪潮启动。
2016年-2017年,容器生态开始模块化、规范化。CNCF接受Containerd、rkt项目,OCI发布1.0,CRI/CNI得到广泛支持。
2017年-2018年,容器服务商业化。AWS ECS,Google EKS,Alibaba ACK/ASK/ECI,华为CCI,Oracle Container Engine for Kubernetes;VMware,Redhat和Rancher开始提供基于Kubernetes的商业服务产品。
2017年-2019年,容器引擎技术飞速发展,新技术不断涌现。2017年底Kata Containers社区成立,2018年5月Google开源gVisor代码,2018年11月AWS开源firecracker,阿里云发布安全沙箱1.0。
2020年-202x年,容器引擎技术升级,Kata Containers开始2.0架构,阿里云发布沙箱容器2.0....
整理容器技术近20年的发展历史,大致可以将其分为四个历史阶段,下文将详细介绍这四个历史阶段。
技术萌芽期
容器技术需要解决的核心问题之一运行时的环境隔离。容器的运行时环境隔离,目标是给容器构造一个无差别的运行时环境,用以在任意时间、任意位置运行容器镜像。由于docker的布道,大家习惯性认为容器的运行时环境隔离就是OS虚拟化,或则容器等于namespace + cgroup + 安全防护机制。我不太赞同这种看法,这个只是一段历史时期、一种容器运行时的实现技术,还有很多种其它可能的技术方案来实现容器运行环境。所以,回到需求的本源:容器需要运行时隔离技术来保证容器的运行环境符合预期。习惯上,大家把这种实现容器隔离技术的组件叫做容器运行时。
从另外一个角度看,容器隔离技术解决的是资源供给问题。为啥需要容器隔离技术来解决资源供给问题呢?成也萧何,败也萧何!摩尔定律实在太过强大,它让我们有了越来越多的计算资源可以使用。10年前做小型机时,小型机的典型规格是32路8核CPU,现在一台4路PC服务器计算能力都超过10年前的小型机服务器。小型机的典型用法是把整机切分为多个分区使用。观察当下云服务硬件发展趋势,越来越有熟悉的感觉,我们在把小型机相关技术“军转民”。现在我们一台PC服务器拥有了非常强大的、能和十年前小型机媲美的计算能力,巧合的是当下PC服务器的典型用法也和十年前的小型机用法类似,切割为1-8vCPU的虚拟机/容器使用。
为什么人们总是习惯于把一个大的服务器资源切分为小的分区使用而不是研发能够充分发挥大型服务器整机计算能力的软件呢?个人认为背后有两个制约因素:
-
待解决问题本身内在的并行度有限。随着多核多处理器系统的日益普及,IT行业从2004年开始进行串行编程到并