当你谈论云原生时,你必须谈论容器。容器技术是目前IT行业最热门的技术之一,它在云的原始技术家族中扮演着重要而强大的角色,给软件开发带来了革命性的变化,推动了微服务对整个行业的变革。
容器革命:“容器导向发展”
那么容器是一种什么样的技术呢?让我们回到云计算革命的时代。
云计算革命
想象一下,一个非常非常大的计算机房,里面存储着成千上万台服务器。这些服务器和普通笔记本电脑一样,都有CPU、硬盘和互联网接入,分别对应服务器的计算资源、存储资源和网络资源。
数据中心
数据中心的人需要统一管理这数以千计的服务器,根据客户的需求随时随地为其提供所需的资源。比如有人需要一台非常非常小的电脑,只需要一个CPU,1G内存,10G硬盘,1万亿带宽。
为了满足用户的需求,它经历了漫长的发展时期。十年来,我们通过云计算解决了计算机基础设施——的计算、网络和存储资源的灵活性问题,基础设施资源的管理效率大幅提升。例如,通过云平台,我们可以在几分钟内获得一个可用的虚拟机。
然而,在云计算取得巨大成功的同时,也出现了新的问题。
后续新问题:难以扩展和迁移。
云计算带来的新问题。
首先是应用扩展。以大型电子商务应用为例。站台上的交通有高峰也有低谷。双十一期间,大量流量疯狂涌入平台。此时,大量的应用程序需要扩展。利用云计算平台,我们可以简单快速地获得想要的虚拟机,但它只是一个虚拟机。应用程序所依赖的操作系统、应用程序和环境需要手动部署,这个过程相当繁琐,需要花费大量时间。
另一个问题是应用程序的迁移。应用程序经常涉及运行环境的迁移变化,例如从开发人员的计算机到测试服务器的迁移,从物理服务器到云的迁移,以及相关运行时版本的变化和操作系统的变化。这些环境的迁移通常会导致应用程序部署失败。
这两个问题本质上是应用部署效率低。可以看出,基础资源管理的高效率和应用部署的低效率之间存在巨大差距。虽然我们可以快速获得基本资源,但由于部署繁琐,应用程序无法快速使用这些资源。
基本资源管理和应用程序部署之间的效率差距。
正如木桶效应所反映的,应用程序部署的低效最终会降低整体效率。那么集装箱是一种什么样的技术呢?如何解决这个问题?
什么是容器?
容器定义了一种称为容器图像的文件格式。通过镜像,我们可以预先将应用程序、所需的配置、相关组件以及部署期间要采取的操作定义为模板。然后,在每台机器上部署一个名为容器引擎的软件。容器引擎通过读取图像来运行我们的应用程序,从而生成容器实例。
集装箱工作模式。
这种容器很容易解决膨胀困难的问题。因为容器映像被用作模板,所以容器可以非常容易地启动几个应用程序实例,并且应用程序的部署变得比以往任何时候都简单。应用程序部署和扩展过去需要一两个小时,现在可以在几分钟内完成。
此外,容器还解决了迁移困难的问题。有了容器,应用程序和所需的依赖项被打包成一个整体,因此应用程序部署的整个过程不需要关心安装环境和依赖项。让各种容器应用支持一套标准的操作模式,只要安装了容器引擎的服务器就可以运行。“container”的英文单词是container,在更恰当的翻译中,它实际上是“Container”。集装箱的这一特点就像港口运输的特点一样。不同的货物,无论大小,都装在封闭的容器里,外观没有区别。运输人员无需关心集装箱内不同的货物,只需将集装箱视为一个封闭的、无差别的独立个体进行装卸、堆放和运输。在整个过程中,集装箱保持关闭,直到它被交付到目的地。从船舶到火车再到卡车,集装箱都可以通过起重机进行操作,实现过程的自动化,从而以非常便宜的方式有效解决了不同类型货物在长途运输中的问题。
1. 就像一个容器规格统一的容器。
2. 容器巧妙地解决了部署问题,然后迎来了新的问题。
3. 容器引起的其他问题。
4. 应用质量分布问题。
实际上,我们经常需要将应用程序部署到许多服务器上。如何有效便捷地将应用分发到有需求的用户手中?为了解决这个问题,container借鉴了移动应用商城的概念,引入了“容器镜像仓库”。开发人员将开发的应用程序打包成容器映像,并将其上传到容器映像仓库。需要该应用程序的用户可以从图像仓库中提取图像,然后通过本地安装的容器引擎实例化该图像来运行该程序。
管理问题
当容器和服务器数量达到一定规模时,应用部署也涉及到一个管理问题,即如何有效管理大量的服务器和容器,保证应用稳定运行,便于升级和快速排除故障。我们不可能手动管理每台机器上的容器引擎和实例,但是我们需要一个集中的管理方案,这就是为什么出现容器编排的概念。通过容器编排,我们可以在一个平台上管理运行在这些机器上的成千上万个容器和容器应用程序。容器中的重要概念。
由此,我们初步了解了集装箱技术的几个重要概念:集装箱图像、图像仓库、集装箱引擎、集装箱实例和集装箱排列。接下来,我们不妨从不同的角度来解读这些概念。
基础设施视角:
1. 容器图像本质上是具有特殊格式的压缩文件。
2. 容器图像仓库相当于一个文件服务器,可以上传和下载图像。
3. 容器是一个轻量级的虚拟化工具,它使用操作系统内核的能力来构建一个隔离的应用程序环境,也就是容器实例。
4. 容器是一个受控的进程,它的资源,如中央处理器、内存、进程、网络和存储访问都是受控的。
5. 容器编排是一种资源调度器,它管理大量的机器资源,根据用户的需求找到合适的机器资源来运行应用。
应用角度:
1. 容器映像相当于应用程序可交付格式,它不仅包含应用程序,还包含应用程序和相关组件所需的配置。
2. 集装箱图像仓库实现应用分发。
3. 引擎和容器实例为应用程序运行提供了环境。
4. 容器编排应用程序用于管理应用程序的整个生命周期。
容器技术大大提高了部署效率,有效解决了应用扩展和迁移的难题。然而,除了这些优点之外,容器也有隔离性差的局限性,持久存储必须依赖外部存储设备。此外,它们也给集装箱管理带来了很多挑战。但集装箱必须是未来势在必行的有效交付方式,发展前景无限,给开发管理带来巨大收益