Kubernetes中的不足也是好事

Kubernetes允许用户从应用程序管理和基础架构选项的开放生态系统中进行选择组件,并且在CNCF的领导下,Kubernetes已成为新型的Linux。

正因为如此,Kubernetes才成为容器编排的事实选择。

为什么?

为了支持各种用例,早期的Kubernetes开发人员为该平台故意留白,以为其用户提供灵活性。Kubernetes并非是万能的平台,而是一个可扩展的平台,用户和供应商可以使用自定义资源(CRD),容器存储接口(CSI)和容器网络接口(CNI)轻松定制其环境。根据自己的要求。Kubernetes中的故意留白为基础架构和应用程序层提供了灵活性。

 

云原生环境的构建块

Cloud Native Infrastructure的故意留白

基础设施

如今,有许多运行Kubernetes的基础架构可供选择。它可以在本地或公共云中运行。它也可以在虚拟机或裸机服务器上运行。因此,用户需要根据自己的功能特性,性能要求,效率和成本要求做出明智的决策。但是,错误的决定会对项目结果和客户体验产生负面影响。

存储

就像基础架构一样,对于Kubernetes用户而言,选择存储解决方案也可能是一项艰巨的任务。尽管多年来,存储技术取得了巨大进步,但大多数用户仍面临I/O瓶颈问题。随着Kubernetes成为无状态应用程序和有状态应用程序的标准,选择能够提供现代数据服务–如灾难恢复(DR)和高可用性(HA),具有高吞吐量和低延迟的存储系统非常重要。

网络

网络是任何云原生应用的基本要求。 Kubernetes可以管理集群网络,但是将应用程序暴露给外界,应用程序扩展、安全地互连是Kubernetes用户面临的最大挑战。因此,用户在选择网络解决方案时需要考虑网络拓扑,安全性,延迟和吞吐量等。

资源利用率

Kubernetes 在CPU和内存级别解决了 noisy neighbor 问题,但是共享存储和共享网络仍然容易受到占用系统资源的应用程序的攻击。用户需要采取措施来避免 存储和网络的noisy neighbor 问题,并实现资源利用率的最大化。

noisy neighbor ,共享基础架构的云环境中,过度占用带宽,磁盘I/O,CPU和其他资源的租户,很可能对其他用户的云性能产生负面影响,导致共享基础架构的其他虚拟机和应用程序遭受云网络性能不均的困扰。

Cloud Native Application Management的故意空白

用户和集群管理

由于Kubernetes与基础架构无关,因此它仅提供基本的集群和用户管理。大多数企业需要比现成可用的功能更强大的功能,包括诸如Active Directory集成、用户和事件跟踪、日志记录之类的功能。

高级自定义选项

虽然Kubernetes专为容器编排和管理而设计,但它还包含许多用于进一步定制的高级选项,包括增强的安全性和配置控制等领域。

与Linux一样,这些选项适用于熟悉它们的人。

应用程序生命周期管理(ALM)

Kubernetes编排容器,但不编排应用程序。开发人员通常更关心应用程序生命周期管理,而不是管理单个容器。注意:在Kubernetes中,使用ALM组件升级应用程序,变得复杂。

多集群管理

随着Kubernetes的迅速采用,组织为了简化和隔离,倾向于使用多个Kubernetes集群(用于开发,测试,生产等)。但是,这带来了从单个面板管理多个群集的复杂性。在不同(或相同)云提供商之间,不同数据中心和不同区域之间移动应用程序及其数据也增加了复杂性。

Kubernetes社区的改进

在CNCF的领导下,Kubernetes社区通过标准的接口和框架,积极地发展和改善了平台的核心功能。这些努力,使生态系统中的供应商和其他贡献者能够弥补上述空白。

Operators 框架

Operators 是专门用于Kubernetes特定应用程序生命周期管理的专用控制器。Kubernetes社区开发了此框架,以提供自动化,标准化,易用性和应用程序管理的灵活性。

Operators 的示例,一些是各种供应商发布的数据库Operators ,例如Microsoft SQL ServerMongoDBCrunchyPostgreSQL。使用数据库Operators,可以用完全自动化的方式创建,销毁,克隆,扩展或数据库分片。此外,Operators还提供了在生产环境中运行数据库所需的关键功能,例如高可用性(HA),复制,负载平衡,故障转移和快照。

CSI和CNI

在Kubernetes的早期,不支持将存储集成到Kubernetes中。Diamanti提供了一个名为“ FlexVolume”的存储插件,为将存储集成到Kubernetes中铺平了道路。

FlexVolume插件使有状态应用程序能够在Kubernetes上运行。FlexVolume后来演变为CSI,在Kubernetes 1.13和更高版本中完全支持。同样,Kubernetes社区开发了CNI插件,该插件允许用户将Kubernetes与首选的网络解决方案集成。

这些标准接口有助于通过第三方解决方案扩展Kubernetes。但是,这带来了额外挑战:如何选择正确的供应商或解决方案来满足存储和网络需求。

填补留白

如上所述,Kubernetes有许多故意的留白,这使其可以灵活地在任何平台上运行。服务提供商和基础架构提供商有责任填补这些空白。

每个公共云提供商都提供Kubernetes服务,其中有意填补与特定计算,存储和网络基础设施的集成中的空白。但是,公共云被设计为同质资源。这意味着生产应用程序会受到noisy neighbor 的困扰,这迫使用户过度配置基础架构,从而导致成本增加。

 

Kubernetes生态系统的参考架构

另外,在本地基础架构上运行Kubernetes并不总是那么容易。使用DIY方法部署Kubernetes会带来一个问题,即选择和管理许多不同的组件,例如CSI,CNI,硬件,操作系统,安全性,身份和用户管理。去年,许多供应商已经开始提供CNCF认证的Kubernetes发行版。

 

针对Kubernetes设计的Diamanti超融合基础架构

DIY Kubernetes的替代方法是利用现代的超融合基础架构(HCI)方法来填补这些空白。

Diamanti是该领域的先驱,提供了完全集成的计算,存储,网络和安全解决方案,还负责集群管理,身份和用户管理,监控以及混合云管理。

这使开发人员和操作员可以专注于应用程序开发和部署。此外,Diamanti平台通过其独特的IO管理解决方案,完全消除了noisy neighbor 问题,从而提供了很高的应用程序性能。

结论

Kubernetes显然是容器编排的最佳平台,旨在在任何环境中运行。但是,建立Kubernetes的基础原则,也使得启动和运行现成的程序具有挑战性。随之而来的挑战是,Kubernetes中有许多故意留白留给社区和供应商解决。

因此,在组织中采用Kubernetes时,要考虑如何减少可以满足整体要求的基础架构和应用程序管理所需的时间,精力和成本。集成方法是一种在确保所有这些差距都得到弥补的同时,可以缩短交货时间的方法。

译文链接: https://thenewstack.io/why-those-gaps-in-kubernetes-are-really-a-good-thing/

K8S中文社区微信公众号

评论 抢沙发

登录后评论

立即登录