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

在Kubernetes上实现无服务器化的五种方式_0

时间:2023-03-14 21:19:12 科技观察

在Kubernetes上实现Serverless的五种方式称为“功能即服务(functionsasaservice,FaaS)”。其背后的思想是:通过响应各种事件动态分配资源来调用或运行各种微服务(microservices)的功能。无服务器计算平台允许应用程序人员更多地关注应用程序本身,而不是基础架构及其所有管理细节。如今,大多数云服务提供商都提供相应的无服务器平台。当然,你也可以用两个元素搭建自己的平台。第一个是:Kubernetes,它是一个容器编排系统。作为一个标准化平台,它可以构建可扩展的组件化应用程序。第二个是在Kubernetes中构建无服务器应用程序模式的任何系统。目前,大多数Kubernetes无服务器框架具有以下共同特征:能够在本地或远程部署到任何支持Kubernetes的环境,包括OpenShift等环境。支持运行任何语言编写的代码,一些常用的运行时预封装框架。通过HTTP端点、队列消息或其他挂钩等各种事件触发代码执行。在Kubernetes上构建无服务器的主要优势之一是能够更好地控制底层平台。借助Kubernetes,您可以创建满足您需求的无服务器平台,让Kubernetes操作员负责基础设施,而开发人员可以专注于编写必要的代码。下面,我们将向您介绍五个在Kubernetes上实现Serverless功能的主要项目。它们是:FissionKnativeKubelessOpenFaaSOpenWhiskFissionFission由Kubernetes的子公司Platform9创建和维护。它的主要特点是不需要构建容器,只需要提供一个定义文件就可以创建一个应用程序。Fission的安装不一定需要Helmchart。通常,它有两个版本:完整版,带有消息队列,以及支持日志的InfluxDB;而精简版,只能提供基本的功能和服务。前者可以专门部署在生产环境中,后者仅供用户小范围试用。为了向Fission添加和部署代码,您可以使用基于YAML的规范文件。同时,Fission的命令行工具可以帮助你为不同的功能和路由入口的触发点创建YAML文件。此外,这些规范文件允许您为Kubernetes提供各种环境变量、辅助容器、卷和容错控制代码。当然,Fission也会提供“工作流(workflow)”。通过安装Helm图表,这些工作流将从一个函数输出并传递给另一个函数,即使这两个函数不使用相同的编程语言。值得注意的是,为了减少系统的开销,工作流系统默认支持整数、通用字节流等许多常见的原始二进制类型。但是每个功能函数在进行格式转换输出和提交时,还是会产生一定的性能开销。这种类型的FaaS的一个缺点是,当我们第一次调用一个函数时,其关联的容器会经历明显的延迟。因此,Fission需要通过“预热”容器来最小化此类延迟。此外,Fission可以为开发者和管理员提供的其他便利包括:将服务部署到无法访问外部互联网的集群中,按需热重载代码(hot-reloaded)到集群中,以及记录和回放函数的各种活动功能,从而协助开发人员进行调试。而且,由于Fission项目拥有自由的Apache许可证,用户可以免费修改它。Knative最初由谷歌创建,用于帮助用户在Kubernetes中运行各种无服务器应用程序。它主要关注生产环境中无服务器部署的通用模式。Knative在有效管理和利用多个Kubernetes组件方面积累了丰富的专业知识。为了管理Kubernetes,除了Istio等路由系统和服务网格之外,Knative还会借用Ambassador等其他选项。虽然这需要一些额外的设置工作,但该项目的详细指南已经涵盖了各种云服务,以及针对vanillaKubernetes等环境的说明。通过利用或扩展现有的Kubernetes工具和功能,Knative可以通过YAML文件配置各种应用程序和功能,并为您交付Docker容器。通过kubectl命令行可以实现对各种定义的增删改查。用户不仅可以使用Grafana获取Knative应用参数,还可以使用Knative自带的autoscaler或者其他兼容Kubernetes的scaler实现扩展。然而,Knative仍处于高级开发阶段,其许多专有工具仍处于起步阶段。其中,knctl是一个特殊的Knative命令行工具。它可以方便您使用其他Kubernetes工具来管理Knative。ko工具可用于在Knative中构建Go语言应用,减少构建容器的步骤。Kubeless由Bitnami创建,可帮助开发人员轻松安装各种常见的Web应用程序堆栈。Kubeless使用Kubernetes原生的各种自定义资源定义来处理各种功能。我们可以把它理解为Kubernetes比喻和Kubeless的各种功能之间的一个抽象层。Kubeless不仅支持.NET、Java、Python、Node.js、PHP、Ruby等大部分编程语言,还支持为云原生开发的Ballerina语言运行平台。这里的runtime是指各种Docker镜像。当然,Kubeless还有一种特定的包格式,使用Dockerfiles来构建其自定义运行时。Kubeless的另一个便利体现在它的CLI上。CLI有点类似于AWSLambda的CLI。使用它,您可以在离开AWSLambda的同时保留各种现有的管理脚本,而无需学习一整套新的命令。Kubeless还可以作为无服务器框架插件,在各种架构上构建无服务器应用程序。OpenFaaSOpenFaaS的目的是让开发者不再为部署Docker容器而烦恼。因此,它可以部署到Kubernetes以及用于本地测试或在低需求的DockerSwarm集群中。您可以使用OpenFaaSCLI构建、推送、部署各种Docker镜像到集群中运行相应的功能。虽然您可以完全自己发布它,但您也可以使用其用Python、Node.js、.NET、Ruby、Java或PHP7预先编写的现成模板来部署您的应用程序。此外,内置的WebUIOpenFaaSCLI还允许您创建各种新功能,以及管理集群中的密钥。作为OpenFaaS的另一个版本,OpenFaaSCloud为开发者重新封装了OpenFaaS的特性,整合了GitHub和自托管版本的GitLab,为Slack提供CI/CD、密钥管理、HTTPS、事件反馈能力。OpenFaasCloud是一个免费的开源产品,其托管版本仍然免费提供。OpenWhiskApacheOpenWhisk是一个通用的无服务器平台。OpenWhisk不仅支持在Kubernetes上运行容器,还支持Mesos和DockerCompose。OpenWhisk为Kubernetes提供Helm图表工具来部署各种应用程序。大家熟悉的IBMCloudFunctions是基于OpenWhisk项目的,所以可以直接使用OpenWhiskCLI的各种命令。与大多数其他无服务器Kubernetes框架不同,OpenWhisk是用Scala编写的,而不是用于编写Kubernetes和Docker的Go语言。所以你可能需要花一些时间去了解它的编程思想。在应用程序运行时选项方面,OpenWhisk封装了Java、Node.js、Python、Ruby、PHP和.NET。此外,其高级语言选项包括:Scala、Ballerina、Swift和Rust。由于其运行时是Docker容器类型,您可以轻松地使用它来实现自己的应用程序。在部署方面,OpenWhisk的一个便利功能是“zip操作”。它可以使用代码包的清单文件将代码zip包以及多个辅助文件指向OpenWhisk。然后,OpenWhisk可以基于此创建后续操作。同时,OpenWhiskCLI还可以通过工具将代码的目录树转化为归档文件。它的服务包目录使您可以轻松地将您的应用程序插入到常见的第三方产品中,例如GitHub、Slack、ApacheKafka或Jira。原标题:在Kubernetes上实现无服务器的5种方式,作者:SerdarYegulalp