+-
                                
                                    
                                
                                
                                    
                                
                                
                                    
                                        
                                        
                                        
                                        
                                        首页 专栏 云计算 文章详情   
 
  
   
     
   
    
     
        
      
 
      程序员欣宸 发布于 5 月 16 日 
      
     
      
     
      
     
      
     
     
      
       
     
     
       
     
   
   
    
     
       
      
  
       
        
      
      
       
      
       关注作者 
     
    
   
   
    
     
      
     
      
      
 
       
        
          
          
         
         
        
        
      
      
     
    
   
  
  
   
    
     
      
        
       
  
        
         
       
       
        
       
        关注作者 
      
     
    
    
     
      
     
    
    
     
      
       
      
       
        
       
       
        
       
       
        
       
      
     
    
    
     
    
    
     
      
       
        
         
         
        
       
      
     
    
   
  
 
                                            
                                        
                                        
                                    
                                
                            
                        
 
    0 
     
     
     
      
     
   
 
  OpenFaaS实战之二:函数入门
欢迎访问我的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函数本身并不复杂:一个加法程序,接收<font color="blue">1,2,3</font>这样的字符串,分割成三个数字1、2、3,将它们相加的结果返回; 提前把函数操作的流程捋捋,如下所示,后面会按照这个流程去执行:graph TD 下载模板 --> 创建函数 --> 调整描述文件,非必须 --> 函数功能编写 --> 构建镜像 --> 推送到仓库 --> 部署函数 --> 使用函数   接下来,开始操作吧;  
    提醒
