云原生技术综合指南

JFrog支持
2022-07-06 09:17

云原生技术有各种各样的形状和大小。它们都具有某些关键特征,例如使用松散耦合的体系结构和在分布式环境中运行的能力。然而,除此之外,云原生技术以不同的方式工作,解决不同的挑战。

因此,掌握云原生计算需要熟悉许多平台和工具。本文将介绍五个这样的例子云原生DevOps技术,解释它们是如何工作的,以及为什么您可能希望或不希望将它们包括在您的云原生策略中。

1 .容器运行时

容器运行时是执行容器的软件。因此,容器运行时是任何包含容器的云原生环境的基本组件之一。
用户添加图片
来源://m.si-fil.com/knowledge-base/the-basics-a-beginners-guide-to-docker/

也就是说,不要将容器运行时与容器化软件堆栈的其他部分混淆,这一点很重要。容器运行时只是运行容器所需的几种技术或资源之一。2022世界杯阿根廷预选赛赛程其他包括容器映像(包含由容器运行时执行的代码)和容器注册表(存储容器映像),容器编排器(管理容器)。

现在有许多可用的容器运行时。常见的例子包括:

  • 码头工人引擎。
  • Containerd。
  • LXC。
  • Runc。

类的运行时规范兼容的任何运行时开放货柜计划(OCI)是一个定义容器技术标准的社区组织,它将与任何符合OCI标准的容器映像一起工作。这意味着,通常情况下,您使用的容器运行时不会影响您可以运行哪些应用程序。

另一方面,用于运行时的工具是不同的。因此,实际执行容器的方式取决于所使用的运行时。如果您正在使用某个编排器,那么它也可能受到正在运行的编排器的影响。

例如,如果你使用Docker作为容器运行时,并且你没有使用单独的编配系统,你可以使用简单的Docker start命令运行容器:
Docker start container_name

或者,如果你使用runc,你可以使用runc命令行工具启动一个容器:

运行containerid

或者,如果您正在使用LXC:

lxc-start容器

如果使用Kubernetes等编配系统部署容器,通常不会通过与运行时交互直接从命令行启动容器。相反,您应该配置一个容器Kubernetes中的运行类,它告诉Kubernetes在启动Pods时使用哪个运行时。例如:

# RuntimeClass定义在node.k8s中。io API组
apiVersion: node.k8s.io / v1
: RuntimeClass
元数据:
将引用RuntimeClass的名称。
# RuntimeClass是非命名空间资源。
名称:myclass
#相应CRI配置的名称
处理程序:myconfiguration

然后你可以为每个Pod指定一个RuntimeClass:

apiVersion: v1
:豆荚
元数据:
名称:mypod
规范:
runtimeClassName: myclass
#……

当您为Pod配置RuntimeClass时,Kubernetes将使用您指定的运行时自动执行Pod(假设运行时安装在您的节点上)。一旦配置了RuntimeClass,就不需要手动启动容器,甚至不需要过多考虑运行时。可以说,Kubernetes在“底层”管理运行时。

# 2: Kubernetes

像容器运行时一样,Kubernetes与云原生计算紧密相连。由于Kubernetes是一个开源的容器编排平台,它可以管理容器在服务器集群中的运行位置。它还尝试重新启动失败的容器,在服务器之间移动容器以保持负载平衡,等等。

用户添加图片
来源://m.si-fil.com/blog/the-3-kubernetes-essentials-cluster-pipeline-and-registry/

Kubernetes并不是唯一可用的编配工具,还有替代方案,如Docker Swarm和HashiCorp Nomad。然而,Kubernetes是迄今为止最受欢迎的容器编排解决方案。如果您使用容器来构建云原生环境,那么您可能会使用Kubernetes来管理它们。

使用Kubernetes的方式在一定程度上取决于您使用的发行版。一般来说,有三种类型的Kubernetes发行版可供选择:

  • 管理在云中运行的Kubernetes服务,如AWS EKS和Azure AKS。
  • Kubernetes发行版可以安装在任何地方,但这需要用户付出更多的管理工作,比如Rancher或OpenShift。
  • “轻量级”Kubernetes发行版,设计用于在小型设备(如笔记本电脑)上良好运行。

使用托管服务是开始使用Kubernetes的最简单方法,因为您不需要提供自己的硬件,并且软件是在SaaS环境中为您预安装的。也就是说,托管的Kubernetes服务比自我管理的发行版提供更少的控制。

至于轻量级发行版,如果您正在寻找一种简单的方法在您的笔记本电脑或PC上测试Kubernetes,那么这些都是很好的解决方案。例如,你可以用几个简单的命令运行Minikube,这是Kubernetes项目开发的轻量级发行版:

wget https://storage.googleapis.com/minikube/releases/latest/minikube-linux-amd64
安装minikube-linux-amd64 /usr/local/bin/minikube
minikube开始

此时,您将在本地系统上直接运行一个单节点Kubernetes集群。您可以使用kubectl与它交互。Minikube不是为生产部署而设计的,但如果您只是想通过与节点交互或部署应用程序来摆弄Kubernetes,那么它是一个方便的工具。

