当前位置: 首页 > 科技观察

在Kubernetes上实现无服务器的5种方法

时间:2023-03-16 01:06:00 科技观察

企业想要使用Kubernetes创建一个运行无服务器功能的平台?这些框架展示了如何创建它。有人称之为“无服务器”或“事件驱动计算”或“功能即服务(FaaS)”,其理念是相同的:动态分配资源以运行各个功能,这些功能本质上是微服务,这些调用函数以响应事件。无服务器计算平台允许应用程序开发人员专注于应用程序而不是基础架构及其所有管理细节。大多数云计算提供商提供某种无服务器平台,但企业可以仅使用两个元素构建自己的平台。其中之一是Kubernetes,容器编排系统已成为构建组件化弹性应用程序的标准平台。第二个是用于在Kubernetes中构建无服务器应用程序模式的许多系统中的任何一个。大多数Kubernetes无服务器框架都具有以下共同特征:在本地或远程部署到任何支持Kubernetes的环境,包括OpenShift等。支持任何语言编写的运行代码,框架中预封装了一些常用的运行代码。代码执行由各种事件触发:HTTP端点、队列消息。在Kubernetes上构建无服务器的主要优势之一是更好地控制底层平台。许多无服务器产品限制了它们运行的??功能的行为,有时使它们对于某些类型的应用程序不切实际。使用Kubernetes,企业可以创建满足其需求的Serverless平台,将基础设施留给Kubernetes运营商,让开发人员专注于编写基础代码。以下是将无服务器功能引入Kubernetes的五个主要项目:1.FissionFission由Managed-Kubernetes公司Platform9创建和维护。它的主要优点是允许企业在不构建容器的情况下创建FaaS应用程序,只需提供定义文件。Fission可以安装或不安装Helm图表,并且可以安装在两个版本中。有一个带有消息队列和支持日志记录的InfluxDB的完整版本,以及一个具有基本功能的精简版本。前者是为生产部署而设计的,而后者是为测试而设计的。要将代码添加到Fission部署,请使用基于YAML的规范文件。使用Fission的命令行工具,企业可以为函数和用于触发其入口点的路由创建YAML文件。spec文件还允许企业提供带有环境变量、辅助容器、卷和Kubernetes容错控制的代码。Fission还提供“工作流程”。工作流由Helm图表安装,将一个函数的输出传递给另一个函数。这些功能甚至不必说同一种语言。请注意,尽管工作流系统支持许多常见的原始二进制类型以减少开销(例如整数或通用字节流),但这是以性能成本为代价的,因为每个函数的输出都呈现为交换格式。最初与FaaS相关的一个缺点是,在第一次调用函数时,启动与函数关联的容器会有明显的延迟。Fission使容器保持温暖,以最大限度地减少函数首次运行时的延迟。Fission为开发人员和管理人员提供了额外的好处。服务可以部署到没有外部互联网访问的集群中,代码可以根据需要重新加载到集群中。还可以记录和回放功能活动以帮助调试。Fission项目是在高度自由的Apache许可下提供的,因此可以根据需要随意修改它。2.KnativeKnative最初是由谷歌创建的,用于在Kubernetes上运行无服务器应用程序,而Knative专注于生产中无服务器部署的通用模式。但是,Knative需要直接的专业知识来管理许多Kubernetes组件才能有效使用。除了Kubernetes之外,Knative还需要路由系统或服务网格(例如Istio),但也可以使用其他选项(例如Ambassador和Gloo)。这意味着更多的工作,但该项目提供了有关在各种云计算服务和Kubernetes环境(包括普通Kubernetes)中使用每个选项的详细指导。Knative主要通过利用或扩展现有的Kubernetes工具和功能来工作。应用程序或功能通过YAML文件配置,并作为企业构建的Docker容器交付。可以通过kubectl命令行应用程序添加、修改或删除定义。Knative应用的指标需要Grafana。可以使用Knative自己的自动缩放器或任何其他与Kubernetes兼容的缩放器(包括自定义缩放器)来完成缩放。Knative正在大力发展,其许多专用工具仍处于粗糙状态。其中包括knctl,它是Knative的专用CLI,如果企业只想专注于Knative,可以避免使用Kubernetes的其他工具来管理Knative的麻烦。通过消除容器构建步骤在Knative上构建Go应用程序的工具。3.KubelessKubeless是由Bitnami创建的,Bitnami是一个为通用Web应用程序堆栈提供便捷安装程序的开发人员。Kubeless使用Kubernetes原生的自定义资源定义来处理函数,因此Kubernetes和Kubeless函数之间的抽象层次略有降低。大多数常见语言运行时都带有平台:.NET、Java、Python、Node.js、PHP、Ruby、Go,甚至是用于云原生开发的新Ballerina语言。运行时只是Docker镜像,尽管Kubeless具有使用Dockerfile构建自定义运行时的特定打包格式。另一个方便的Kubeless功能是它的CLI,它具有与AWSLambdaCLI相同的命令。如果您想从AWSLambda迁移但又想保留一些现有的管理脚本,或者不必学习一整套新的命令,这会很方便。Kubeless还充当无服务器框架的插件,无服务器框架是一种用于在各种体系结构上构建无服务器应用程序的系统。如果企业已经在使用Serverless或Kubeless,添加其中一个比使用另一个更容易。Kubeless还充当无服务器框架的插件,无服务器框架是一种用于在各种体系结构上构建无服务器应用程序的系统。如果企业已经在使用Serverless或Kubeless,添加其中一个比使用另一个更容易。4.OpenFaaSOpenFaaS的主题是简化无服务器功能。简单来说,开发人员的意思是“没有比部署Docker容器更难的了”。OpenFaaS可以部署到Kubernetes或DockerSwarm集群(用于本地测试或低需求使用)。企业可以使用OpenFaaSCLI构建、推送和部署Docker镜像到集群中以运行功能。现有模板提供了预构建的方法来部署使用Go、Python、Node.js、.NET、Ruby、Java或PHP7编写的应用程序,尽管企业始终可以自己采用应用程序。OpenFaaSCLI还为企业提供了一种在集群中管理机密的方法,而内置的WebUI允许企业创建和管理新功能。OpenFaaS的另一个版本OpenFaaSCloud,重新封装了OpenFaaS以提供多种开发者特性,包括与Git的集成(包括自托管版本的GitHub和GitLab)、持续集成(CI)/持续部署(CD)、机密管理、HTTPS和将事件提供给Slack和其他服务器的能力。OpenFaasCloud可作为免费的开源产品使用,并具有目前可免费使用的托管版本。5.OpenWhiskApacheOpenWhisk被称为通用无服务器平台。Kubernetes只是可用于在OpenWhisk中运行容器的几个选项之一,因为OpenWhisk还支持Mesos和DockerCompose。尽管如此,Kubernetes是首选,因为它具有用于应用程序部署的工具,尤其是Helm图表。IBMCloudFunctions基于OpenWhisk项目,因此也可以使用OpenWhiskCLI命令。与大多数其他无服务器Kubernetes框架不同,OpenWhisk是用Scala语言而不是Go编写的(Kubernetes和Docker都是用Go编写的)。如果企业想要破解OpenWhisk并且只有Go经验,这只会是一个问题。OpenWhisk预打包了最流行的应用程序运行时选项:Java、Node.js、Python、Ruby、PHP和.NET。此外,还包括许多深奥和尖端的选项:Scala、Ballerina、Swift和Rust。运行时只是一个Docker容器,因此很容易提供自己的容器。一个方便的OpenWhisk部署功能是“压缩操作”。使用代码包的清单文件将代码和辅助文件的.zip存档指向OpenWhisk,OpenWhisk将从中创建操作。OpenWhiskCLI还包括将代码目录树转换为此类存档的工具。服务包目录使企业可以轻松地将应用程序插入常见的第三方产品,例如GitHub、Slack、ApacheKafka或Jira。