前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >OpenFaaS实战之二:函数入门

OpenFaaS实战之二:函数入门

原创
作者头像
程序员欣宸
修改2021-08-12 10:52:39
6290
修改2021-08-12 10:52:39
举报
文章被收录于专栏:实战docker实战docker

欢迎访问我的GitHub

这里分类和汇总了欣宸的全部原创(含配套源码):https://github.com/zq2599/blog_demos

OpenFaaS实战系列文章链接

  1. 部署
  2. 函数入门
  3. Java函数
  4. 模板操作(template)
  5. 大话watchdog
  6. of-watchdog(为性能而生)
  7. java11模板解析
  8. 自制模板(maven+jdk8)
  9. 终篇,自制模板(springboot+maven+jdk8)

本篇概览

  • 本文是《OpenFaaS实战》系列的第二篇,在Kubernetes环境把OpenFaaS在搭建好之后,终于可以开始开发函数了;
  • 本篇的主题是熟悉OpenFaaS的函数操作,包括:开发、部署、使用,demo函数使用的语言是python,因为简单;
  • demo函数本身并不复杂:一个加法程序,接收1,2,3这样的字符串,分割成三个数字1、2、3,将它们相加的结果返回;
  • 提前把函数操作的流程捋捋,如下所示,后面会按照这个流程去执行:
代码语言:txt
复制
graph TD
   下载模板 --> 创建函数 --> 调整描述文件,非必须 --> 函数功能编写 --> 构建镜像 --> 推送到仓库 --> 部署函数 --> 使用函数 
  • 接下来,开始操作吧;

提醒

本文中的操作会用到工具faas-cli,前文已提到过此工具可以部署在任意电脑上,远程连接OpenFaaS,请确保faas-cli所在机器上有docker服务,因为构建镜像时会用到。

下载模板

  • OpenFaaS官方提供了编程语言模板,执行命令faas-cli template pull,可以将最新模板下载到本地:
代码语言:txt
复制
[root@node1 faas-template]# faas-cli template pull
Fetch templates from repository: https://github.com/openfaas/templates.git at master
2020/11/19 16:34:31 Attempting to expand templates from https://github.com/openfaas/templates.git
2020/11/19 16:34:45 Fetched 12 template(s) : [csharp dockerfile go java11 java11-vert-x node node12 php7 python python3 python3-debian ruby] from https://github.com/openfaas/templates.git
  • 执行命令faas-cli new --list,得到模板列表如下,可见语言类型还是很丰富的:
代码语言:txt
复制
[root@node1 faas-template]# faas-cli new --list
Languages available as templates:
- csharp
- dockerfile
- go
- java11
- java11-vert-x
- node
- node12
- php7
- python
- python3
- python3-debian
- ruby
  • 执行以下命令即可创建函数,add是函数名,python是语言类型,bolingcavalry是docker镜像名字的前缀:
代码语言:txt
复制
faas-cli new add --lang python -p bolingcavalry
  • 控制台提示如下:
代码语言:txt
复制
[root@node1 faas-template]# faas-cli new add --lang python -p bolingcavalry
Folder: add created.
  ___                   _____           ____
 / _ \ _ __   ___ _ __ |  ___|_ _  __ _/ ___|
