首页 > 数据库 > 数据库开发技术 > 叮,你收到一份来自CNCF的云原生景观简介
点击上方蓝字 👆关注公众号,别让消息溜走
后台回复【加群】,与牛人互动不停
CNCF (Cloud Native Computing Foundation) 是一个非营利性开源组织,成立于 2015 年,致力于推广和维护云原生计算。该组织通过开发和维护一系列开源项目和工具,促进了云原生技术的广泛应用和发展。
云原生计算是一种使用容器、微服务、自动化操作和云基础设施的方式来构建和部署应用程序的方法。它的目标是提高应用程序的可扩展性、可靠性和安全性。CNCF 在推广云原生技术的同时,也为企业和开发者提供了各种支持和服务。
CNCF 的重要性贡献包括:
维护和发展一系列云原生技术项目:CNCF 管理了众多的开源项目,其中最著名的是 Kubernetes,这是一款开源的容器编排系统,被广泛应用于生产环境中。除了 Kubernetes,CNCF 还维护和发展了许多其他的云原生项目,包括服务网格、容器运行时、容器镜像等等。
推广云原生技术和理念:CNCF 组织了各种活动和会议,包括 KubeCon + CloudNativeCon,这是一个面向云原生计算的全球性大会,旨在促进云原生技术的交流和发展。此外,CNCF 还提供了培训、认证和咨询等服务,帮助企业和开发者了解和应用云原生技术。
发布云原生技术调查报告:CNCF 每年都会发布云原生技术调查报告,这是业界最权威的云原生技术趋势报告之一。该报告调查了全球各地的 IT 专业人士,提供了有关云原生技术的最新数据和趋势。
提供认证和合规性标准:CNCF 提供了一系列认证和合规性标准,帮助企业和开发者确保其使用的云原生技术符合安全和合规性要求。
CNCF 是云原生计算领域的重要组织之一,其维护和推广的开源项目和技术,对于推动云原生计算的应用和发展有着重要的作用。
当你在研究云原生应用程序和技术,则可能会看到过云原生计算基金会(CNCF)提供的云原生景观图。这是由 CNCF 与 Redpoint Ventures 和 Amplify Partners 的合作开发的云原生景观图。它标准化了技术,服务和工具,例如容器化,编排,CI/CD 等。组织可以利用此云原生景观图,来设计和开发云原生应用。

云原生景观图
云原生景观图由四个主要层和两个支持层组成。每一层进一步细分为,由工具和服务组成的云原生应用程序。
1 云原生景观的四层
在第一层中,是配置云原生基础架构的工具。
第二层和第三层,是添加运行和管理应用程序所需的工具,例如运行时和编排层。
在第四层,是用于定义和开发应用程序的工具,例如数据库,镜像构建和 CI/CD 工具。

云原生景观始于基础架构,每一层都更接近实际应用程序。
1.1 供应层(Provisioning)

供应层
基础设施即代码是一种将基础设施的管理和配置作为代码的方式,以便更轻松地管理基础设施并实现自动化,可实现自动扩展和按需资源配置。这有助于更快地进行配置,开发,部署和测试。有一些配置工具可帮助维护整个应用程序环境中的标准,合规性,策略和安全性。
Provisioning 指的是创建和强化云本机应用程序基础所涉及的工具。它涵盖了从自动化基础结构的创建,管理和配置镜像扫描,镜像签名和存储镜像的所有内容。除此之外,它还具备在应用程序和平台中构建身份验证授权以及处理密钥分发的工具,资源调配和安全领域的工具。
在供应层中,你会看到:
自动化和配置管理 (Automation &configuration ) 有助于自动化基础结构和部署。Terraform 之类的工具,使用配置文件来自动进行多个云环境中的基础架构配置。Ansible 之类的工具,能够提供应用程序部署和服务内编排。
容器仓库(Container Registry) 是 Docker 镜像的集中存储库,应用程序可以在其中存储和检索镜像。组织可以使用公共(Docker Hub)或私有仓库来管理镜像。有一些常用的镜像仓库,例如 Docker Registry,Kraken,Amazon ECR 等。
安全性和合规性 ( Security &compliance ) 是云供应商和云原生应用程序团队的共同责任。应用程序团队可以利用最佳实践和工具来保护应用程序和数据的安全,例如 TUF,Clair,kube-hunter,terrascan 等。
密钥管理(Key management) 是一种身份和访问管理(IAM)中使用的密钥加密方法 ,以确保只有授权的用户才能访问该应用程序。有一些有用的 IAM 工具,可帮助为云原生应用程序提供加密方法,例如 CyberArk,ORY,Keycloak。
以下是供应层中的一些常见工具和技术:
自动化运维工具:自动化运维工具可以帮助管理员管理和维护云原生环境中的基础设施。常见的自动化运维工具包括 Puppet、Chef、Saltstack 等。
资源调度工具:资源调度工具可以帮助云原生环境中的管理员自动化分配和管理资源。常见的资源调度工具包括 Mesos、Nomad 等。
集群管理工具:集群管理工具可以帮助管理员管理云原生环境中的整个集群,包括节点的状态、健康状况等。常见的集群管理工具包括 Rancher、Portainer 等。
在云原生应用程序中,供应层的工具和技术通常与其他层的工具和技术紧密集成,以实现自动化和可靠的应用程序部署和管理。
这些工具使工程师可以了解所有基础架构的细节,以便根据需要进行调整,来确保它们的一致性和安全性。
1.2 运行时层(Runtime)

