OpenFaaS實戰之四:模板操作(template)

程式設計師欣宸發表於2021-08-03

歡迎訪問我的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

相關文章