目录
前言
正文
一、传统虚拟技术面临的挑战
二、容器化的含义
三、容器化的优点
1. 可迁移性
2. 速度快
3. 可扩展性
4. 利用率
5. 故障隔离
6. 安全性
7. 易于管理
8. 便利性
四、容器化的缺点
1. 安全性
2. 编排和数据存储
3. 监控
五、容器化的发展趋势
总结
前言
目前,云原生容器化已经成为云计算领域最新的技术趋势,很多人认为,容器化可创建全新、可扩展的云原生应用程序,实现老旧系统的现代化改造。几乎所有的企业都在使用云环境(公有云或者私有云),大多时候采用虚拟机方案,但是传统的虚拟化技术面临一系列挑战,本文将针对云原生容器化技术的发展现状和趋势展开讨论。
正文
一、传统虚拟技术面临的挑战
在云原生的大趋势下,传统的虚拟技术已经无法满足最新服务架构和产品技术选型的需要,因此,基于容器化的虚拟机技术逐渐登上了历史舞台,并且在最近几年发展迅猛。
上图是传统虚拟机技术和容器技术一个简单对比情况。 除此之外,传统虚拟技术还面临着哪些挑战呢? 接下来详细介绍一下。
1. 环境不一致,应用程序和软件包部署到虚拟环境,部署环境和开发调试环境不一致。
2. 对操作系统有依赖,部署的应用程序只能在兼容的操作系统上运行。
3. 隔离级别较低,无法提供高于操作系统级别的沙盒机制。
4. 计算粒度不同,无法部署多个复制的应用程序,应用程序层上的负载平衡只能在单台计算机中运行,不能在非操作系统层中运行。
5. 在生产环境中修补应用程序很麻烦,在群集级别系统上部署不是很灵活,而且难以跨多个区域进行管理。
容器化可以非常方便的解决这些痛点问题,容器化比虚拟化的效率更高,是虚拟化的自然演进结果。虚拟化有助于在单个服务器上分发多个操作系统,而容器化则更为灵活,也更精细。接下来具体看一下什么是容器化。
二、容器化的含义
本质上,容器化是操作系统虚拟化技术的一种形式,可以让用户在使用相同共享操作系统的隔离用户空间中运行应用程序。而且对于操作系统的类型也没有限制,包括常见的linux系统、windows系统、mac OS系统。应用程序容器是一个完全打包、可迁移的可执行环境。
应用程序容器具备如下特点:
- 容器拥有应用程序运行所需的全部内容,包括二进制文件、依赖关系、库和配置文件,所有文件都包含在容器中。
- 容器化应用程序是指将容器从主机操作系统中提取出来,限制其对基础资源的访问权限,类似于轻量级虚拟机。
- 容器化应用程序可以在各种类型基础架构和操作系统上运行应用程序,例如裸机、云服务器或虚拟机中,而不依赖具体的运行环境。
另外,容器化还可以减少启动时的开销。容器化的应用程序共享一个操作系统内核,无须为每个应用程序设置单独的访客操作系统。因此,可以在同一台机器上部署多个容器服务,而彼此之间互不影响。
三、容器化的优点
容器化技术允许将应用程序以容器的形式交付给客户、部署并对外提供服务。容器化为软件开发人员和开发团队带来卓越的敏捷性、可迁移性以及优化成本等众多优点。
容器化的应用程序具备如下优点:
1. 可迁移性
应用程序容器包含一个自主的操作系统,因此它并不依赖于主机操作系统,可以随便跨平台迁移,从而也避免了由于运行环境不一致导致的功能异常问题。
2. 速度快
开发人员之所以将容器称为“轻量型”,因为它们共享主机操作系统内核,无须额外开销,可以进一步提高服务器效率,减少服务器和授权许可成本。它们不必引导操作系统,因此可以显著加快启动的速度。
3. 可扩展性
应用程序容器技术具有高度的可扩展性,从而轻松应对日益增长的工作负载,在容器环境下,开发人员可以随时增添功能、更新服务,不会影响到原始应用程序。
4. 利用率
多个容器化应用程序共享主机的操作系统内核,同时,容器的容量本来就比虚拟机小,启动时间很短,所以支持单个服务器运行多个容器,提高了服务器的效率,同时降低了服务器和授权许可成本。
5. 故障隔离
容器化后,应用程序相对孤立,因此可独立于其他应用程序运行。所以,一个容器出现故障并不会影响其他容器的运行。同时,开发团队能快速找出和更正故障容器内的技术问题,不会造成其他容器停机。
6. 安全性
以容器形式隔离应用程序可防止恶意代码影响其他容器化应用程序或主机系统。您还可以规定安全权限,自动拦截对试图入侵其他容器或限制通信的恶意组件的访问。应用程序隔离可帮助开发人员共享其他功能,而不会产生风险。
7. 易于管理
借助容器编排平台,容器化工作负载和服务的安装、管理和扩展流程均可实现自动化。容器编排可显著简化管理任务,例如推出新的应用程序版本、扩展容器化应用程序或提供监控、日志记录和调试功能。
8. 便利性
容器化允许开发人员可使用同一个环境进行开发和生产,而这之前是 Web 应用程序开发很难办到的,所以容器对于开发人员来说非常方便。
四、容器化的缺点
当然,容器化也不是完美的,它也有一定的局限性。比如在制定和启动容器战略之前就要完成大量的准备工作。虽然,容器化可提高应用程序的灵活性,但它们也带来了其他方面的复杂性。这些复杂性主要体验在安全性、编排、监控等方面。
1. 安全性
相比较传统虚拟机,容器潜在的安全风险更高。容器需要多种级别的安全措施,因为它们有多个层。因此,除了要保护注册表、Docker 后台驻留程序以及主机操作系统,还要保护容器化应用程序本身。
2. 编排和数据存储
使用虚拟化解决方案随附的单一编排程序应对虚拟机(例如,适用于 VMware 的 VMware 编排程序)。不过,如果是容器,就要从 Kubernetes、Mesos 或 Swarm 等编排工具中进行选择。虚拟机的数据存储非常简单,但是容器却异常复杂。对于持久型容器数据,在启动容器时需要映射对应的物理机存储目录,否则容器一旦重启,其中的数据可能会永远消失。
3. 监控
监控容器的性能和安全问题也不容忽视。目前,可以选择使用各种监控工具、外部监控服务以及分析技术。云环境异常复杂,因此需要重视监控安全问题。
尽管存在缺陷,但是容器化依然利大于弊。
五、容器化的发展趋势
目前,很多企业都在大规模使用容器,容器的使用范围也开始有所变化,逐渐从在线业务逐渐向 AI 大数据演进,对 GPU 等异构资源的管理和 AI 任务和作业管理的需求也越来越多。同时,开发人员在考虑如何通过云原生技术,以统一架构、统一技术堆栈支撑更多类型的工作负载,从而进一步降低企业服务的运维成本。
深度学习、AI任务,正是社区寻求云原生技术支撑的重要工作负载之一。针对 AI 计算类任务的特性,在 Kubernetes 核心 Scheduler Framework 的基础上进行了大量扩展和增强,提供了支持 Gang Scheduling、Capacity Scheduling、Binpack 等任务调度策略,提升集群的资源利用率。并与 K8s 社区积极合作,持续推动 K8s 调度器框架演进,保证了 K8s 调度器通过标准的 plugin 机制,可按需扩展出各种调度策略,来满足各种工作负载的调度需求。同时避免了类似其他 custom scheduler 对集群资源分配带来数据不一致的风险。除此之外,支持 GPU 共享调度和拓扑感知调度,NPU/FPGA 等定制芯片调度,提升 AI 任务的资源利用率。随着容器化技术的普及,很多云服务产品也都开始支持容器化部署。几乎所有的项目中都会用到数据库,接下就以云数据库产品为例进行介绍。
总结
综上所述,容器化作为一门热门的技术,已经被广泛使用,并且凭借自身优势还在迅速抢占市场。对技术小伙伴来说,了解和掌握容器化技术已经成为一个加分项。本文通过讨论传统虚拟化技术面临的挑战,引出云原生容器化技术,并介绍了容器化的发展现状、优缺点和未来趋势。