内容简介:作者:Brian McClain & Bryan Friedman审校:孙海洲、邱世达
作者:Brian McClain & Bryan Friedman
译者: 殷琦
审校:孙海洲、邱世达
Knative 是一个基于 Kubernetes 的,用于构建、部署和管理现代 serverless 应用的平台。Getting Started with Knative 是一本由 Pivotal 公司赞助 O’Reilly 出品的电子书,公众号后台回复“ knative ”获取英文版下载地址。本书中文版由 ServiceMesher 社区自发翻译系列文章,这是该系列的第8章,至此全书翻译完毕,我们将后续为大家提供PDF。
还有很多的项目加入到年轻的 Knative 生态系统,且趋势是不断增加的。有些已经将其他现有的开源无服务器架构(serverless)的框架带到 Knative 上。例如,Kwsk 就是努力用 Knative 来代替大部分 Apache OpenWhisk 基础服务器组件。其他开源的无服务器架构(serverless)项目专门针对 Knative 而构建,甚至帮助完善 Knative 上游体系。例如,riff 项目已经提供了一组 工具 来帮助简化构建函数(Functions)和使用 Knative。本章将简要介绍使用 riff 项目团队的一些工具在 Knative 上构建和运行函数(Functions)。
使用 riff 项目打包函数(Functions)
通过第 2 章中的 Hello World 示例,可以看出将现存的镜像从容器仓库部署到 Knative 是非常容易的。第 3 章中的 Kaniko 示例以及示例 6-1 中的 Buildpack 方式演示了如何为 Knative 构建和部署简单的 12-factor 应用程序。到目前为止,这些例子都集中在作为软件单元的容器或应用程序上。现在回想一下第 1 章中提及函数(functions),试想将一个函数部署到 Knative 是什么样的?答案是它看起来几乎与容器和应用程序一样。是因为有了 Build 模块,Knative 可以将您的函数(function)代码转换为容器,其方式与任何应用程序代码相似。
什么是函数(Function)?
应用程序由代码组成,函数(Function)也是如此。那么函数(Function)有什么特别之处呢?难道它不是一个应用程序吗?应用程序一般由从前端 UI 到后端数据库的许多组件以及其间的所有处理组成。相比之下,函数通常只是一小段代码,具有单一目的,可以快速和异步地运行。它通常也由事件触发,而不是由用户在请求/响应场景中直接调用。
回想一下第 6 章中的 Cloud Foundry Buildpacks 示例。例 6-1 中显示的 service.yaml 文件引用了一个完整的 Node.js Express 应用程序,该应用程序的功能是在给定端口上侦听 GET 请求然后返回 “Hello World” 信息。如果我们的程序是接受数字作为输入,返回该数字的平方作为结果的函数,而不是 Hello World 应用程序呢?此代码可能类似于我们在示例 8-1 中看到的内容。
Example 8-1. knative-function-app-demo/square-app.js
const express = require('express'); const app = express(); app.post('/', function (req, res) { let body = ''; req.on('data', chunk => { body += chunk.toString(); }); req.on('end', () => { if (isNaN(body)) res.sendStatus(400); else { var square = body ** 2; res.send(square.toString()); } }); }); var port = 8080; app.listen(port, function () { console.log('Listening on port', port); });
我们可以使用示例 6-1 中的相同 Buildpack 来构建此函数并将其部署到 Knative。又如例 8-2,它也是使用 Node.js 编写的一个函数,它不是一个完整的 Express 应用程序,而仅仅由一个函数组成,不包含任何其他 Node.js 模块。
Example 8-2. knative-function-demo/square.js
module.exports = (x) => x ** 2
Knative 支持这一点,因为它具有 Build 模块提供的灵活性。为了构建和部署这样的代码到 Knative,需要一个自定义的构建模板将这个简单的仅含函数的代码转换为可运行的 Node.js 应用程序。例 8-2 中的代码使用了function invokers特别支持的编程模型,function invokers 是riff 项目一部分的。riff 是 Pivotal 的一个开源项目,构建于 Knative 之上,它提供了一些很棒的东西:用于安装 Knative 和管理在其上部署的函数(functions)的 CLI,以及使我们能够编写像例 8-2 中代码的 function invokers。这些 invokers 负责执行函数(functions),例如我们见过的 Node.js 示例,或 Spring Cloud Functions,甚至是 Bash 脚本。与 Build 模板一样,invokers 也是开源的,并且随着 riff 项目的成熟,invokers支持的调用的函数种类会越来越多。请务必查看 https://project-riff.io 了解更多信息!
拓展阅读
在继续学习的过程中,有大量围绕 Knative 构建相关的文档、示例以及演示可以供您阅读和参考。最好的当然是 GitHub 仓库中 Knative Docs,它不仅包含有关 Knative 的每一部分如何工作的详细说明,而且还有更多的演示和加入社区的链接,例如 Knative Slack 频道或邮件列表。
我们非常感谢您花在我们的书本上的时间,并希望对您开始上手使用 Knative 有帮助。我们可以留给您的最好建议就是要勤写代码并开始构建一些东西,无论大小。通过犯错并学习如何解决问题来探索和学习,与他人分享你学到的东西!Knative 的社区非常年轻,但成长速度非常快,我们希望看到你成为它的一员。
推荐阅读
Google 开源的 Serverless 平台 knative 简介
基于Kubernetes和Istio的Serverless框架Knative解析之Autoscaler
点击 阅读原文 查看更多
以上就是本文的全部内容,希望本文的内容对大家的学习或者工作能带来一定的帮助,也希望大家多多支持 码农网
猜你喜欢:本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们。
Redis开发与运维
付磊、张益军 / 机械工业出版社 / 2017-3-1 / 89.00
本书全面讲解Redis基本功能及其应用,并结合线上开发与运维监控中的实际使用案例,深入分析并总结了实际开发运维中遇到的“陷阱”,以及背后的原因, 包含大规模集群开发与管理的场景、应用案例与开发技巧,为高效开发运维提供了大量实际经验和建议。本书不要求读者有任何Redis使用经验,对入门与进阶DevOps的开发者提供有价值的帮助。主要内容包括:Redis的安装配置、API、各种高效功能、客户端、持久化......一起来看看 《Redis开发与运维》 这本书的介绍吧!