专栏首页伪架构师Knative 入门系列8:拓展与展望

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

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

本文分享自微信公众号 - 伪架构师(fake-architect)

原文出处及转载信息见文内详细说明,如有侵权,请联系 yunjia_community@tencent.com 删除。

原始发表时间:2019-04-25

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • Knative入门系列6:Knative的使用

    Knative 是一个基于 Kubernetes 的,用于构建、部署和管理现代 serverless 应用的平台。Getting Started with Kn...

    崔秀龙
  • (译)在 Knative 上部署 12 要素应用程序

    Google Next18 活动中,Google 宣称将会把 GKE 上的无服务器插件以 Knative 的名称进行开源。当时它被描述为无服务器平台的构建块,由...

    崔秀龙
  • (译)Knative:在 Kubernetes 上构建可移植 Serverless 平台

    Kubernetes 目前如日中天,这一项目不仅在容器编排方面独占鳌头,还给基础设施自动化进程提供了可实践的原语。

    崔秀龙
  • 「无服务器架构」动手操作Knative -第二部分

    在上一篇文章中,我讨论了Knative用于快速部署和自动调整无服务器容器。如果您希望您的服务由HTTP调用同步触发,那么Knative服务是很好的选择。然而,在...

    首席架构师智库
  • Java 中的 ==, equals 与 hashCode 的区别与联系

    这句话声明了一个引用类型的变量,此时它并没有和任何对象关联。   而通过 new 来产生一个对象,并将这个对象和str1进行绑定:

    heasy3
  • 通过 41 个 问答方式快速了解学习 Git

    个人比较喜欢 git add -p. 这增加了“补丁模式”的变化,这是一个内置的命令行程序。它遍历了每个更改,并要求确认是否要执行它们。

    前端小智@大迁世界
  • pytbull - 入侵检测/预防系统(IDS / IPS)测试框架

    pytbull是Snort,Suricata和任何生成警报文件的IDS / IPS的入侵检测/预防系统(IDS / IPS)测试框架。它可用于测试IDS / I...

    周俊辉
  • 通过 41 个 问答方式快速了解学习 Git

    Git是什么? Git是目前世界上最先进的分布式版本控制系统(没有之一,不接受任何反驳)。

    Javanx
  • PS|基础原理之‘图层混合模式’

    说到PS,就免不了对图层的讨论。而图层之间的关系——‘图层混合模式’更是图层的重点。今天就为大家介绍‘图层混合模式’的原理。

    算法与编程之美
  • 【Pandas】数据分析工具Pandas的基本操作和可视化工具Matplotlib

    pandas是python的一个数据分析包,最初由AQR Capital Management于2008年4月开发,并于2009年底开源出来,目前由专注于Pyt...

    魏晓蕾

扫码关注云+社区

领取腾讯云代金券