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

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

译文
作者:陈峻编译 2020-01-18 09:44:35

云计算

服务器 在Kubernetes上构建无服务器的一个主要优点是:能够获得对于底层平台的更大控制权。通过Kubernetes,您可以创建一个满足自身需求的无服务器平台,从而让Kubernetes运维人员来负责该基础设施,而让开发人员更专注于必要的代码编写。

【51CTO.com快译】我们常听说的“无服务器化”,有时也被称为“事件驱动的计算(event-driven compute)”或被叫做“功能即服务(functions as a service,FaaS)”。其背后的思想是:为了响应各种事件,而通过动态分配资源,以调用或运行各项微服务(microservices)的功能。无服务器计算平台能够让应用程序人员更专注于应用程序本身,而不再是基础架构、及其所有的管理细节。

[[313278]]

如今,大多数云服务提供商都能够提供相应的无服务器平台。当然,您也可以通过两个要素来构建自己的平台。第一个是:Kubernetes,它是一种容器编排系统。作为一个标准化的平台,它能够构建可扩展的组件化应用程序。第二个是在Kubernetes中构建无服务器应用模式的任意系统。

目前,大多数Kubernetes的无服务器框架都具有以下的共同特点:

  • 能够从本地或远程部署到任何支持Kubernetes的环境中,包括OpenShift之类的环境。
  • 支持运行由任意语言编写的代码,并带有一些常见的运行时预包装(runtimes prepackaged)框架。
  • 通过HTTP端点、队列消息、或其他钩子等各类事件,来触发代码的执行。

在Kubernetes上构建无服务器的一个主要优点是:能够获得对于底层平台的更大控制权。通过Kubernetes,您可以创建一个满足自身需求的无服务器平台,从而让Kubernetes运维人员来负责该基础设施,而让开发人员更专注于必要的代码编写。

下面,我们向您介绍在Kubernetes上实现无服务器功能的五大主流项目。它们分别是:

  • Fission
  • Knative
  • Kubeless
  • OpenFaaS
  • OpenWhisk

Fission

Fission是由Kubernetes的子公司Platform 9创建和维护的。它的主要特点是:您无需构建容器,只要提供定义文件,即可创建应用程序。

Fission的安装并不一定需要Helm chart。通常,它具有两个版本:全面版,带有消息队列、以及支持日志的InfluxDB;而精简版,只能提供基本的功能与服务。前者可以被专门部署在生产环境中,而后者仅供用户小范围内试用。

为了将代码添加并部署到Fission中,您可以使用基于YAML的规范文件。同时,Fission的命令行工具能够帮助您,创建针对不同功能和路由入口触发点的YAML文件。另外,这些规范文件还允许您提供各种环境变量、辅助容器、卷、以及Kubernetes的容错控制代码。

当然,Fission还会提供“工作流(workflow)”。通过安装Helm chart,这些工作流将会从一个函数输出并传递给另一个函数,哪怕两个功能函数并非使用的是同一种编程语言。值得注意的是,为了降低系统的开销,工作流系统默认支持诸如:整数、通用字节流等许多常见的原始二进制类型。不过,每个功能函数在进行格式转换输出与提交时,还是会产生一定的性能代价。

此类FaaS的一个缺点是:当我们首次调用某个功能函数时,其关联的容器会出现明显的延迟。因此,Fission需要通过对容器进行“预热”,来最小化此类延迟。

此外,Fission能够为开发人员和管理员提供的其他便利,还包括:将服务部署到无法访问外部互联网的集群中,按需将代码重新热加载(hot-reloaded)到集群里,以及记录与回放功能函数的各项活动,从而辅助开发人员进行调试。而且,由于Fission项目拥有自由的Apache许可证,因此用户可以免费对它进行修改。

Knative

最初是由谷歌创建的Knative,能够协助用户在Kubernetes中运行各种无服务器的应用。它主要关注的是,在生产环境中无服务器部署的通用模式。Knative在有效管理和利用多个Kubernetes组件方面,积累了许多丰富的专业知识。

为了管理Kubernetes,Knative除了需要路由系统和诸如Istio之类的服务网格之外,还会借用到Ambassador等其他选项。虽然,这会带来一些额外的设置工作,但是该项目的详细指南已经包含了各种云服务,以及诸如vanilla Kubernetes的环境说明。

通过利用或扩展现有的Kubernetes工具和功能,Knative能够通过YAML文件和为您交付Docker容器的方式,来配置各种应用程序与函数。而对于各种定义的添加、修改或删除则可通过kubectl命令行来实现。用户既可以使用Grafana来获取Knative的应用参数,又可以使用Knative自带的autoscaler、或其他与Kubernetes兼容的scaler,来实现扩展。

不过,Knative仍处于深入开发阶段,它的许多专有工具也还处于初级阶段。其中,knctl是一款专门的Knative命令行工具。它可以方便您使用Kubernetes的其他工具,来管理Knative。而ko工具则可以被用于在Knative构建Go语言的应用,并削减容器的构建步骤。

Kubeless

由Bitnami创建的Kubeless,能够帮助开发人员轻松地安装各种常见的Web应用程序栈。Kubeless使用Kubernetes原生的各种定制化资源定义(Custom Resource Definitions),来处理各种功能函数,我们可以将它理解为Kubernetes metaphor和Kubeless各项功能之间的抽象层。

Kubeless不但能够支持.NET、Java、Python、Node.js、PHP、Ruby等大多数编程语言,而且支持为云原生开发的Ballerina语言的运行时(runtimes)平台。此处的运行时是指各种Docker镜像。当然,Kubeless也拥有一种特定的包格式,可使用Dockerfiles来构建其自定义的运行时。

