云原生技术的综合指南
云原生技术有各种各样的形式和规模。它们都具有某些关键特征,例如使用松耦合体系结构和在分布式环境中运行的能力。除此之外,云原生技术以不同的方式工作,解决不同的挑战。
因此,掌握云原生计算需要熟悉许多平台和工具。本文将介绍5个这样的云原生DevOps技术,解释它们是如何工作的,以及为什么您可能希望或不希望将它们包含在您的云原生策略中。
1.容器运行时
容器运行时是执行容器的软件。因此,容器运行时是任何包含容器的云原生环境的基本组件之一。
源
也就是说,不要将容器运行时与容器化软件堆栈的其他部分混淆,这一点很重要。容器运行时只是运行容器所需的几种技术或资源之一。2022世界杯阿根廷预选赛赛程其他包括容器映像(包含由容器运行时执行的代码)和容器注册表(存储容器映像)、容器编排器(管理容器)。
现在有许多可用的容器运行时。常见的例子包括:
- 码头工人引擎
- Containerd
- LXC
- Runc
类的运行时规范兼容的任何运行时开放集装箱倡议(OCI)是一个定义容器技术标准的社区组织,它将处理符合OCI标准的任何容器映像。这意味着,通常情况下,您使用的容器运行时不会影响您可以运行的应用程序。
另一方面,用于运行时的工具各不相同。因此,实际执行容器的方式将取决于所使用的运行时。如果使用协调器,它还可能受到正在运行的协调器的影响。
例如,如果你使用Docker作为你的容器运行时,并且你没有使用单独的编排系统,你可以用一个简单的Docker启动命令来运行容器:
Docker start container_name
或者,如果你正在使用runc,你可以使用runc CLI工具启动一个容器:
或者,如果您正在使用LXC:
如果使用Kubernetes这样的编排系统部署容器,通常不会通过与运行时交互直接从命令行启动容器。相反,您将配置一个容器Kubernetes中的RuntimeClass,它告诉Kubernetes在启动pod时使用哪个运行时。例如:
apiVersion: node.k8s.io / v1
: RuntimeClass
元数据:
# RuntimeClass将被引用的名称。
# RuntimeClass是一个非命名空间资源。
名称:myclass
#对应的CRI配置名称
处理程序:myconfiguration
然后你可以为每个Pod指定一个RuntimeClass:
:豆荚
元数据:
名称:mypod
规范:
runtimeClassName: myclass
#……
当您为Pod配置RuntimeClass时,Kubernetes将使用您指定的运行时(假设运行时安装在节点上)自动执行该Pod。一旦配置了RuntimeClass,就不需要手动启动容器,甚至不需要过多考虑运行时。可以说,Kubernetes在“底层”管理运行时。
2.Kubernetes
与容器运行时一样,Kubernetes与云原生计算密切相关。由于Kubernetes是一个开源的容器编排平台,它可以管理容器在服务器集群中的运行位置。它还尝试重新启动失败的容器,在服务器之间移动容器以保持负载平衡,等等。
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项目开发的轻量级发行版:
安装minikube-linux-amd64 /usr/local/bin/minikube
minikube开始
此时,您将拥有一个直接在本地系统上运行的单节点Kubernetes集群。您可以使用kubectl与它交互。Minikube不是为生产部署而设计的,但如果您只是想通过与节点交互或部署应用程序来摆弄Kubernetes,它是一个方便的工具。
3.Serverless计算
无服务器计算是一种云原生技术,它允许您按需执行应用程序,而不必按照传统的方式将它们安装在服务器上。
无服务器计算的好处主要有两个:
- 它节省了时间和精力,因为它消除了工程师安装应用程序或配置应用程序托管环境的需要。
- 它可以节省资金,因为您只需为代码实际运行的时间付费。对于传统的云计算服务,您必须为服务器运行的总时间付费,无论在这段时间内是否有任何应用程序处理请求。
现在有各种各样的无服务器计算服务。大多数在公共云环境中作为托管服务运行,但您也可以使用OpenWhisk或OpenFaaS等平台在本地或自管理的云基础设施上设置无服务器环境。
当今最流行的无服务器技术可能是AWS Lambda,它是亚马逊云的一部分。因为Lambda包括主机硬件和无服务器执行软件,所以使用该服务就像以下几个步骤一样简单:
- 在AWS控制台中上传应用程序代码(称为无服务器功能)。
- 在控制台中,根据您上传的代码创建一个函数。
- 配置触发器,它定义函数应该在何时运行。
与其他云原生技术相比,无服务器功能的一个主要限制是,通常很难将功能从一个无服务器计算平台(如AWS Lambda)迁移到另一个(如Azure functions)。解决这一挑战的一种方法是在平台上使用通用的打包格式Artifactory,然后根据需要将功能从那里部署到不同的无服务器计算引擎。
4.负载平衡
大多数云原生托管环境包括多个服务器,工作负载分布在多个服务器上。在这样的分布式环境中,您需要一种方法来确定应该将哪些应用程序请求定向到哪些服务器。您希望以这样一种方式平衡应用程序负载,使其均匀地分布在您的服务器上,并避免在其他服务器利用率不足的情况下,一台服务器变得不堪重负。
负载平衡器解决了这一需求。负载平衡器自动确定如何跨服务器集群分发应用程序请求。
有许多类型的负载平衡器可用。有些是为特定类型的负载平衡而设计的,比如网站的负载平衡。其他是通用负载平衡器。此外,一些负载平衡器(如AWS ELB)内置于公共云环境中,而其他负载平衡器则是独立的解决方案。
一个流行的通用的、与基础设施无关的负载平衡器是NGINX。要使用它,首先需要在一个设备上安装NGINX,该设备将作为服务器集群和外部应用程序请求之间的接口。
然后,创建一个服务器组定义,该定义对应于您希望NGINX为其提供负载平衡的服务器集群。例如:
上游后端{
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允许您将事件作为数据流公开。要使用它,首先使用包管理器安装它,或者使用以下命令下载源代码:
Tar -xzf kafka_2.13-3.1.0.tgz
cd kafka_2.13-3.1.0
然后,运行它:
bin / kafka-server-start.sh配置/服务器。在单独的终端中运行该命令。
接下来,你必须定义一个“主题”,这是一组你希望Kafka记录的事件。例如:
然后,用事件填充主题。您可以通过以下命令手动输入事件:
当然,在大多数生产环境中,您不会手动输入事件数据。你可以使用一个工具,比如卡夫卡连接,它自动从数据库或应用程序指标等来源摄取事件。
云原生计算的多种方法
构建云原生环境不需要使用特定的技术集。您可以使用容器、无服务器功能、事件流或所有这些的组合来运行云原生应用程序。您可以使用Kubernetes之类的编排器,也可以选择手动编排应用程序(尽管在大规模环境中没有这种做法)。你也可以跨服务器集群部署应用程序,使用像NGINX这样的负载平衡器来管理传入的请求,但负载平衡对于云原生计算来说并不是严格必要的。
以上所述说明了云原生计算有很多方法。最适合您的工具和技术取决于您正在部署的应用程序类型、您是否希望管理自己的基础设施以及您希望对云原生环境进行多大程度的控制等因素。