前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Knative 入门系列8:拓展与展望

Knative 入门系列8:拓展与展望

作者头像
崔秀龙
发布2019-07-23 15:39:06
1K0
发布2019-07-23 15:39:06
举报
文章被收录于专栏:伪架构师伪架构师

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

代码语言:javascript
复制
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

代码语言:javascript
复制
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 的社区非常年轻,但成长速度非常快,我们希望看到你成为它的一员。

本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2019-04-25,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 伪架构师 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 使用 riff 项目打包函数(Functions)
  • 拓展阅读
相关产品与服务
容器服务
腾讯云容器服务(Tencent Kubernetes Engine, TKE)基于原生 kubernetes 提供以容器为核心的、高度可扩展的高性能容器管理服务,覆盖 Serverless、边缘计算、分布式云等多种业务部署场景,业内首创单个集群兼容多种计算节点的容器资源管理模式。同时产品作为云原生 Finops 领先布道者,主导开源项目Crane,全面助力客户实现资源优化、成本控制。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档