• OpenFaaS实战之四:模板操作(template)


    欢迎访问我的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实战》系列的第四篇,经历了前三篇快节奏操作,咱们对OpenFaaS有了基本了解,至少部署和开发是轻车熟路,现在要放慢脚步夯实基本功,扫除知识盲点;
    • 本篇目标是掌握template(模板)有关知识,包括以下内容:
    1. 基本命令
    2. 使用第三方模板
    3. 自己制作模板仓库
    4. 注意事项
    • 从上面的概览可见,本篇内容不多但很基础很重要,接下来打开终端动手练习吧;

    关于简化命令

    如下所示,faas其实就是faas-cli的链接,因此,平时输入命令用faas更简单:

    [root@node1 template]# ls -l /usr/local/bin/faas
    lrwxrwxrwx. 1 root root 23 11月 19 11:06 /usr/local/bin/faas -> /usr/local/bin/faas-cli
    

    基本命令

    1. 获取所有官方模板:
    faas template pull
    

    执行完毕后,当前目录下出现名为template的文件夹,里面是所有官方模板

    [root@node1 21]# ls
    template
    [root@node1 21]# cd template/
    [root@node1 template]# ls
    csharp  dockerfile  go  java11  java11-vert-x  node  node12  php7  python  python3  python3-debian  ruby
    [root@node1 template]# cd ..
    [root@node1 21]# tree template/
    template/
    ├── csharp
    │   ├── Dockerfile
    │   ├── function
    │   │   ├── Function.csproj
    │   │   └── FunctionHandler.cs
    │   ├── Program.cs
    │   ├── root.csproj
    │   └── template.yml
    ├── dockerfile
    │   ├── function
    │   │   └── Dockerfile
    │   └── template.yml
    ...
    
    1. 查看官方模板列表:
    faas template store list
    

    返回信息如下(太多了,省略部分):

    NAME                     SOURCE             DESCRIPTION
    csharp                   openfaas           Classic C# template
    dockerfile               openfaas           Classic Dockerfile template
    go                       openfaas           Classic Golang template
    java8                    openfaas           Java 8 template
    java11                   openfaas           Java 11 template
    rust-http                openfaas-incubator Rust HTTP template
    bash-streaming           openfaas-incubator Bash Streaming template
    ...
    
    3. 查看当前目录下可用的模板:
    
    ```shell
    faas new --list
    

    终端显示:

    [root@node1 21]# faas new --list
    Languages available as templates:
    - csharp
    - dockerfile
    - go
    - java11
    - java11-vert-x
    - node
    - node12
    - php7
    - python
    - python3
    - python3-debian
    - ruby
    
    1. 有了模板,就能创建函数,如下命令创建名为java-function的函数:
    faas-cli new --lang java11 java-function
    

    成功后,修改此文件添加业务代码:./src/main/Handler.java

    1. 前面执行faas template store list查看的时候,注意每个模板的SOURCE字段,如果是openfaas-incubator,例如rust-http,就要使用以下命令来下载(多了个前缀openfaas-incubator):
    faas-cli template store pull openfaas-incubator/rust-http
    

    以上是模板的基本操作,此刻您可能有疑问:那些都是官方模板,第三方的模板怎么获取?另外如果我想自己做模板给别人用,又该如何操作?这些问题,接下来逐个解答;

    使用第三方模板

    1. 我在GitHub上做了个第三方模板仓库,来看如何使用,使用其他人的第三方模板都是这个套路;
    2. 所谓模板仓库,其本质还是普通的GitHub仓库,只是里面的内容要符合OpenFaaS的要求;
    3. 我的模板仓库地址是:https://github.com/zq2599/openfaas-templates ,如下图:

    在这里插入图片描述
    4. 下载上述模板仓库的命令(注意,找个干净的文件夹执行命令):

    faas template pull https://github.com/zq2599/openfaas-templates
    

    可见就是把仓库地址作为参数放在整个命令的末尾

    1. 控制台操作如下,可见下载了一个template目录,里面有两个模板:dockerfilejava11extend
    [root@node1 333]# faas template pull https://github.com/zq2599/openfaas-templates
    Fetch templates from repository: https://github.com/zq2599/openfaas-templates at master
    2020/11/22 11:19:53 Attempting to expand templates from https://github.com/zq2599/openfaas-templates
    2020/11/22 11:19:58 Fetched 2 template(s) : [dockerfile java11extend] from https://github.com/zq2599/openfaas-templates
    [root@node1 333]# ls
    template
    [root@node1 333]# tree template/
    template/
    ├── dockerfile
    │   ├── function
    │   │   └── Dockerfile
    │   └── template.yml
    └── java11extend
        ├── build.gradle
        ├── Dockerfile
        ├── function
        │   ├── build.gradle
        │   ├── gradle
        │   │   └── wrapper
        │   │       ├── gradle-wrapper.jar
        │   │       └── gradle-wrapper.properties
        │   ├── gradlew
        │   ├── gradlew.bat
        │   ├── settings.gradle
        │   └── src
        │       ├── main
        │       │   └── java
        │       │       └── com
        │       │           └── openfaas
        │       │               └── function
        │       │                   └── Handler.java
        │       └── test
        │           └── java
        │               └── HandlerTest.java
        ├── gradle
        │   └── wrapper
        │       ├── gradle-wrapper.jar
        │       └── gradle-wrapper.properties
        ├── README.md
        ├── settings.gradle
        └── template.yml
    
    16 directories, 17 files
    
    1. 执行faas new --list看有哪些模板,果然是GitHub仓库中的两个:
    [root@node1 333]# faas new --list
    Languages available as templates:
    - dockerfile
    - java11extend
    
    1. 使用模板创建函数:
    faas-cli new java11extend-function --lang java11extend -p bolingcavalry
    
    1. 制作镜像:
    faas-cli build -f ./java11extend-function.yml
    

    控制台输出以下信息,提示镜像制作成功:

    Step 29/30 : HEALTHCHECK --interval=5s CMD [ -e /tmp/.lock ] || exit 1
     ---> Running in 6b68ca763980
    Removing intermediate container 6b68ca763980
     ---> 50cea9002e9c
    Step 30/30 : CMD ["fwatchdog"]
     ---> Running in c2f87a87c8f4
    Removing intermediate container c2f87a87c8f4
     ---> 8094a5064a20
    Successfully built 8094a5064a20
    Successfully tagged bolingcavalry/java11extend-function:latest
    Image: bolingcavalry/java11extend-function:latest built.
    [0] < Building java11extend-function done in 81.75s.
    [0] Worker done.
    
    Total build time: 81.76s
    
    1. 接下来将镜像推送到镜像仓库、部署函数、验证等操作请参考前文《OpenFaaS实战之三:Java函数》,里面有详细的步骤,就不在本文中展开了,下面的图片证明此模板做出的函数可以正常部署和运行:

    在这里插入图片描述

    自己制作模板仓库

    经历了前面的实战,对于如何制作模板仓库,相信您心中已经有了答案,这里简单小结一下需要遵守的原则:

    1. 在GitHub上有个公共仓库;
    2. 所有内容必须放在master分支;
    3. 仓库内要有名为template的文件夹;
    4. template文件夹里面,是每个模板自己的文件夹,如下图,是两个模板:

    在这里插入图片描述

    1. 至于每个模板的文件夹里的内容,这就涉及到模板开发了,相关内容太多,就不在本篇展开了,只说一下重点:template.yml是函数描述文件,必须要有,然后是Dockerfile,这是用来构建镜像用的,至于其他内容和各种模板自身特点有关,在制作镜像时会用到,以java11为例,含有gradle、java相关的文件,这都是构建java工程时会用到,而java工程的构建结果又会被放入docker镜像中,阅读Dockerfile的内容可以详细的看到这一切;
    2. 当下为了快速做出模板,可以把官方模板的内容复制过来,改改就能用,地址:https://github.com/openfaas/templates
    3. 仓库准备好之后,任何人都可以通过类似以下命令来下载仓库使用了:
    faas template pull https://github.com/zq2599/openfaas-templates
    

    注意点

    最后有两处温馨提醒,请注意:

    1. 现在GitHub上新增的仓库,默认分支已经不是master了,而是mian,但fass-cli命令认准的是master分支,所以请您确保自己的仓库文件内容都在master分支,而不是main
    2. 执行命令查看官方模板时,可以看到java8的模板,如下图红框,原以为这是java开发者的福音:

    在这里插入图片描述

    尽管在列表中可以看到java8,但是OpenFaaS的官方文档宣布java8模板已经废弃,不建议使用,如下图红框,文档地址:https://docs.openfaas.com/cli/templates/#java

    在这里插入图片描述

    • 以上就是模板相关的操作了,本篇作为基础还是挺重要的,建议您多动手熟悉相关命令,为后面的深入学习打好基础;

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

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

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

    微信搜索「程序员欣宸」,我是欣宸,期待与您一同畅游Java世界...
    https://github.com/zq2599/blog_demos

  • 相关阅读:
    通过一个程序来理解PHP里面的抽象类【1】
    mycheckpoint 把玩手记
    Mysql 大量 unauthenticated user
    零基础学习Oracle 10G视频教程
    mysql show processlist命令 详解
    c# 中的事件
    c# 中方法签名 指的是?
    c# 中的索引
    介绍如何使用C#中的委托
    C# 语法学习笔记
  • 原文地址:https://www.cnblogs.com/bolingcavalry/p/15095142.html
Copyright © 2020-2023  润新知