#3:无服务器计算

无服务器计算是一种云原生技术,它允许您按需执行应用程序,而不必在传统意义上将它们安装在服务器上。

无服务器计算的好处主要有两个原因:

  • 它节省了时间和精力,因为它不需要工程师安装应用程序或配置应用程序托管环境。
  • 它可以节省资金,因为您只支付代码实际运行的时间。对于传统的云计算服务,您必须为服务器运行的总时间付费,无论在这段时间内是否有任何应用程序处理请求。

目前有各种各样的无服务器计算服务可用。大多数在公共云环境中作为托管服务运行,但您也可以在本地或使用OpenWhisk或OpenFaaS等平台在自管理云基础设施上设置无服务器环境。

目前最流行的无服务器技术可能是AWS Lambda,它是亚马逊云的一部分。因为Lambda包括主机硬件和无服务器执行软件,使用该服务非常简单,只需以下几个步骤:

  1. 在AWS控制台中上传应用程序代码(称为无服务器功能)。
  2. 在控制台中,根据您上传的代码创建一个函数。
  3. 配置触发器,它定义函数应该在什么时候运行。

用户添加图片
来源:https://aws.amazon.com/getting-started/hands-on/run-serverless-code/

与其他云原生技术相比,无服务器功能的一个主要限制是,通常很难将功能从一个无服务器计算平台(如AWS Lambda)迁移到另一个平台(如Azure functions)。解决这一挑战的一种方法是在平台上使用通用的打包格式Artifactory,然后根据需要将功能从那里部署到不同的无服务器计算引擎。

#4:负载平衡

大多数云原生托管环境包括多个服务器,工作负载分布在它们之间。在这样的分布式环境中,您需要一种方法来确定哪些应用程序请求应该定向到哪些服务器。您希望以这样一种方式平衡应用程序负载,即在服务器之间均匀分布,并避免在其他服务器仍然未充分利用的情况下,一台服务器变得不堪重负。

负载均衡器解决了这一需求。负载均衡器自动决定如何在服务器集群上分发应用程序请求。

有许多类型的负载均衡器可用。有些是为特定类型的负载平衡而设计的,比如网站的负载平衡。其他是通用负载平衡器。此外,一些负载平衡器(如AWS ELB)内置于公共云环境中,而其他负载平衡器则是独立的解决方案。

NGINX是一种流行的通用的、与基础设施无关的负载均衡器。要使用NGINX,首先需要在设备上安装NGINX,作为服务器集群和外部应用程序请求之间的接口。

然后,创建一个服务器组定义,它对应于你希望NGINX提供负载平衡的服务器集群。例如:

http {
上游后端{
Server backend1.example.com weight=5;
服务器backend2.example.com;
服务器192.0.0.1备份;

然后你需要告诉NGINX如何平衡负载。在这个例子中,我们使用了“最少连接”技术,它告诉NGINX将请求直接发送到当前活动连接最少的服务器:

上游后端{
least_conn;
服务器backend1.example.com;
服务器backend2.example.com;

有了这个配置,NGINX将持续跟踪集群中每个服务器上打开的连接数,并在请求出现时将每个传入请求发送到连接数最少的服务器。

5 .事件流

事件流是摄取持续更新的数据集并基于其采取行动的过程。在云原生计算上下文中,事件流可以用于各种任务,例如向上或向下扩展服务器基础设施或调用无服务器函数。

Apache Kafka是一个广泛使用的开源事件流平台。Kafka允许您将事件作为数据流公开。要使用它,首先使用包管理器安装它,或者通过下载源代码:

wgethttps://dlcdn.apache.org/kafka/3.1.0/kafka_2.13-3.1.0.tgz
Tar -xzf kafka_2.13-3.1.0.tgz
cd kafka_2.13-3.1.0

然后,运行它:

bin / zookeeper-server-start.sh配置/ zookeeper.properties
bin / kafka-server-start.sh配置/服务器。#在单独的终端运行此命令。

接下来,你必须定义一个“主题”,这是一组你想让Kafka记录的事件。例如:

Bin /kafka-topics.sh -create -topic quickstart-events -bootstrap-server localhost:9092

然后,用事件填充主题。您可以手动输入事件:

Bin /kafka-console-producer.sh -topic quickstart-events -bootstrap-server localhost:9092

当然,在大多数生产环境中,您不会手动输入事件数据。你应该用一个工具,比如卡夫卡连接,它会自动从数据库或应用程序指标等来源摄取事件。

云原生计算的多种方法

构建云原生环境不需要使用特定的技术集。您可以使用容器、无服务器功能、事件流或所有这些的组合来运行云原生应用程序。您可以使用像Kubernetes这样的编排器,也可以选择手动编排应用程序(尽管在大规模环境中没有这样做)。你可以在服务器集群上部署应用程序,使用像NGINX这样的负载均衡器来管理传入的请求,但负载平衡对于云原生计算来说并不是严格必要的。

综上所述,有许多方法可以实现云原生计算。最适合您的工具和技术取决于一些因素,如您要部署的应用程序类型、您是否希望管理自己的基础设施以及您希望对云原生环境有多大的控制。