ITPub博客

首页 > 数据库 > 数据库开发技术 > 强力三人组:揭秘运行时、存储和网络的奥秘

强力三人组:揭秘运行时、存储和网络的奥秘

原创 数据库开发技术 作者:云原生AI百宝箱 时间:2023-07-31 21:10:00 0 删除 编辑

点击上方蓝字 👆关注公众号,别让消息溜走

后台回复【加群】,与牛人互动不停


之前的文章《叮,你收到一份来自CNCF的云原生景观简介》,我们对CNCF云原生生态系统做了概述。

同时,在《云原生景观:供应层(Provisioning)解决了什么问题?如何解决的?》中,我们探讨了Cloud Native Computing Foundation的Cloud Native景观的供应层,该层主要致力于构建Cloud Native平台和应用程序的基础。

Kubernetes中CNI、CSI和CRI

现在我们已经建立了云原生环境的基础,这篇文章,我们将向上移动一个基础设施层,着重介绍运行时层。它包含容器在云原生环境中运行所需的一切。这包括用于启动容器的代码,称为容器运行时;使持久存储可供容器使用的工具;以及管理容器环境网络。

注意:

运行时层的资源,不应与与供应层的网络和存储混淆。

运行时层的资源,专注于让容器平台运行。此类工具用于启动和停止容器、帮助它们存储数据并允许它们相互通信。

云原生存储

是什么

存储,即存放应用程序持久数据的位置,通常称为持久卷。能够轻松访问持久卷,对于应用程序可靠运行至关重要。通常,当我们说持久数据时,是指想要确保我们在应用重新启动时不会消失的任何数据。

解决了什么问题

云原生架构具有灵活性和弹性,这使得应用重启后的持久数据面临挑战。容器化的应用程序在扩缩容或自我修复时,将会连续创建和删除实例,并经常更改物理位置。因此,必须以独立的方式提供云原生存储。

但是,要存储数据,就要需要硬件(具体来说是磁盘)。磁盘与其他任何硬件一样,都受基础结构约束。这是第一个挑战。

第二个挑战是,存储接口。以前,每个基础架构都有自己的存储解决方案和自己的接口,这使可移植性变得非常困难。

第三个挑战是,现在的应用为了受益于云的弹性,必须以自动化方式配置存储。

云原生存储是针对这种新的云原生挑战量身定制的。

如何解决

云原生存储工具,可帮助

a)为容器提供云原生存储选项

b)标准化容器与存储提供者之间的接口

c)通过备份和还原操作提供数据保护

因此,使用云原生存储兼容的容器存储接口,并且通过自动配置,从而消除了人为瓶颈,实现了自动扩展和自我修复。

相应的解决工具

容器存储接口(CSI)在很大程度上使云原生存储成为可能,该接口允许使用标准API向容器提供文件存储和块存储。在这个领域中,有许多工具,包括开源的和供应商提供的,都可以利用CSI为容器提供按需存储。

此外,我们还有许多其他工具和技术,旨在解决云原生中的存储问题。Minio 是一个流行的项目,它为对象存储等提供与 S3 兼容的 API。Velero 等工具有助于简化备份和恢复 Kubernetes 集群本身以及应用程序使用的持久数据的过程。

类别 热门项目/产品
Persistent volume
CSI
Storage API
Backup and restore
Carina (sandbox)
CubeFS (incubating)
Curve (sandbox)
HwameiStor (sandbox)
K8up (sandbox)
**Longhorn (incubating)<**br />OpenEBS (sandbox)
ORAS (sandbox)
Piraeus Datastore (sandbox)
Rook (graduated)
Vineyard (sandbox)
Velero

容器运行时

是什么

如在《云原生景观:供应层(Provisioning)解决了什么问题?如何解决的?》中所讨论的,容器是一组用于执行应用程序的约束(compute constraints)。容器化的应用程序相信它们正在自己的专用计算机上运行,而忽略了它们与其他进程(类似于虚拟机)共享资源。

容器运行时,是执行容器化(或“受限”)的应用程序。如果没有运行时,则只有容器镜像,该文件指定了容器化应用的的静态文件。运行时将在容器中启动应用程序,并为其提供所需的资源。

解决了什么问题

容器镜像(带有应用程序规范的文件)必须以标准化,安全和隔离的方式启动。

  • • 标准化,因为无论它们在何处运行,都需要标准的操作规则。

  • • 安全,因为你不希望任何不应该访问它的人,对它操作。

  • • 隔离,因为你不希望应用程序影响其他应用,或受其他应用程序的影响(例如,在同一节点的其他应用程序崩溃导致自身故障)。隔离基本上起保护作用。此外,还需要为应用程序提供资源限制,例如 CPU、存储和内存。