本文中的操作会用到工具<font color="blue">faas-cli</font>,前文已提到过此工具可以部署在任意电脑上,远程连接OpenFaaS,请确保faas-cli所在机器上有docker服务,因为构建镜像时会用到。
下载模板
OpenFaaS官方提供了编程语言模板,执行命令<font color="blue">faas-cli template pull</font>,可以将最新模板下载到本地:[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  执行命令<font color="blue">faas-cli new --list</font>,得到模板列表如下,可见语言类型还是很丰富的:  
    [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  执行以下命令即可创建函数,<font color="blue">add</font>是函数名,<font color="blue">python</font>是语言类型,<font color="blue">bolingcavalry</font>是docker镜像名字的前缀:  
    faas-cli new add --lang python -p bolingcavalry  控制台提示如下:  
    [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  当前目录下,产生名为<font color="blue">add</font>的文件夹,以及名为<font color="blue">add.yml</font>的文件; 先看<font color="blue">add.yml</font>,这是函数的描述文件,本文中已经够用了,无需修改:  
    version: 1.0 provider: name: openfaas gateway: http://192.168.133.187:31112 functions: add: lang: python handler: ./add image: bolingcavalry/add:latest  进入<font color="blue">add</font>文件夹,看到faas-cli帮我们生成的源码文件<font color="blue">handler.py</font>,默认代码:  
    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  回到<font color="blue">add.yml</font>所在目录,执行以下命令开始构建函数:  
    faas-cli build -f ./add.yml  如下所示,开始在本地构建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  查看本地镜像,确定是刚刚构建的:  
    [root@node1 faas-template]# docker images|grep add bolingcavalry/add latest 5e6c22fa838d 4 minutes ago 88.4MB 
    关于OpenFaaS访问镜像
此时要关注的是K8S环境如何能访问到此镜像; 要注意的是OpenFaaS默认的镜像拉取策略是<font color="blue">Always</font>,即每次都远程拉取,所以镜像必须放入仓库,例如hub.docker.com、habor、registry等;(这个策略可以修改,不过本文中先不动它) 关于镜像仓库的知识就不在此展开,我这里用的是<font color="blue">hub.docker.com</font>,因为我的ID是<font color="red">bolingcavalry</font>,因此登录后执行<font color="blue">docker push bolingcavalry/add:latest</font>即可推送到远程仓库;部署函数
执行部署命令<font color="blue">faas-cli deploy -f add.yml</font>,控制台会提示部署成功,还会给出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  如果K8S可以顺利拉取到镜像,就可以看到<font color="blue">openfaas-fn</font>这个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  此时登录管理页面,<font color="blue">http://192.168.133.187:31112</font>,可以看到新增的函数,也可以在页面上验证功能调用是否正常,如下图:  
      也可以在其他电脑上发起请求测试,如下所示,函数可以正常服务:  
    [root@node1 ~]# 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系列欢迎关注公众号:程序员欣宸
微信搜索「程序员欣宸」,我是欣宸,期待与您一同畅游Java世界...
https://github.com/zq2599/blog_demos
 云计算 
     
 
     阅读 26  发布于 5 月 16 日 
     
 
      举报 
      
 
      
      赞 
      收藏 
      
 
     
       分享 
      
 
      本作品系原创, 采用《署名-非商业性使用-禁止演绎 4.0 国际》许可协议 
    
 
   程序员欣宸
热爱Java和Docker
 
       89  声望 
      
 
       
       7  粉丝 
      
 
     0 条评论
 得票数 最新 
     
 
     
         提交评论 
       
 
      程序员欣宸
热爱Java和Docker
 
        89  声望 
       
 
        
        7  粉丝 
       
 
      宣传栏
目录
 ▲ 
 
欢迎访问我的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函数本身并不复杂:一个加法程序,接收<font color="blue">1,2,3</font>这样的字符串,分割成三个数字1、2、3,将它们相加的结果返回; 提前把函数操作的流程捋捋,如下所示,后面会按照这个流程去执行:graph TD 下载模板 --> 创建函数 --> 调整描述文件,非必须 --> 函数功能编写 --> 构建镜像 --> 推送到仓库 --> 部署函数 --> 使用函数   接下来,开始操作吧;  
提醒
本文中的操作会用到工具<font color="blue">faas-cli</font>,前文已提到过此工具可以部署在任意电脑上,远程连接OpenFaaS,请确保faas-cli所在机器上有docker服务,因为构建镜像时会用到。
下载模板
OpenFaaS官方提供了编程语言模板,执行命令<font color="blue">faas-cli template pull</font>,可以将最新模板下载到本地:[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  执行命令<font color="blue">faas-cli new --list</font>,得到模板列表如下,可见语言类型还是很丰富的:  
[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  执行以下命令即可创建函数,<font color="blue">add</font>是函数名,<font color="blue">python</font>是语言类型,<font color="blue">bolingcavalry</font>是docker镜像名字的前缀:  
faas-cli new add --lang python -p bolingcavalry  控制台提示如下:  
[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  当前目录下,产生名为<font color="blue">add</font>的文件夹,以及名为<font color="blue">add.yml</font>的文件; 先看<font color="blue">add.yml</font>,这是函数的描述文件,本文中已经够用了,无需修改:  
version: 1.0 provider: name: openfaas gateway: http://192.168.133.187:31112 functions: add: lang: python handler: ./add image: bolingcavalry/add:latest  进入<font color="blue">add</font>文件夹,看到faas-cli帮我们生成的源码文件<font color="blue">handler.py</font>,默认代码:  
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  回到<font color="blue">add.yml</font>所在目录,执行以下命令开始构建函数:  
faas-cli build -f ./add.yml  如下所示,开始在本地构建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  查看本地镜像,确定是刚刚构建的:  
[root@node1 faas-template]# docker images|grep add bolingcavalry/add latest 5e6c22fa838d 4 minutes ago 88.4MB 
关于OpenFaaS访问镜像
此时要关注的是K8S环境如何能访问到此镜像; 要注意的是OpenFaaS默认的镜像拉取策略是<font color="blue">Always</font>,即每次都远程拉取,所以镜像必须放入仓库,例如hub.docker.com、habor、registry等;(这个策略可以修改,不过本文中先不动它) 关于镜像仓库的知识就不在此展开,我这里用的是<font color="blue">hub.docker.com</font>,因为我的ID是<font color="red">bolingcavalry</font>,因此登录后执行<font color="blue">docker push bolingcavalry/add:latest</font>即可推送到远程仓库;部署函数
执行部署命令<font color="blue">faas-cli deploy -f add.yml</font>,控制台会提示部署成功,还会给出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  如果K8S可以顺利拉取到镜像,就可以看到<font color="blue">openfaas-fn</font>这个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  此时登录管理页面,<font color="blue">http://192.168.133.187:31112</font>,可以看到新增的函数,也可以在页面上验证功能调用是否正常,如下图:  
  也可以在其他电脑上发起请求测试,如下所示,函数可以正常服务:  
[root@node1 ~]# 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系列欢迎关注公众号:程序员欣宸
微信搜索「程序员欣宸」,我是欣宸,期待与您一同畅游Java世界...
https://github.com/zq2599/blog_demos