运行时层
在云原生中,可以动态配置运行时资源,例如计算,存储和网络。CNCF 推荐了一组工具,平台和服务,他们可以满足云原生需求,并提供诸如可伸缩性,高性能和容错性之类的属性。
运行时是云原生中最可能引起混淆的术语之一。与 IT 中的许多术语一样,没有严格的定义,可以根据上下文使用的不同来定义。从狭义上讲,运行时是运行应用程序的特定沙箱环境(应用程序运行所需的最低限度)。从广义上讲,运行时是应用程序运行所需要的任何工具。
在 CNCF 云原生环境中,运行时重点放在对容器化应用特别重要的组件上。它们包括:
云原生存储(Cloud native storage):为容器化的应用程序提供了虚拟化磁盘或持久性。提供分布式,虚拟化,弹性存储。提供了各种开源和商业产品,例如 Minio,Rook,Rind,NetApp,Amazon S3 等。
容器运行时(Container runtime):运行容器并管理容器镜像,为容器提供了约束,资源和安全性等。例如 Docker,Contained,Firecracker,lxd 等。
云原生网络(Cloud native networking):分布式系统的节点通过其进行连接和通信的网络。可实现网络资源的编排和管理,它包括网络资源的扩展,分配和释放。例如 CNI, Network Service Mess, ,Kube-OVN,Ligato 等。
1.3 编排和管理层(Orchestration & Management )
编排通过使用正确的工具和服务集自动触发和管理工作流,有助于实现可伸缩性和弹性。该层涵盖与通信和容器编排相关的技术,服务和工具。

编排和管理层
一旦按照安全性标准自动搭建了基础结构(供应层),并设置了应用程序需要运行的工具(运行时层),工程师就需要知道如何编排和管理其应用程序。
编排和管理层,把所有容器化应用程序作为一个组进行管理。还要确定是否需要和其他服务相互通信并进行协调。同时,云原生应用程序具有良好的可扩展性。
在这一层中,包括:
编排和调度( Orchestration & scheduling ): 当管理容器成为繁琐的任务时,调度和编排便成为了问题,就需要部署和管理容器集群,以确保它们具有弹性,松耦合和可伸缩性。。Orchestrated 平台和工具可提供自动扩展,回滚,负载均衡,监视等功能,从而实现操作敏捷性,帮助管理容器集群。Kubernetes,Docker Swarm,Amazon ECS 是一些流行的 Orchestrated 平台和服务。
服务发现( Coordination and service discovery ): 云原生应用程序可以具有多个微服务,因此动态配置和发现它们至关重要。有一些工具(例如 Eureka,ZooKeeper,Nacos 等)可以帮助动态配置和发现微服务。
远程过程调用(RPC): 使应用程序可以远程调用客户端/服务器应用程序中使用的过程/功能。有一些工具(例如 Apache Thrift,gRPC 和 TARS 等)可帮助实现此技术。
服务代理( Service proxy ): 是处理服务间通信。代理的唯一目的是对服务通信施加更多控制,它不会对通信本身添加任何内容。这些代理对于下面提到的服务网格至关重要。有一些工具(例如 NGINX,envoy,NOVA 等)可帮助实现服务代理。
API 网关: 一个抽象层,外部应用程序可以通过它进行通信。为 API 调用提供了一个入口点,将请求重定向到相应的服务,并返回适当的结果。它使身份验证,负载均衡,安全性和监视易于处理。MuleSoft,Kong,3SSCALE 是流行的 API 网关。
服务网格( Service mesh ): 在某种程度上类似于 API 网关,它是应用程序通过其进行通信的专用基础结构层,但是它提供了策略驱动的服务的通信。此外,它可能包括流量加密、服务发现、到应用程序可观察性的所有内容。主要管理服务代理(sidecar)之间的网络。它有助于保护和监视微服务。Istio,Consul 和 Linkerd 是一些常用的 Service mesh 工具。
1.4 应用程序定义和开发层(Application Definition & Development)