如何解决

容器运行时可以完成所有这些工作。

它以标准化方式在所有环境中启动应用程序,并设置安全边界。像CRI-O或gVisor这样的运行时,强化了它们的安全性边界。运行时还设置了容器的资源限制。没有它,该应用程序可能会根据需要消耗资源,从而有可能占用其他应用程序的资源,因此你始终需要设置限制。

相应的解决工具

并非此类别中的所有工具都是一样的。 Containerd (Docker产品的一部分)和CRI-O是标准的容器运行时实现。

然后,有一些工具可以将容器的使用,扩展到其他技术,例如Kata,它允许你将容器作为VM运行。其他目标旨在解决与容器相关的特定问题,例如gVisor,它在容器和OS之间提供了额外的安全层。

类别 热门项目/产品
Container
MicroVM
containerd (graduated)
CRI-O (graduated)
Inclavare Containers (sandbox)
Lima (sandbox)
rkt (archived)
WasmEdge Runtime (sandbox)

云原生网络

是什么

容器通过云原生网络相互通信并与基础设施层通信。 分布式应用程序 具有多个组件,这些组件将网络用于不同的目的。

云原生网络类别中的工具,在现有网络之上创建一个专门用于应用程序通信的虚拟网络,称为覆盖网络( overlay network )。

解决了什么问题

通常,将在容器中运行的代码称为应用程序,但事实是,大多数容器仅包含较大应用程序的一小部分特定功能。诸如Netflix或Gmail之类的现代应用程序实际上由许多这些较小的组件组成,每个组件都在其自己的容器中运行。为了使所有这些独立的部分充当一个有凝聚力的应用程序,容器需要彼此私下通信。此类工具提供该专用通信网络。

此外,容器之间流动的数据和消息可能包含敏感或私有数据。这导致了其他要求,例如为各种组件提供隔离以及检查流量以识别网络问题的能力。由于云原生网络使用软件来控制、检查和修改数据流,因此管理、保护和隔离容器之间的连接要容易得多。

在某些情况下,您可能希望扩展容器网络和网络策略(例如防火墙和访问规则),以允许应用程序连接到在容器网络外部运行的虚拟机或服务。云原生网络的可编程性和声明性使这成为可能。

如何解决

容器网络接口(CNI)为容器化应用程序提供联网功能。有些工具(例如Flannel)相当简单,可提供与容器的基本连接。其他诸如NSX-T等提供了完整的软件定义网络层,可为每个Kubernetes命名空间创建一个隔离的虚拟网络。

容器网络至少需要为Pod(在Kubernetes中运行容器化的应用程序)分配IP地址,以允许其他进程访问它。

相应的解决工具

与存储类似,CNI(容器网络接口)在很大程度上实现了该领域的多样性和创新,该项目标准化了网络层向 Pod 提供功能的方式。

为你的Kubernetes环境选择正确的容器网络至关重要,并且你有许多工具可供选择。Weave Net,Antrea,Calico和Flannel均提供有效的开源网络层。它们的功能千差万别,你的选择应最终由你的特定需求决定。

此外, 许多供应商已准备好使用软件定义网络( Software Defined Networking ,SDN)工具来支持和扩展你的Kubernetes网络,这些工具使你可以深入了解网络流量,执行网络策略,甚至将容器网络和策略扩展到更广泛的数据中心。

类别 热门项目/产品
SDN
Network Overlay
CNI
Antrea (sandbox)
Cilium (incubating)
CNI-Genie (sandbox)
Container Network Interface (CNI) (incubating)
FabEdge (sandbox)
Kube-OVN (sandbox)
kube-vip (sandbox)
Network Service Mesh (sandbox)
Submariner (sandbox)

我们对运行时层的概述到此结束,该层提供了容器在云原生环境中运行所需的所有工具:

  • • 云原生存储:使应用程序能够轻松快速可靠地访问运行所需的数据

  • • 容器运行时:能够创建并启动执行应用程序代码的容器的

  • • 云原生网络:为容器化应用程序提供通信连接。

在我们的下一篇文章中,我们将重点讨论业务流程和管理层,这是如何将所有这些容器化应用程序作为一个组进行管理的。

原文作者:云原生AI百宝箱;如有侵权,请联系管理员删除。

请登录后发表评论 登录
全部评论

注册时间:2023-06-25

  • 博文量
    70
  • 访问量
    34369