Kubeless的另一个便利性体现在它的CLI上。该CLI与AWS Lambda的CLI有些类似。使用它,您可以在移出AWS Lambda时,仍保留各种现有的管理脚本,而且不必学习一套全新的命令集。Kubeless还可以被作为无服务器框架的插件,实现在各种架构上构建无服务器应用。

OpenFaaS

OpenFaaS的宗旨是:让开发人员不再为部署Docker容器而烦恼。因此,它既可以被部署到Kubernetes,也可以用于本地测试或低需求的Docker Swarm集群中。您可以使用OpenFaaS CLI来构建、推送、以及部署各种Docker镜像到集群里,以运行相应的功能。虽然您完全可以自行发布,但是您也可以使用它预先用Python、Node.js、.NET、Ruby、Java或PHP 7编写的现成模板,来部署应用程序。另外,OpenFaaS CLI的内置web UI还允许您创建各种新的功能,以及管理集群中的密钥。

作为OpenFaaS的另一个版本,OpenFaaS Cloud为开发人员重新打包了OpenFaaS的各项特性,集成了GitHub和自托管版本的GitLab,提供了CI/CD,密钥管理,HTTPS,以及向Slack的事件反馈能力。OpenFaas Cloud是一款免费的开源产品,而它的托管版本,目前也仍然可以被免费使用。

OpenWhisk

Apache OpenWhisk可谓一个通用的无服务器平台。OpenWhisk不但支持在Kubernetes上运行容器,还支持Mesos和Docker Compose。OpenWhisk提供了针对Kubernetes的Helm charts工具,以部署各种应用。大家比较熟悉的IBM Cloud Functions就是基于OpenWhisk项目的,因此它可以直接使用OpenWhisk CLI的各种命令。

不同于其他大多数无服务器的Kubernetes框架,OpenWhisk是用Scala语言编写而成,并非用于编写Kubernetes和Docker的Go语言。所以您可能需要花点时间,去了解一下它的编程思想。

在应用运行时选项方面,OpenWhisk封装了Java、Node.js、Python、Ruby、PHP和.NET。另外,它的高级语言选项还包括:Scala、Ballerina、Swift、以及Rust。由于其运行时属于Docker容器类型,因此您很容易通过它来实现自己的应用。

OpenWhisk在部署方面的一个便捷特性是“zip actions”。它可以使用代码包的清单文件,将某个代码的zip包、以及多个辅助文件指向OpenWhisk。而OpenWhisk则可据此创建一项后续操作。同时,OpenWhisk CLI还可以通过工具将代码的目录树转换成一个归档文件。它的服务包目录,能够方便您将应用插入到诸如GitHub、Slack、Apache Kafka或Jira等常见的第三方产品之中。

原文标题:5 ways to do serverless on Kubernetes,作者:Serdar Yegulalp

【51CTO译稿,合作站点转载请注明原文译者和出处为51CTO.com】

 

文章来源网络,作者:运维,如若转载,请注明出处:https://shuyeidc.com/wp/245763.html<

(0)
运维的头像运维
上一篇2025-04-26 08:21
下一篇 2025-04-26 08:22

相关推荐

  • 个人主题怎么制作?

    制作个人主题是一个将个人风格、兴趣或专业领域转化为视觉化或结构化内容的过程,无论是用于个人博客、作品集、社交媒体账号还是品牌形象,核心都是围绕“个人特色”展开,以下从定位、内容规划、视觉设计、技术实现四个维度,详细拆解制作个人主题的完整流程,明确主题定位:找到个人特色的核心主题定位是所有工作的起点,需要先回答……

    2025-11-20
    0
  • 社群营销管理关键是什么?

    社群营销的核心在于通过建立有温度、有价值、有归属感的社群,实现用户留存、转化和品牌传播,其管理需贯穿“目标定位-内容运营-用户互动-数据驱动-风险控制”全流程,以下从五个维度展开详细说明:明确社群定位与目标社群管理的首要任务是精准定位,需明确社群的核心价值(如行业交流、产品使用指导、兴趣分享等)、目标用户画像……

    2025-11-20
    0
  • 香港公司网站备案需要什么材料?

    香港公司进行网站备案是一个涉及多部门协调、流程相对严谨的过程,尤其需兼顾中国内地与香港两地的监管要求,由于香港公司注册地与中国内地不同,其网站若主要服务内地用户或使用内地服务器,需根据服务器位置、网站内容性质等,选择对应的备案路径(如工信部ICP备案或公安备案),以下从备案主体资格、流程步骤、材料准备、注意事项……

    2025-11-20
    0
  • 如何企业上云推广

    企业上云已成为数字化转型的核心战略,但推广过程中需结合行业特性、企业痛点与市场需求,构建系统性、多维度的推广体系,以下从市场定位、策略设计、执行落地及效果优化四个维度,详细拆解企业上云推广的实践路径,精准定位:明确目标企业与核心价值企业上云并非“一刀切”的方案,需先锁定目标客户群体,提炼差异化价值主张,客户分层……

    2025-11-20
    0
  • PS设计搜索框的实用技巧有哪些?

    在PS中设计一个美观且功能性的搜索框需要结合创意构思、视觉设计和用户体验考量,以下从设计思路、制作步骤、细节优化及交互预览等方面详细说明,帮助打造符合需求的搜索框,设计前的规划明确使用场景:根据网站或APP的整体风格确定搜索框的调性,例如极简风适合细线条和纯色,科技感适合渐变和发光效果,电商类则可能需要突出搜索……

    2025-11-20
    0

发表回复

您的邮箱地址不会被公开。必填项已用 * 标注