应用程序定义和开发层
顾名思义,应用程序定义和开发层,是侧重于使工程师能够构建应用程序并使其运行的工具。
应用程序定义和开发层重点介绍应用程序开发下的技术和工具,其中包括构建/部署自动化,镜像构建,数据发布和存储。它使团队能够开发响应式,弹性和可扩展的应用程序。
在此类别下,你会看到:
数据库( Databases):使应用程序能够以有组织的方式收集数据。提供了广泛的开源和商业数据库产品,例如 Cassandra,Couchbase,Redis,MongoDB 等。
流和消息传递( Streaming & messaging):使应用程序能够发送和接收消息(事件和流)。它不是网络层,而是用于对消息进行排队和处理的工具。是基于 pub/sub 模型的中间件服务,可在不同节点之间进行异步通信。一些广泛使用的产品是 RabbitMQ,Kafka,Beam,Amazon Kinesis 等。
应用程序定义和镜像构建( Application definition &image build ):是帮助配置,维护和运行容器镜像的服务。是一个核心构建块,在自动部署中起着重要作用。它涉及应用程序的打包, docker 说明,环境信息等。一些流行的工具包括 Helm,Packer,Chef 等。
持续集成和持续交付(CI/CD):使开发人员能够自动测试代码,自动打包,甚至还可以自动部署到生产环境中。它使开发团队更加敏捷,更频繁,更可靠地交付。工具包括 Jenkins,Bamboo,AWS 代码流水线等。
以上组件和工具的集合构成了云原生应用程序的开发和部署环境,有助于提高应用程序的可靠性、可扩展性和安全性。
2 跨所有层运行的工具
接下来,我们将介绍在所有层上运行的两列--可观察性和分析。

