热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

Kubernetes的未来是虚拟机,而不是容器?

在中国的生肖中,2018年是“狗年”,在科技领域则是“Kubernetes年”。现在,有很多人才开始

摘要

在中国的生肖中,2018 年是“狗年”,在科技领域则是“Kubernetes 年”。现在,有很多人才开始了解 Kubernetes。世界各地的首席信息官都在努力制定“Kubernetes 战略”。一些组织已经在 Kubernetes 上运行了大量的生产工作负载。

正文

本文最初发布于 Paul 的博客,经原作者授权由 InfoQ 中文站翻译并分享。

概述

作为一项技术,Kubernetes 今年对我的职业生涯非常重要,明年更是如此。在 2018 年即将结束之际,我们应该摒弃傲慢,做出大胆的预测。Kubernetes 的未来是虚拟机,而不是容器。

Kubernetes 的未来是虚拟机,而不是容器。

在中国的生肖中,2018 年是“狗年”,在科技领域则是“Kubernetes 年”。现在,有很多人才开始了解 Kubernetes。世界各地的首席信息官都在努力制定“Kubernetes 战略”。一些组织已经在 Kubernetes 上运行了大量的生产工作负载。

换句话说,对于 Kubernetes 来说,Gartner 炒作周期的每个阶段都有很多人。许多人被困在幻灭的低谷,或者被淹没在绝望的深渊。

Kubernetes 的未来是虚拟机,而不是容器? 来自 Wikipedia ,由 Jeremykemp 提供( Creative Commons CC BY-SA 3.0 *)** *

我是容器的超级粉丝,我不会试图说明 容器已死 。在 2013 年,Docker 带给我们的是一个围绕 Linux 容器的封装器。它们向我们展示了构建、打包、共享和部署应用程序的新方法。来得正是时候,因为我们已经开始认真对待持续交付。它们的模型非常适合现代化交付管道和 PaaS 以及后来的 CaaS 平台。

Kubernetes 的未来是虚拟机,而不是容器?

根据谷歌工程师的观察,技术社区终于为容器做好了准备。谷歌已经使用(或多或少发明)容器很长时间了。他们开始构建 Kubernetes,我们现在都知道,这是谷歌对自己的 Borg 平台的重构,该平台的构建是作为一项社区工作以开放的形式开展的。

不久,大型公有云就提供了一个基于 Kubernetes 的平台(GKE、AKS、EKS)。本地部署人员也很快地构建了基于 Kubernetes 的平台(Pivotal Container Service、Openshift 等)。

软性多租户

还有一个棘手的问题需要解决,我认为这将证明容器的衰落……多租户。

Linux 容器的构建并不是为了成为安全的隔离沙箱(如 Solaris Zones 或 FreeBSD Jails)。相反,它们构建在一个共享的内核模型上,该模型利用内核特性提供基本的进程隔离。正如 Jessie Frazelle 所言,“容器不是一个真实的东西”。

更复杂的是,大多数 Kubernetes 组件不知道租户的存在。当然,你有 名称空间 和 Pod 安全策略 ,但是 API 本身没有。 像 kubelet 或 kube-proxy 这样的内部组件也没有。这导致了 Kubernetes 的“软性租户(Soft Tenancy)”模型。

Kubernetes 的未来是虚拟机,而不是容器?

抽象泄漏。构建在容器之上的平台将继承容器软性租户的许多方面。构建在刚性多租户虚拟机之上的平台都继承了刚性租户(VMware、Amazon Web Services、OpenStack 等)。

Kubesprawl 统治了我周围的一切

Kubernetes 的软性租户模型将服务提供和分发置于一个奇怪的位置。Kubernetes 集群本身成了“刚性租户”。有许多原因(甚至在同一个组织内部)要求在用户(或应用程序)之间实现刚性租户。由于公有云提供了全托管的 Kubernetes 服务,所以每个租户都很容易获得自己的集群并使用集群边界作为隔离点。

