openfaas/faas 環(huán)境搭建和開發(fā)使用

前言

serverless 大環(huán)境下出現(xiàn)了 faas闷旧,即 function as a service磷蛹,函數(shù)即服務算撮;其意思也非常好理解,就是能將一個函數(shù)作為一個服務進行使用亿柑,用戶只需要編寫一個函數(shù)功能即可邢疙,不需要額外去關(guān)心別的東西。https://github.com/openfaas/faas 是其中的一種實現(xiàn)方式望薄。

環(huán)境準備

以下環(huán)境在 mac 上進行搭建:

首先需要準備 docker 和 kubernetes 的環(huán)境秘症,先做 k8s 的環(huán)境直接能通過 docker 桌面進行配置,已經(jīng)算是很方便了式矫。

image.png

安裝步驟

openfaas-cli

curl -sL https://cli.openfaas.com | sh

namespace

git clone https://github.com/openfaas/faas-netes
cd faas-netes
kubectl apply -f namespaces.yml

password

$ cat passwd.sh
    # PASSWORD=$(head -c 12 /dev/urandom | sha1sum |cut -d' ' -f1)
    PASSWORD=admin123
    echo $PASSWORD > passwd
    kubectl -n openfaas create secret generic basic-auth \
    --from-literal=basic-auth-user=admin \
    --from-literal=basic-auth-password="$PASSWORD"
$ sh ./passwd.sh

部署

$ kubectl apply -f ./yaml
$ kubectl get pods -n openfaas --watch 

?  ~ kubectl get pods -n openfaas
NAME                                 READY   STATUS    RESTARTS   AGE
alertmanager-7dd959fd86-stslk        1/1     Running   0          3h30m
basic-auth-plugin-85649fd6fc-4xlph   1/1     Running   0          3h30m
faas-idler-f4597f655-6c4nb           1/1     Running   2          3h30m
gateway-7c579bc859-cpm6g             2/2     Running   1          3h30m
nats-8455bfbb58-gq2vh                1/1     Running   0          3h30m
prometheus-86f7fdf9b5-jtb6q          1/1     Running   0          3h30m
queue-worker-c6d788779-xl6d2         1/1     Running   0          3h30m

# 當全部啟動時則正常部署成功

訪問

http://127.0.0.1:31112
admin/admin123

使用

openfaas 默認帶有一些可以部署的 function

nodeinfo

image.png
image.png

點擊 deploy 之后等待狀態(tài) ready 之后就可以進行使用了乡摹,點擊 invoke 進行調(diào)用,這個 function 是用來獲取主機信息的采转。

ocr

image.png

這個 function 是用來做圖像識別的

還有其他很多自帶的 function 都可以試試聪廉,這里不再列舉了

qrcode

其實很多 function 的實現(xiàn)是非常簡單的,如這個生成二維碼的 function故慈,使用 go 實現(xiàn)板熊,代碼如下

package main

import (
    "encoding/binary"
    "io/ioutil"
    "log"
    "os"

    qrcode "github.com/skip2/go-qrcode"
)

func main() {
    input, err := ioutil.ReadAll(os.Stdin)
    if err != nil {
        log.Fatalf("Unable to read standard input: %s", err.Error())
    }
    png, err := qrcode.Encode(string(input), qrcode.Medium, 256)
    if err != nil {
        log.Fatalf("Unable to read standard input: %s", err.Error())
    }
    binary.Write(os.Stdout, binary.LittleEndian, png)
}

其實就是調(diào)用了一個三方的庫,在 main 函數(shù)中從 std 讀如參數(shù)察绷,然后將結(jié)果輸出到 stdout 中就可以了干签,就其實和我們普通寫的函數(shù)一模一樣。

實現(xiàn)function

那么如何自己實現(xiàn)一個 function 并注冊使用呢拆撼?其實也很簡單容劳,現(xiàn)在 faas-cli 工具已經(jīng)提供了相關(guān)的功能,這里說明使用 golang 來時進實現(xiàn)的方式闸度,其他語言也是類似的竭贩。

初始化

創(chuàng)建一個空目錄,在空目錄下使用 faas-cli 命令進行初始化

faas-cli new hellofaas --lang go

這樣你就能得到一個基礎的功能目錄

hellofaas 文件夾中包含一個 go 文件莺禁,這個文件就是你需要自己實現(xiàn)的 function留量,里面是一個 http 請求的 handle,接受一個參數(shù),返回一個字符串楼熄,函數(shù)中你可以實現(xiàn)你自己的邏輯功能忆绰。

package function

import (
    "fmt"
)

// Handle a serverless request
func Handle(req []byte) string {
    return fmt.Sprintf("Hello, Go. You said: %s", string(req))
}

配置鏡像參數(shù)

hellofaas.yml 文件是用來部署和上傳鏡像的

version: 1.0
provider:
  name: openfaas
  gateway: http://127.0.0.1:31112
functions:
  hellofaas:
    lang: go
    handler: ./hellofaas
    image: linkinstar/hellofaas:latest 

