歡迎訪問我的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實戰》系列的第四篇,經歷了前三篇快節奏操作,我們們對OpenFaaS有了基本瞭解,至少部署和開發是輕車熟路,現在要放慢腳步夯實基本功,掃除知識盲點;
- 本篇目標是掌握template(模板)有關知識,包括以下內容:
- 基本命令
- 使用第三方模板
- 自己製作模板倉庫
- 注意事項
- 從上面的概覽可見,本篇內容不多但很基礎很重要,接下來開啟終端動手練習吧;
關於簡化命令
如下所示,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
基本命令
- 獲取所有官方模板:
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
...
- 檢視官方模板列表:
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
- 有了模板,就能建立函式,如下命令建立名為java-function的函式:
faas-cli new --lang java11 java-function
成功後,修改此檔案新增業務程式碼:./src/main/Handler.java;
- 前面執行faas template store list檢視的時候,注意每個模板的SOURCE欄位,如果是openfaas-incubator,例如rust-http,就要使用以下命令來下載(多了個字首openfaas-incubator):
faas-cli template store pull openfaas-incubator/rust-http
以上是模板的基本操作,此刻您可能有疑問:那些都是官方模板,第三方的模板怎麼獲取?另外如果我想自己做模板給別人用,又該如何操作?這些問題,接下來逐個解答;
使用第三方模板
- 我在GitHub上做了個第三方模板倉庫,來看如何使用,使用其他人的第三方模板都是這個套路;
- 所謂模板倉庫,其本質還是普通的GitHub倉庫,只是裡面的內容要符合OpenFaaS的要求;
- 我的模板倉庫地址是:https://github.com/zq2599/openfaas-templates ,如下圖:
4. 下載上述模板倉庫的命令(注意,找個乾淨的資料夾執行命令):
faas template pull https://github.com/zq2599/openfaas-templates
可見就是把倉庫地址作為引數放在整個命令的末尾
- 控制檯操作如下,可見下載了一個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
- 執行faas new --list看有哪些模板,果然是GitHub倉庫中的兩個:
[root@node1 333]# faas new --list
Languages available as templates:
- dockerfile
- java11extend
- 使用模板建立函式:
faas-cli new java11extend-function --lang java11extend -p bolingcavalry
- 製作映象:
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
- 接下來將映象推送到映象倉庫、部署函式、驗證等操作請參考前文《OpenFaaS實戰之三:Java函式》,裡面有詳細的步驟,就不在本文中展開了,下面的圖片證明此模板做出的函式可以正常部署和執行:
自己製作模板倉庫
經歷了前面的實戰,對於如何製作模板倉庫,相信您心中已經有了答案,這裡簡單小結一下需要遵守的原則:
- 在GitHub上有個公共倉庫;
- 所有內容必須放在master分支;
- 倉庫內要有名為template的資料夾;
- template資料夾裡面,是每個模板自己的資料夾,如下圖,是兩個模板:
- 至於每個模板的資料夾裡的內容,這就涉及到模板開發了,相關內容太多,就不在本篇展開了,只說一下重點:template.yml是函式描述檔案,必須要有,然後是Dockerfile,這是用來構建映象用的,至於其他內容和各種模板自身特點有關,在製作映象時會用到,以java11為例,含有gradle、java相關的檔案,這都是構建java工程時會用到,而java工程的構建結果又會被放入docker映象中,閱讀Dockerfile的內容可以詳細的看到這一切;
- 當下為了快速做出模板,可以把官方模板的內容複製過來,改改就能用,地址:https://github.com/openfaas/templates
- 倉庫準備好之後,任何人都可以通過類似以下命令來下載倉庫使用了:
faas template pull https://github.com/zq2599/openfaas-templates
注意點
最後有兩處溫馨提醒,請注意:
- 現在GitHub上新增的倉庫,預設分支已經不是master了,而是mian,但fass-cli命令認準的是master分支,所以請您確保自己的倉庫檔案內容都在master分支,而不是main
- 執行命令檢視官方模板時,可以看到java8的模板,如下圖紅框,原以為這是java開發者的福音:
儘管在列表中可以看到java8,但是OpenFaaS的官方文件宣佈java8模板已經廢棄,不建議使用,如下圖紅框,文件地址:https://docs.openfaas.com/cli/templates/#java
- 以上就是模板相關的操作了,本篇作為基礎還是挺重要的,建議您多動手熟悉相關命令,為後面的深入學習打好基礎;
你不孤單,欣宸原創一路相伴
歡迎關注公眾號:程式設計師欣宸
微信搜尋「程式設計師欣宸」,我是欣宸,期待與您一同暢遊Java世界...
https://github.com/zq2599/blog_demos