像 Pivotal Container Service(PKS) 这样的一些 Kubernetes 发行版非常清楚这个 租户问题 ,它们采用了类似的模型,提供了与你从公有云中获得的服务体验相同的 Kubernetes,但是是在你自己的数据中心里。

这导致“多集群”模式的出现,而不是“一个大型共享集群”的模式。谷歌 GKE 服务的客户为多个团队部署了几十个 Kubernetes 集群,这种情况并不少见。通常,每个开发人员都有自己的集群。这种行为导致了数量惊人的 Kubesprawl。

或者,在自己的数据中心里运行自己的 Kubernetes 集群(上游或基于分布式的)的 Kubernetes 运营商可以自行承担管理大量集群的额外工作,或者只在一两个比较大的集群上接受软性租户。

“这种行为导致了数量惊人的 Kubesprawl。”

通常,最小的集群包含 4 台机器(或 VM),一台(或者 3 个,为实现 HA)作为 Kubernetes 主节点,三个作为 Kubernetes 工作节点。在大多数部分都空闲的系统中,这就占用了大量的资金。

所以,我们需要以某种方式将 Kubernetes 转移到一个刚性租户模型。Kubernetes 社区非常了解这种需要,并有一个 多租户工作组 。这个小组正在努力解决这个问题,他们就如何处理每个模型提出了几个建议模型和提案。

Jessie Frazelle 就这个话题写了一篇 博文 ,很棒的一篇文章,因为她比我聪明得多,所以我可以让你和她取得联系,这样我就不用花十年的时间努力学习来赶上她了。如果你还没有读过,就不要往下读了,先去读那篇文章吧。

优化小型 VM 的速度

Kata 容器是一个开源项目和社区,致力于构建轻量级虚拟机(VM)的标准实现,这些虚拟机看起来和执行起来都像容器,但提供了 VM 的工作负载隔离和安全优势。

Jessie 建议使用 VM 容器技术,比如 Kata 容器 。Kata 容器兼有虚拟机级别的隔离,表现和执行都跟容器类似。这使得 Kubernetes 可以为每个租户(假设每个名称空间有一个租户)提供一组在嵌套 VM 容器中运行的 Kubernetes 系统服务(VM 容器在底层 IaaS 提供的 VM 中运行)。

Kubernetes 的未来是虚拟机,而不是容器?

图片来自 * ti-tenancy. Her s Kubernetes 中的刚性多租户

这是一个优雅的 Kubernetes 多租户解决方案。她甚至进一步建议 Kubernetes 把嵌套容器 VM 用于运行在 Kubernetes 上的工作负载(Pod),这样可以显著提高资源利用率。

这里至少还可以做一项优化。为底层 IaaS 或云提供商构建合适的虚拟机管理程序。如果 VM 容器是 IaaS 提供的第一级抽象,那么我们就可以进一步提高资源利用率。运行 Kubernetes 集群所需的最少 VM 数量下降到一个(或三个,为实现 HA),用于承载提供给“超级用户”的 Kubernetes 控制平面。

资源(成本)优化的多租户

下图是一个具有两个称空间的 Kubernetes 部署,每个部署运行多个应用程序。

Kubernetes 的未来是虚拟机,而不是容器?

注意:还有其他云租户工作负载运行在相同的 IaaS 基础设施上。因为这些是 VM 容器,所以它们具有与常规云 VM 相同的隔离级别。因此,它们就可以以最小的风险在同一个虚拟机管理程序上运行。

最初部署到云上的基础设施为零,因此超级用户的成本为零。

超级用户从云请求一个 Kubernetes 集群。云提供商创建一个单独的容器 VM(或三个,为实现 HA),它运行主要的 Kubernetes API 和系统服务。超级用户可以选择在系统名称空间中部署 Pod,或者创建新的名称空间以便把访问委托给其他用户。