| | | | '_ \ / _ \ '_ \| |_ / _` |/ _` \___ \
| |_| | |_) |  __/ | | |  _| (_| | (_| |___) |
 \___/| .__/ \___|_| |_|_|  \__,_|\__,_|____/
      |_|


Function created in folder: add
Stack file written: add.yml
  • 当前目录下,产生名为add的文件夹,以及名为add.yml的文件;
  • 先看add.yml,这是函数的描述文件,本文中已经够用了,无需修改:
代码语言:txt
复制
version: 1.0
provider:
  name: openfaas
  gateway: http://192.168.133.187:31112
functions:
  add:
    lang: python
    handler: ./add
    image: bolingcavalry/add:latest
  • 进入add文件夹,看到faas-cli帮我们生成的源码文件handler.py,默认代码:
代码语言:txt
复制
def handle(req):
    """handle a request to the function
    Args:
        req (str): request body
    """

    return req
  • 上述代码不符合咱们的需求,完全替换为以下内容:
代码语言:txt
复制
def handle(req):
    array = req.replace('\n', '').split(',')
    rlt = 0
    for i in array:
        rlt += int(i)
    return rlt
  • 回到add.yml所在目录,执行以下命令开始构建函数:
代码语言:txt
复制
faas-cli build -f ./add.yml
  • 如下所示,开始在本地构建docker镜像,正常情况下可以构建成功:
代码语言:txt
复制
Step 29/29 : CMD ["fwatchdog"]
 ---> Running in 94b3e80d0df2
Removing intermediate container 94b3e80d0df2
 ---> 5e6c22fa838d
Successfully built 5e6c22fa838d
Successfully tagged bolingcavalry/add:latest
Image: bolingcavalry/add:latest built.
[0] < Building add done in 62.81s.
[0] Worker done.

Total build time: 62.81s
  • 查看本地镜像,确定是刚刚构建的:
代码语言:txt
复制
[root@node1 faas-template]# docker images|grep add
bolingcavalry/add                                  latest              5e6c22fa838d        4 minutes ago       88.4MB

关于OpenFaaS访问镜像

  • 此时要关注的是K8S环境如何能访问到此镜像;
  • 要注意的是OpenFaaS默认的镜像拉取策略是Always,即每次都远程拉取,所以镜像必须放入仓库,例如hub.docker.com、habor、registry等;(这个策略可以修改,不过本文中先不动它)
  • 关于镜像仓库的知识就不在此展开,我这里用的是hub.docker.com,因为我的ID是bolingcavalry,因此登录后执行docker push bolingcavalry/add:latest即可推送到远程仓库;

部署函数

  • 执行部署命令faas-cli deploy -f add.yml,控制台会提示部署成功,还会给出URL:
代码语言:txt
复制
[root@node1 faas-template]# faas-cli deploy -f add.yml
Deploying: add.
WARNING! Communication is not secure, please consider using HTTPS. Letsencrypt.org offers free SSL/TLS certificates.

Deployed. 202 Accepted.
URL: http://192.168.133.187:31112/function/add.openfaas-fn
  • 如果K8S可以顺利拉取到镜像,就可以看到openfaas-fn这个namespace下新增了名为add-xxx的pod,且状态正常:
代码语言:txt
复制
[root@node1 faas-template]# kubectl get pods -n openfaas-fn
NAME                        READY   STATUS    RESTARTS   AGE
add-5679bcd94c-vc9rw        1/1     Running   0          32m
nodeinfo-57fb768fb8-955tf   1/1     Running   0          104m
  • 此时登录管理页面,http://192.168.133.187:31112,可以看到新增的函数,也可以在页面上验证功能调用是否正常,如下图:
在这里插入图片描述
在这里插入图片描述
  • 也可以在其他电脑上发起请求测试,如下所示,函数可以正常服务:
代码语言:txt
复制
[root@node1 ~]# curl http://192.168.133.187:31112/function/add -X POST -d '1,2,3,4,5,6'
21

至此,OpenFaaS环境下的函数基本操作的实战就完成了,接下来的文章会继续深入OpenFaaS,了解它更多强大的能力;

关于容器和镜像的环境

如果您不想自己搭建kubernetes环境,推荐使用腾讯云容器服务TKE:无需自建,即可在腾讯云上使用稳定, 安全,高效,灵活扩展的 Kubernetes 容器平台;

如果您希望自己的镜像可以通过外网上传和下载,推荐腾讯云容器镜像服务TCR:像数据加密存储,大镜像多节点快速分发,跨地域镜像同步

你不孤单,欣宸原创一路相伴

  1. Java系列
  2. Spring系列
  3. Docker系列
  4. kubernetes系列
  5. 数据库+中间件系列
  6. DevOps系列

欢迎关注公众号:程序员欣宸

微信搜索「程序员欣宸」,我是欣宸,期待与您一同畅游Java世界...

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

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

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

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

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 欢迎访问我的GitHub
  • OpenFaaS实战系列文章链接
  • 本篇概览
  • 提醒
  • 下载模板
  • 关于OpenFaaS访问镜像
  • 部署函数
  • 关于容器和镜像的环境
  • 你不孤单,欣宸原创一路相伴
  • 欢迎关注公众号:程序员欣宸
相关产品与服务
实时音视频
实时音视频(Tencent RTC)基于腾讯21年来在网络与音视频技术上的深度积累,以多人音视频通话和低延时互动直播两大场景化方案,通过腾讯云服务向开发者开放,致力于帮助开发者快速搭建低成本、低延时、高品质的音视频互动解决方案。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档