近年来,容器已成为云原生应用程序架构的同义词。它们重新定义了打包、分发、部署和管理应用程序的方式。但是,容器本身就是已有Linux技术的重新兴起,只不过这些技术以一种新的、更有用的方式结合在一起。
虽然许多组织正在将基于虚拟机(VM)的应用程序迁移到容器,但虚拟化在数据中心和公有云中仍然普遍存在。我们还看到虚拟化技术以新的方式与容器和Kubernetes结合在一起,为新问题提供创新的解决方案。换句话说,虚拟机也正在成为云原生架构的一部分——这就是容器原生虚拟化。
Kubernetes的基石仍然是Linux容器的编排和管理,以创建一个功能强大的分布式系统,用于跨混合云环境部署应用程序。Kubernetes通常运行在基于VM的基础设施之上,而基于VM的工作负载通常仍然是IT组合的重要组成部分。进入2019年,Kubernetes和虚拟化的交汇有三个主要趋势:
1、Kubernetes编排微虚拟机,为不受信任的工作负载提供更严格的多租户隔离。
2、Kubernetes编排和管理传统的基于VM的工作负载(通过KubeVirt)和基于容器的工作负载。
3、Kubernetes集群越来越多地部署在裸机服务器上,作为基于VM环境的Kubernetes的替代品。
这些都不是新想法,但在2019年我们期望看到这些趋势背后的动力成为现实。这些功能共同说明了Kubernetes将如何继续发展并应用于更广泛的应用程序。
Kubernetes编排微VM
当采用Kubernetes和容器时,核心考虑因素之一是安全性以及如何确保容器在多租户环境中安全运行。容器在共享Linux主机上作为独立进程运行,并且你经常在由多个主机组成的Kubernetes集群中运行多个容器化应用程序。
从Linux主机级别到Kubernetes集群级别有多层容器安全性,可以保护这些应用程序不被恶意利用。其中包括Linux内核级功能,如cGroups、namespaces、seccomp和SELinux——它们确保容器无法利用底层Linux主机或其他容器。
在Kubernetes集群级别,基于角色的访问控制(RBAC)、命名空间租户隔离和pod安全策略等功能使多个应用程序可以在同一个集群上安全地运行。
如今,大多数用户对这些功能提供的安全性充满信心,因此,我们看到在任务关键型生产环境中运行Kubernetes的用户数量呈爆炸式增长。
对于某些用户而言,可能需要更强大的多租户隔离,无论是由于运行不受信任的工作负载,还是是否有更严格的安全要求或其他原因。这就是基于微型VM(如Kata Containers、Firecracker或gVisor)的方法的用武之地。
Micro-VM与你可能在VMWare、AWS或其他提供商上运行的传统VM不同。相反,它们在应用程序容器的上下文中重新混合现有的硬件辅助虚拟化技术(如基于内核的虚拟机(KVM))以提供非常轻量级的虚拟机。
这种方法不是像传统虚拟化那样尝试提供完整的“机器”,而是专注于提供足够的VM来成功执行应用程序容器或功能。因此,由于其功能差异和限制,你不能只使用传统VM并在基于微VM的容器中运行它。相反,微VM旨在提供相对于标准Linux容器的硬隔离,同时最大限度地减少传统VM在冷启动时间和性能方面的折中。
虽然Firecracker、Kata和gVisor等技术引起了很多关注,但目前在用户采用方面还没有明确的领导者,每种方法都有权衡和取舍。虽然我们预计Kubernetes编排的绝大部分工作负载仍将是标准的应用程序容器,但随着微VM在2019年的不断发展,它值得关注。
Kubernetes编排标准虚拟机
Kubernetes编排引擎为企业生产工作负载提供了更具可扩展性和灵活性的模型。最初,这意味着,生产工作负载打包为应用程序容器。但是有了像KubeVirt这样的开源项目,我们看到同样强大的Kubernetes编排引擎可以应用于管理通常在云或虚拟化平台上运行的标准虚拟机。
在2019年,我们预计这种趋势将持续下去并转变为更广泛的思维模式变化。以前在以虚拟机为中心和以容器为中心的基础设施之间的选择将没有实际意义。Kubernetes将开始使容器和虚拟机的混合运维成为可能,而且将是在裸机环境中运行。
容器原生虚拟化是一种概念,它使虚拟机能够遵循与Kubernetes中基于容器的应用程序相同的工作流程。以前,虚拟化堆栈是与Kubernetes和云原生是完全独立的孤岛——独立的工作流程、独立的工具、独立的团队等。
但随着数字化转型的实施,统一这些不同的技术、流程和团队的需求变得至关重要。使用KubeVirt进行容器原生虚拟化,企业将能够更有效地集成其应用程序操作并保留现有的IT技能,同时拥抱基于Kubernetes构建的现代基础设施。
裸机上的Kubernetes(没有虚拟机)
虽然虚拟机成为Kubernetes工作负载组合中的重要组成部分,但我们发现它们作为Kubernetes底层基础设施的一部分变得不那么受欢迎了。虽然目前大多数Kubernetes平台都部署在基于VM的基础设施上,但容器不依赖于VM来运行。我们发现对在裸机上运行Kubernetes和容器的兴趣继续增长。
在裸机上运行Kubernetes将使应用程序能够充分利用底层硬件,这对于为Kubernetes带来更多机器和性能敏感应用程序的用户来说非常重要。在裸机上运行Kubernetes和容器还可以帮助用户减少VM蔓延并简化操作。
为了避免被任何一个提供商或供应商锁定,用户将重点放在Kubernetes上,作为跨物理、虚拟、私有云和公有云环境运行的应用程序的通用抽象层。我们需要满足用户的需求。这意味着跨开放的混合云提供Kubernetes,包括内部部署和在裸机上部署。