超级用户创建两个名称空间 foo 和 bar。Kubernetes 从云中为每个名称空间的控制平面(Kubernetes API 和系统服务)申请两个 VM 容器。超级用户将对这些名称空间的访问委托给一些用户,这些用户各自部署一些工作负载(Pod),他们各自的控制平面为每个工作负载请求 VM 容器。

在所有阶段,超级用户只为实际消耗的资源付费。云提供商拥有任何云用户都可以使用的生产力。

我并没有说什么新东西

云提供商已经在朝着这个向努力了。通过观察开源社区中正在发生的事情,你就可以看到这个形成过程。(可以说,亚马逊已经在用 Fargate 做这件事了)。

第一个线索是 Virtual Kubelet ,这是一个开源工具,被伪装成了 Kubelet。它将 Kubernetes 与其他 API 连接起来。这将使得 Kubernetes 可以从云的容器 VM 调度器请求容器 VM。

其他线索包括新兴 VM 容器技术的数量,已经提到的 Kata 容器 ,还有来自亚马逊的 Firecracker 和来自谷歌的 gvisor 。

小结

结合对 Kubernetes 刚性租户模型的恰当改进,你将得到 Kubernetes 的圣杯。完全隔离 Kubernetes 工作负载和在 Kubernetes 上运行工作负载时纯粹按 Pod 计算的消费成本模型。

对于那些不在公有云上的人,我们没有相同的消费模型,因为生产力职责在基础设施提供商(在这种情况下是你自己)那里。你仍然可以获得更高的资源利用率所带来的好处,从较低的生产力需求中得到回报。

我们希望 VMware 和 OpenStack 能够注意到这一点,并为我们带来基于虚拟机管理程序的轻量级 VM 容器技术和适当的 Virtual Kubelet 实现。

查看英文原文: The future of Kubernetes is Virtual Machines


以上所述就是小编给大家介绍的《Kubernetes 的未来是虚拟机,而不是容器?》,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对 我们 的支持!