其中需要修改的是 gateway 為你自己的 faas 部署地址

然后就是 images 是你 docker hub 的地址,如果需要推送到私有倉庫需要你手動進行登錄操作

構(gòu)建可岂、推送较木、部署

剩下就很簡單了,三個命令青柄,構(gòu)建時間可能會長一些,拉取鏡像比較緩慢

faas-cli build -f hellofaas.yml
faas-cli push -f hellofaas.yml
faas-cli deploy -f hello.yml --gateway http://127.0.0.1:31112

如果沒有問題预侯,那么在頁面上你就可以看到你自己的 function 了

image.png

當然你也可以這樣調(diào)用:

echo test | faas-cli invoke hellofaas --gateway http://127.0.0.1:31112

總結(jié)

其實對于 faas 的使用還算簡單致开,并沒有想象中的那么復雜,它的實現(xiàn)方式也比較符合我的想法萎馅,作為一個鏡像進行打包進行輸出進行使用双戳,而且支持各種語言進行實現(xiàn),也不失為一種比較好的實現(xiàn)策略吧糜芳。

我覺得更多的是 function 的這樣的思想飒货,讓我們要意識到,什么樣類型的功能能被抽離為一個 function 峭竣,并且這個的 function 是否應該有業(yè)務屬性塘辅,以及它作為一個 service 的定義是什么,這我覺得是我們應該考慮的皆撩。因為它很輕扣墩,輕的東西就容易多,多的東西就不好管控扛吞,所以控制方面也應該做考慮呻惕。

總之要認清它的目標和使用場景還是一個比較難得事情。

參考文檔

https://www.lanqiao.cn/library/kubernetes-handbook/usecases/openfaas-quick-start/

https://cloud.tencent.com/developer/article/1681551

http://www.liangxiaolei.fun/2020/06/11/k8s%E7%AC%94%E8%AE%B0-serverless-openfaas%E4%BD%93%E9%AA%8C/

https://linux.cn/article-9078-1.html

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末滥比,一起剝皮案震驚了整個濱河市亚脆,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌盲泛,老刑警劉巖濒持,帶你破解...
    沈念sama閱讀 207,113評論 6 481
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異寺滚,居然都是意外死亡弥喉,警方通過查閱死者的電腦和手機,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,644評論 2 381
  • 文/潘曉璐 我一進店門玛迄,熙熙樓的掌柜王于貴愁眉苦臉地迎上來由境,“玉大人,你說我怎么就攤上這事÷步埽” “怎么了讥蟆?”我有些...
    開封第一講書人閱讀 153,340評論 0 344
  • 文/不壞的土叔 我叫張陵,是天一觀的道長纺阔。 經(jīng)常有香客問我瘸彤,道長,這世上最難降的妖魔是什么笛钝? 我笑而不...
    開封第一講書人閱讀 55,449評論 1 279
  • 正文 為了忘掉前任质况,我火速辦了婚禮,結(jié)果婚禮上玻靡,老公的妹妹穿的比我還像新娘结榄。我一直安慰自己,他們只是感情好囤捻,可當我...
    茶點故事閱讀 64,445評論 5 374
  • 文/花漫 我一把揭開白布臼朗。 她就那樣靜靜地躺著,像睡著了一般蝎土。 火紅的嫁衣襯著肌膚如雪视哑。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 49,166評論 1 284
  • 那天誊涯,我揣著相機與錄音挡毅,去河邊找鬼。 笑死暴构,一個胖子當著我的面吹牛慷嗜,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播丹壕,決...
    沈念sama閱讀 38,442評論 3 401
  • 文/蒼蘭香墨 我猛地睜開眼庆械,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了菌赖?” 一聲冷哼從身側(cè)響起缭乘,我...
    開封第一講書人閱讀 37,105評論 0 261
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎琉用,沒想到半個月后堕绩,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 43,601評論 1 300
  • 正文 獨居荒郊野嶺守林人離奇死亡邑时,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 36,066評論 2 325
  • 正文 我和宋清朗相戀三年奴紧,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片晶丘。...
    茶點故事閱讀 38,161評論 1 334
  • 序言:一個原本活蹦亂跳的男人離奇死亡黍氮,死狀恐怖唐含,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情沫浆,我是刑警寧澤捷枯,帶...
    沈念sama閱讀 33,792評論 4 323
  • 正文 年R本政府宣布,位于F島的核電站专执,受9級特大地震影響淮捆,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜本股,卻給世界環(huán)境...
    茶點故事閱讀 39,351評論 3 307
  • 文/蒙蒙 一攀痊、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧拄显,春花似錦苟径、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,352評論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽嚼吞。三九已至盒件,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間舱禽,已是汗流浹背炒刁。 一陣腳步聲響...
    開封第一講書人閱讀 31,584評論 1 261
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留誊稚,地道東北人翔始。 一個月前我還...
    沈念sama閱讀 45,618評論 2 355
  • 正文 我出身青樓,卻偏偏與公主長得像里伯,于是被迫代替她去往敵國和親城瞎。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 42,916評論 2 344