欢迎访问我的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目录,里面有两个模板:dockerfile和java11extend:
[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

OpenFaaS实战之四:模板操作(template)的更多相关文章

  1. OpenFaaS实战之七:java11模板解析

    欢迎访问我的GitHub https://github.com/zq2599/blog_demos 内容:所有原创文章分类汇总及配套源码,涉及Java.Docker.Kubernetes.DevOPS ...

  2. OpenFaaS实战之八:自制模板(maven+jdk8)

    欢迎访问我的GitHub https://github.com/zq2599/blog_demos 内容:所有原创文章分类汇总及配套源码,涉及Java.Docker.Kubernetes.DevOPS ...

  3. OpenFaaS实战之九:终篇,自制模板(springboot+maven+jdk8)

    欢迎访问我的GitHub https://github.com/zq2599/blog_demos 内容:所有原创文章分类汇总及配套源码,涉及Java.Docker.Kubernetes.DevOPS ...

  4. OpenFaaS实战之一:部署

    欢迎访问我的GitHub https://github.com/zq2599/blog_demos 内容:所有原创文章分类汇总及配套源码,涉及Java.Docker.Kubernetes.DevOPS ...

  5. OpenFaaS实战之二:函数入门

    欢迎访问我的GitHub https://github.com/zq2599/blog_demos 内容:所有原创文章分类汇总及配套源码,涉及Java.Docker.Kubernetes.DevOPS ...

  6. OpenFaaS实战之三:Java函数

    欢迎访问我的GitHub https://github.com/zq2599/blog_demos 内容:所有原创文章分类汇总及配套源码,涉及Java.Docker.Kubernetes.DevOPS ...

  7. OpenFaaS实战之五:大话watchdog

    欢迎访问我的GitHub https://github.com/zq2599/blog_demos 内容:所有原创文章分类汇总及配套源码,涉及Java.Docker.Kubernetes.DevOPS ...

  8. OpenFaaS实战之六:of-watchdog(为性能而生)

    欢迎访问我的GitHub https://github.com/zq2599/blog_demos 内容:所有原创文章分类汇总及配套源码,涉及Java.Docker.Kubernetes.DevOPS ...

  9. 模板(Template)

    最近阅读google chromium base container stack_container代码,深刻感觉到基础知识不扎实. // Casts the buffer in its right ...

随机推荐

  1. DOS命令行(11)——更多实用的命令行工具

    start 启动另一个窗口运行指定的程序或命令,所有的DOS命令和命令行程序都可以由start命令来调用.该命令不仅能运行程序,还能运行协议对应的程序 命令格式:START ["title& ...

  2. hackthebox TheNotebook

    前言 只拿到了user,提权没成功--有wp说是CVE-2019-5736,我没打成. 打点 nmap-sV -v -A 10.10.10.230 端口扫描结果: PORT STATE SERVICE ...

  3. Java-学习日记(Atomic,Volatile)

    很早之前在公司就看到了atomicInteger,atomicLong这些变量了,一直不明白是什么意思,今天花了点时间了解下. volatile: 先从volatile开始讲起,volatile是多线 ...

  4. Kubernetes自动横向伸缩集群节点以及介绍PDB资源

    在kubernetes中,有HPA在需要的时候创建更多的pod实例.但万一所有的节点都满了,放不下更多pod了,怎么办?显然这个问题并不局限于Autoscaler创建新pod实例的场景.即便是手动创建 ...

  5. 01 Linux系统配置初始化

    #/bin/bash export PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/root/bin # 更改主机名 # hostnam ...

  6. 1、mysql基础入门(1)

    1.mysql基础入门: 1.1.数据库介绍:

  7. 图的存储与遍历C++实现

    1.图的存储 设点数为n,边数为m 1.1.二维数组 方法:使用一个二维数组 adj 来存边,其中 adj[u][v] 为 1 表示存在 u到 v的边,为 0 表示不存在.如果是带边权的图,可以在 a ...

  8. 重新整理 .net core 实践篇————cookie 安全问题[三十八]

    前言 简单整理一下cookie的跨站攻击,这个其实现在不常见,因为很多公司都明确声明不再用cookie存储重要信息,不过对于老站点还是有的. 正文 攻击原理: 这种攻击要达到3个条件: 用户访问了我们 ...

  9. Hibernate框架(四)缓存策略+lazy

    Hibernate作为和数据库数据打交道的框架,自然会设计到操作数据的效率问题,而对于一些频繁操作的数据,缓存策略就是提高其性能一种重要手段,而Hibernate框架是支持缓存的,而且支持一级和二级两 ...

  10. buu 红帽杯easyre

    一.拖入ida静态分析 找到关键函数,然后 这步是可以得出前4个字符是flag,不知道为啥我这边的v15的内存地址为空,不然可以异或解出来的,ida日常抽风... 十次的base64加密,我用在线平台 ...