2.2 可观察性与分析(Observability &Analysis)
应用程序应提供适当的数据以使系统可观察。日志,指标,运行状况检查,分布式跟踪等可以用于数据分析,问题定位和发出警报。
为了降低 MRRT(解决软件问题的时间),你需要监视和分析应用程序的各个方面,以便立即发现并纠正任何异常情况。在复杂的环境中故障随时会发生,而这些工具将通过帮助尽快识别和解决故障来帮助减轻故障的负面影响。由于此类别遍历并监视所有层,因此它在侧面,而不是嵌入在特定层中。
可观察性指的是,系统可以从其外部输出中被理解的程度。通过 CPU 时间、内存、磁盘空间、延迟、错误等来衡量,计算机系统都可以或多或少被观察到。分析是一项活动,你可以在其中查看这些可观察数据并理解它。
在这里你会发现:
日志记录( Logging):应用程序会发出稳定的日志消息流,以描述它们在给定时间所做的事情。这些日志消息捕获系统中发生的各种事件,例如失败或成功的操作、审计信息或健康事件。相应的解决工具有 Fluentd ,Elastic ,Logstash 等。
监视( Monitoring ):指对应用程序进行检测以收集、汇总和分析日志和指标,以提高我们对系统行为的理解。主要是收集指标(系统参数,例如 RAM 可用性等),监视运行状况。相应的解决工具有 Prometheus,ZABBIX,Dynatrace,Nagios 等。
跟踪( Tracing ):跟踪是日志记录的一种特殊用途,它允许你的请求通过分布式系统时,跟踪请求的路径。它比监视更进一步,这与服务网格相关。相应的解决工具有 Spring Cloud Sleuth,Zipkin 等。
混沌工程( Chaos engineering):是对生产中的软件进行测试的工具,可以在交付之前识别缺陷并加以修复。相应的解决工具有 Litmus, Chaos Mesh, Gremlin 等。
2.3 平台类(Platforms)
到目前为止,我们已经看到,所讨论的每个类别都解决了一个特定的问题但并不能提供您管理应用程序所需的一切。您需要将编排工具、容器运行时、服务发现、网络、API 网关等将来自不同层的不同工具捆绑在一起形成一个平台,以解决更大的问题。
这些平台本身并没有什么新东西。他们所做的一切都可以通过这些层或可观察性中的一种工具来完成。您当然可以构建自己的平台,事实上,许多组织都在这样做。然而,可靠、安全地配置和微调不同的模块,同时确保所有技术始终保持最新状态并修补漏洞并非易事——您需要一个专门的团队来构建和维护它。如果您没有必要的资源或专业知识,您的团队可能最好使用现有的平台。对于某些组织,尤其是那些拥有小型工程团队的组织,平台是采用云原生方法的唯一途径。
你可能会注意到,所有类别都围绕 Kubernetes 展开。这是因为 Kubernetes 是最受欢迎的云原生编排工具。
平台可分为四类:
Kubernetes 发行版:发行版是指供应商采用核心 Kubernetes,有时候进行了修改,并将其打包以进行重新分发。通常这需要查找和验证 Kubernetes 软件并提供一种机制来处理集群安装和升级。许多 Kubernetes 发行版包括其他专有或开源应用程序。例如:K3S,MicroK8s 和 Rancher 等。
托管 Kubernetes:通常 是由 AWS、Digital Ocean、Azure 和谷歌等基础设施提供商提供的一项服务,允许客户按需启动 Kubernetes 集群。云提供商负责管理 Kubernetes 集群的一部分,通常称为控制平面。它们类似于发行版,但由云提供商在其基础架构上进行管理。相应的解决工具有 AWS,阿里云,腾讯云等。
Kubernetes 安装程序:帮助用户在物理机或虚拟机上安装 Kubernetes。它们使 Kubernetes 安装和配置过程自动化,甚至可以帮助升级。Kubernetes 安装程序通常与 Kubernetes 发行版或托管 Kubernetes 产品结合或使用。相应的解决工具有 kubekey,kips,kubespray 等。
PaaS /容器服务:PaaS 是一种环境,允许用户运行应用程序而不必关心底层计算资源的详细信息。此类别中的 PaaS 和容器服务是为开发人员托管 PaaS 或托管他们可以使用的服务的机制。相应的解决工具有 portainer,Kyma 等。
云原生景观图涉及到多个层级和列,每个层级和列都有其独特的功能和作用,都有旨在解决相同或相似问题的不同工具,区别在于它们的实现和设计方法。
简而言之,供应层包括一些工具和技术,用于构建云原生基础设施。这些工具包括基础设施即代码工具、配置管理工具、安全工具等。在构建云原生基础设施之前,必须确保基础设施的可配置性和可管理性,因此配置层是非常关键的一层。
运行时层是云原生环境中最核心的一层,它涉及到容器运行时和相关的工具和技术。容器是云原生环境中的基本单元,因此容器运行时必须能够提供高效的容器运行和管理功能。此外,运行时层还包括一些相关的工具和技术,例如容器注册中心、容器网络、服务网格等。
编排和管理层包括一些工具和技术,用于编排和管理容器和应用程序。这些工具包括 Kubernetes、Docker Swarm、Apache Mesos、Nomad 等。编排和管理层是创建应用程序构建平台所需的关键工具,它可以自动化地管理容器的部署、扩展、负载均衡、故障恢复等任务。
应用程序和定义层包括一些工具和技术,用于创建、构建和部署应用程序。这些工具包括编程语言、应用程序框架、持续集成和交付工具等。应用程序和定义层是构建应用程序所需的关键工具,它可以帮助开发者快速构建和部署应用程序。
可观察性和分析列包括一些工具和技术,用于监视应用程序并在出现问题时进行标记。这些工具包括日志管理工具、监控工具、性能测试工具等。由于必须监视所有层,因此该类别贯穿所有层。
平台是一些工具和技术的集合,可以跨不同层的多个工具捆绑在一起,对其进行配置和微调,以便随时可用。这简化了云原生技术的采用,甚至可能是组织能够利用它们的唯一方式。例如,Cloud Foundry、OpenShift 等都是云原生平台。
总体来说,CNCF Landscape 涉及到多个层级和列,每个层级和列都有其独特的功能和作用。这些层级和列之间相互依存、相互构建,共同构成了一个完整的云原生技术生态系统。在实践中,不同组织在实现云原生技术时,通常会根据自身的需求和情况,选择合适的工具和技术,构建自己的云原生技术栈。
3 参考
[1] CNCF 云原生景观:https://landscape.cncf.io/ ( https://landscape.cncf.io/ )
原文作者:云原生AI百宝箱;如有侵权,请联系管理员删除。