推荐阅读
  • 阿里巴巴终面技术挑战:如何利用 UDP 实现 TCP 功能?
    在阿里巴巴的技术面试中,技术总监曾提出一道关于如何利用 UDP 实现 TCP 功能的问题。当时回答得不够理想,因此事后进行了详细总结。通过与总监的进一步交流,了解到这是一道常见的阿里面试题。面试官的主要目的是考察应聘者对 UDP 和 TCP 在原理上的差异的理解,以及如何通过 UDP 实现类似 TCP 的可靠传输机制。 ... [详细]
  • Web开发框架概览:Java与JavaScript技术及框架综述
    Web开发涉及服务器端和客户端的协同工作。在服务器端,Java是一种优秀的编程语言,适用于构建各种功能模块,如通过Servlet实现特定服务。客户端则主要依赖HTML进行内容展示,同时借助JavaScript增强交互性和动态效果。此外,现代Web开发还广泛使用各种框架和库,如Spring Boot、React和Vue.js,以提高开发效率和应用性能。 ... [详细]
  • 提升 Kubernetes 集群管理效率的七大专业工具
    Kubernetes 在云原生环境中的应用日益广泛,然而集群管理的复杂性也随之增加。为了提高管理效率,本文推荐了七款专业工具,这些工具不仅能够简化日常操作,还能提升系统的稳定性和安全性。从自动化部署到监控和故障排查,这些工具覆盖了集群管理的各个方面,帮助管理员更好地应对挑战。 ... [详细]
  • 本文详细介绍了如何安全地手动卸载Exchange Server 2003,以确保系统的稳定性和数据的完整性。根据微软官方支持文档(https://support.microsoft.com/kb833396/zh-cn),在进行卸载操作前,需要特别注意备份重要数据,并遵循一系列严格的步骤,以避免对现有网络环境造成不利影响。此外,文章还提供了详细的故障排除指南,帮助管理员在遇到问题时能够迅速解决,确保整个卸载过程顺利进行。 ... [详细]
  • 大家好,全新的技术专栏《从零开始掌握容器云网络实战》正式上线。该专栏将系统地介绍容器云网络的基础知识、核心技术和实际应用案例,帮助读者全面理解和掌握容器云网络的关键技术与实践方法。 ... [详细]
  • 投融资周报 | Circle 达成 4 亿美元融资协议,唯一艺术平台 A 轮融资超千万美元 ... [详细]
  • 解读中台架构:微服务与分布式技术的区别及应用
    中心化与去中心化是长期讨论的话题。中心化架构的优势在于部署和维护相对简单,尤其在服务负载较为稳定的情况下,能够提供高效稳定的性能。然而,随着业务规模的扩大和技术需求的多样化,中心化架构的局限性逐渐显现,如扩展性和故障恢复能力较差。相比之下,微服务和分布式技术通过解耦系统组件,提高了系统的灵活性和可扩展性,更适合处理复杂多变的业务场景。本文将深入探讨中台架构中微服务与分布式技术的区别及其应用场景,帮助读者更好地理解和选择适合自身业务的技术方案。 ... [详细]
  • 全面解析JavaScript代码注释技巧与标准规范
    在Web前端开发中,JavaScript代码的可读性和维护性至关重要。本文将详细介绍如何有效地使用注释来提高代码的可读性,并探讨JavaScript代码注释的最佳实践和标准规范。通过合理的注释,开发者可以更好地理解和维护复杂的代码逻辑,提升团队协作效率。 ... [详细]
  • 小王详解:内部网络中最易理解的NAT原理剖析,挑战你的认知极限
    小王详解:内部网络中最易理解的NAT原理剖析,挑战你的认知极限 ... [详细]
  • REST与RPC:选择哪种API架构风格?
    在探讨REST与RPC这两种API架构风格的选择时,本文首先介绍了RPC(远程过程调用)的概念。RPC允许客户端通过网络调用远程服务器上的函数或方法,从而实现分布式系统的功能调用。相比之下,REST(Representational State Transfer)则基于资源的交互模型,通过HTTP协议进行数据传输和操作。本文将详细分析两种架构风格的特点、适用场景及其优缺点,帮助开发者根据具体需求做出合适的选择。 ... [详细]
  • 本文详细介绍了如何在Java Web服务器上部署音视频服务,并提供了完整的验证流程。以AnyChat为例,这是一款跨平台的音视频解决方案,广泛应用于需要实时音视频交互的项目中。通过具体的部署步骤和测试方法,确保了音视频服务的稳定性和可靠性。 ... [详细]
  • (1)前期知识:1. 单机架构:单一服务器计算机——其处理能力和存储容量有限。2. 集群架构(负载均衡器与多节点服务器)——通过增加节点数量来提升系统性能和可靠性,实现高效的任务分配和资源利用。 ... [详细]
  • 本文探讨了使用Python进行微服务架构设计的合理性和适用性。首先,介绍了微服务的基本概念及其在现代软件开发中的重要性。接着,通过具体的业务场景,详细分析了Python在微服务架构设计中的优势和挑战。文章还讨论了在实际应用中可能遇到的问题,并提出了相应的解决方案。希望本文能够为从事Python微服务开发的技术人员提供有价值的参考和指导。 ... [详细]
  • MongoDB核心概念与基础知识解析
    MongoDB 是一种基于分布式文件存储的非关系型数据库系统,主要采用 C++ 语言开发。本文将详细介绍 MongoDB 的核心概念和基础知识,包括其与传统 SQL 数据库的区别,数据库及集合的基本操作,如数据的插入、更新、删除和查询等。通过本文,读者可以全面了解 MongoDB 的基本功能及其应用场景。 ... [详细]
  • 2016-2017学年《网络安全实战》第三次作业
    2016-2017学年《网络安全实战》第三次作业总结了教材中关于网络信息收集技术的内容。本章主要探讨了网络踩点、网络扫描和网络查点三个关键步骤。其中,网络踩点旨在通过公开渠道收集目标信息,为后续的安全测试奠定基础,而不涉及实际的入侵行为。 ... [详细]
author-avatar
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有