OpenFaaS實戰之二:函數入門

歡迎訪問我的GitHub

https://github.com/zq2599/blog_demos

內容:所有原創文章分類彙總及配套源碼,涉及Java、Docker、Kubernetes、DevOPS等;

OpenFaaS實戰系列文章鏈接

  1. 部署
  2. 函數入門
  3. Java函數
  4. 模板操作(template)
  5. 大話watchdog
  6. of-watchdog(爲性能而生)
  7. java11模板解析
  8. OpenFaaS實戰之八:自制模板(maven+jdk8)
  9. 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服務,因爲構建鏡像時會用到。

下載模板

  1. OpenFaaS官方提供了編程語言模板,執行命令faas-cli template pull,可以將最新模板下載到本地:
[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
  1. 執行命令faas-cli new --list,得到模板列表如下,可見語言類型還是很豐富的:
[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
  1. 執行以下命令即可創建函數,add是函數名,python是語言類型,bolingcavalry是docker鏡像名字的前綴:
faas-cli new add --lang python -p bolingcavalry
  1. 控制檯提示如下:
[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
  1. 當前目錄下,產生名爲add的文件夾,以及名爲add.yml的文件;
  2. 先看add.yml,這是函數的描述文件,本文中已經夠用了,無需修改:
version: 1.0
provider:
  name: openfaas
  gateway: http://192.168.133.187:31112
functions:
  add:
    lang: python
    handler: ./add
    image: bolingcavalry/add:latest
  1. 進入add文件夾,看到faas-cli幫我們生成的源碼文件handler.py,默認代碼:
def handle(req):
    """handle a request to the function
    Args:
        req (str): request body
    """

    return req
  1. 上述代碼不符合咱們的需求,完全替換爲以下內容:
def handle(req):
    array = req.replace('\n', '').split(',')
    rlt = 0
    for i in array:
        rlt += int(i)
    return rlt
  1. 回到add.yml所在目錄,執行以下命令開始構建函數:
faas-cli build -f ./add.yml
  1. 如下所示,開始在本地構建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
  1. 查看本地鏡像,確定是剛剛構建的:
[root@node1 faas-template]# docker images|grep add
bolingcavalry/add                                  latest              5e6c22fa838d        4 minutes ago       88.4MB

關於OpenFaaS訪問鏡像

  1. 此時要關注的是K8S環境如何能訪問到此鏡像;
  2. 要注意的是OpenFaaS默認的鏡像拉取策略是Always,即每次都遠程拉取,所以鏡像必須放入倉庫,例如hub.docker.com、habor、registry等;(這個策略可以修改,不過本文中先不動它)
  3. 關於鏡像倉庫的知識就不在此展開,我這裏用的是hub.docker.com,因爲我的ID是bolingcavalry,因此登錄後執行docker push bolingcavalry/add:latest即可推送到遠程倉庫;

部署函數

  1. 執行部署命令faas-cli deploy -f add.yml,控制檯會提示部署成功,還會給出URL:
[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
  1. 如果K8S可以順利拉取到鏡像,就可以看到openfaas-fn這個namespace下新增了名爲add-xxx的pod,且狀態正常:
[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
  1. 此時登錄管理頁面,http://192.168.133.187:31112,可以看到新增的函數,也可以在頁面上驗證功能調用是否正常,如下圖:

在這裏插入圖片描述

  1. 也可以在其他電腦上發起請求測試,如下所示,函數可以正常服務:
[root@node1 ~]# curl http://192.168.133.187:31112/function/add -X POST -d '1,2,3,4,5,6'
21

至此,OpenFaaS環境下的函數基本操作的實戰就完成了,接下來的文章會繼續深入OpenFaaS,瞭解它更多強大的能力;

你不孤單,欣宸原創一路相伴

  1. Java系列
  2. Spring系列
  3. Docker系列
  4. kubernetes系列
  5. 數據庫+中間件系列
  6. DevOps系列

歡迎關注公衆號:程序員欣宸

微信搜索「程序員欣宸」,我是欣宸,期待與您一同暢遊Java世界...
https://github.com/zq2599/blog_demos

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章