K8s Serverless 选型指南:除了 Knative,这几个框架也值得关注
为啥要考虑 Knative 之外的选择?
K8s Serverless 框架巡礼
选型建议
总结
在 Kubernetes (K8s) 上玩转 Serverless,Knative 绝对是明星选手。但如果想换换口味,或者 Knative 在某些场景下不太给力,还有哪些选择呢?别急,这就来盘点一下 K8s 上那些同样能打的 Serverless 框架,帮你找到最适合自己的那一款。
为啥要考虑 Knative 之外的选择?
Knative 确实很棒,但它也不是万能的。有时候,你可能需要更轻量级的方案,或者 Knative 的某些特性对你来说是“过度设计”。再或者,你就是想多了解一些,技多不压身嘛!
K8s Serverless 框架巡礼
OpenFaaS
特点: 轻量级、易于上手,对开发者友好。支持多种编程语言,可以通过 Docker 镜像部署函数。
优势: 学习曲线平缓,社区活跃,有丰富的示例和教程。适合快速构建简单的 Serverless 应用。
适用场景: 事件驱动型应用、API 网关、简单的数据处理任务。
快速上手: OpenFaaS 提供了
faas-cli
命令行工具,可以方便地创建、部署和管理函数。例如,使用 Python 创建一个简单的 HTTP 函数:faas-cli new --lang python my-http-function
然后在
my-http-function.yml
中配置函数的资源限制、环境变量等。避坑指南: 默认情况下,OpenFaaS 使用 Docker Hub 作为镜像仓库。如果你的网络环境不稳定,可以考虑配置私有镜像仓库。
Kubeless
特点: K8s 原生 Serverless 框架,直接利用 K8s 的 API 对象来管理函数。支持多种触发器,如 HTTP、消息队列等。
优势: 与 K8s 集成度高,可以充分利用 K8s 的资源管理和调度能力。适合构建复杂的 Serverless 应用。
适用场景: 需要精细化资源控制的场景、与 K8s 生态系统深度集成的应用。
项目状态: 需要注意的是,Kubeless 项目已经进入维护模式,不再积极开发新功能。不过,对于已经在使用 Kubeless 的团队来说,它仍然是一个可靠的选择。
快速上手: Kubeless 使用 CRD (Custom Resource Definition) 来定义函数。你可以创建一个 YAML 文件来描述函数,然后使用
kubectl apply
命令部署它。apiVersion: kubeless.io/v1beta1 kind: Function metadata: name: my-function spec: handler: my-module.my_function runtime: python3.7 function: | def my_function(event, context): return "Hello, world!" 避坑指南: 由于 Kubeless 已经进入维护模式,建议关注社区的动态,或者考虑迁移到其他更活跃的 Serverless 框架。
Fission
特点: 专注于快速迭代和开发效率。支持多种编程语言,可以通过 HTTP 或事件触发函数。
优势: 提供了强大的 CLI 工具和 Web UI,方便开发者管理和调试函数。支持 Canary 发布和蓝绿部署等高级特性。
适用场景: 需要快速迭代的场景、对开发效率要求高的团队。
官方网站: https://fission.io/
快速上手: Fission 使用
fission
命令行工具来创建和部署函数。你可以使用fission function create
命令创建一个新的函数,然后使用fission route create
命令将函数绑定到 HTTP 路由。fission function create --name my-function --env python3.7 --code main.py fission route create --method GET --url /hello --function my-function 避坑指南: Fission 的 Web UI 功能强大,但有时候可能会出现一些小 bug。建议多关注社区的 issue,及时更新到最新版本。
riff
特点: 基于 K8s 的事件驱动型 Serverless 框架。使用 Spring Cloud Stream 构建函数,支持多种消息中间件。
优势: 利用 Spring Cloud Stream 的强大功能,可以方便地构建复杂的事件驱动型应用。适合 Java 开发者。
适用场景: 事件驱动型应用、流式数据处理、微服务架构。
项目状态: riff 项目的活跃度相对较低,需要有一定的 Spring Cloud 基础才能上手。
快速上手: riff 使用
riff
命令行工具来创建和部署函数。你需要编写一个 Spring Cloud Stream 应用,然后使用riff function create
命令将其部署到 K8s 集群。riff function create --name my-function --artifact my-function.jar --handler com.example.MyFunction
避坑指南: riff 对 Spring Cloud Stream 的依赖较强,需要熟悉 Spring Cloud 的相关概念和配置。
选型建议
- 快速上手,简单应用: OpenFaaS
- K8s 原生,深度集成: Kubeless (需注意项目状态)
- 快速迭代,开发效率: Fission
- 事件驱动,Spring Cloud: riff
当然,选择哪个框架最终还是要看你的具体需求和团队的技术栈。建议先了解每个框架的特点,然后根据自己的情况进行评估和测试。
总结
Knative 之外,K8s 上还有很多优秀的 Serverless 框架可供选择。OpenFaaS 轻量易用,Kubeless 与 K8s 集成度高,Fission 注重开发效率,riff 则擅长事件驱动。希望这份指南能帮助你找到最适合自己的 K8s Serverless 解决方案!