欢迎访问我的 GitHub
https://github.com/zq2599/blog_demos
内容: 所有原创文章分类汇总及配套源码, 涉及 Java,Docker,Kubernetes,DevOPS 等;
OpenFaaS 实战系列文章链接
部署
函数入门
Java 函数
模板操作 (template)
大话 watchdog
of-watchdog(为性能而生)
java11 模板解析
OpenFaaS 实战之八: 自制模板 (maven+jdk8)
OpenFaaS 实战之九: 终篇, 自制模板 (springboot+maven+jdk8)
本篇概览
本文是《OpenFaaS 实战》系列的第二篇, 在 Kubernetes 环境把 OpenFaaS 在搭建好之后, 终于可以开始开发函数了;
本篇的主题是熟悉 OpenFaaS 的函数操作, 包括: 开发, 部署, 使用, demo 函数使用的语言是 python, 因为简单;
demo 函数本身并不复杂: 一个加法程序, 接收 1,2,3 这样的字符串, 分割成三个数字 1,2,3, 将它们相加的结果返回;
提前把函数操作的流程捋捋, 如下所示, 后面会按照这个流程去执行:
graph TD 下载模板 --> 创建函数 --> 调整描述文件, 非必须 --> 函数功能编写 --> 构建镜像 --> 推送到仓库 --> 部署函数 --> 使用函数
接下来, 开始操作吧;
提醒
本文中的操作会用到工具 faas-cli, 前文已提到过此工具可以部署在任意电脑上, 远程连接 OpenFaaS, 请确保 faas-cli 所在机器上有 docker 服务, 因为构建镜像时会用到.
下载模板
OpenFaaS 官方提供了编程语言模板, 执行命令 faas-cli template pull, 可以将最新模板下载到本地:
- [[email protected] 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, 得到模板列表如下, 可见语言类型还是很丰富的:
- [[email protected] 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 镜像名字的前缀:
faas-cli new add --lang python -p bolingcavalry
控制台提示如下:
- [[email protected] faas-template]# faas-cli new add --lang python -p bolingcavalry
- Folder: add created.
- ___ _____ ____
- / _ \ _ __ ___ _ __ | ___|_ _ __ _/ ___|
- | | | | '_ \ / _ \'_ \| |_ / _` |/ _` \___ | |_| | |_) | __/ | | | _| (_| | (_| |___) |
- \___/| .__/ \___|_| |_|_| \__,_|\__,_|____/
- |_|
- Function created in folder: add
Stack file written: add.YAML
当前目录下, 产生名为 add 的文件夹, 以及名为 add.YAML 的文件;
先看 add.YAML, 这是函数的描述文件, 本文中已经够用了, 无需修改:
- 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, 默认代码:
- def handle(req):
- """handle a request to the function
- Args:
- req (str): request body
- """
- return req
上述代码不符合咱们的需求, 完全替换为以下内容:
- def handle(req):
- array = req.replace('\n', '').split(',')
- rlt = 0
- for i in array:
- rlt += int(i)
- return rlt
回到 add.YAML 所在目录, 执行以下命令开始构建函数:
faas-cli build -f ./add.YAML
如下所示, 开始在本地构建 docker 镜像, 正常情况下可以构建成功:
- 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
查看本地镜像, 确定是刚刚构建的:
- [[email protected] 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.YAML, 控制台会提示部署成功, 还会给出 URL:
- [[email protected] faas-template]# faas-cli deploy -f add.YAML
- 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, 且状态正常:
- [[email protected] 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/ , 可以看到新增的函数, 也可以在页面上验证功能调用是否正常, 如下图:
也可以在其他电脑上发起请求测试, 如下所示, 函数可以正常服务:
- [[email protected] ~]# curl http://192.168.133.187:31112/function/add -X POST -d '1,2,3,4,5,6'
- 21
至此, OpenFaaS 环境下的函数基本操作的实战就完成了, 接下来的文章会继续深入 OpenFaaS, 了解它更多强大的能力;
你不孤单, 欣宸原创一路相伴
Java 系列
Spring 系列
Docker 系列
kubernetes 系列
数据库 + 中间件系列
DevOps 系列
来源: http://www.bubuko.com/infodetail-3802287.html