OpenFaas
ๆฌๆไธป่ฆๅบไบ OpenFaas v0.18.18 ็ๆฌๅ faas-netes v0.12.2 ็ๆฌ
ๆ่ฟ release
ๅผๅงๅญฆไน ไนๅ๏ผๅ ็็ๆฌ repo ๆ่ฟๅจๅนฒไปไน๏ผๆช่ณ 2021.06๏ผ:
OpenFaas
0.20.0 [2020.11]
Add namespace in function name for metrics
0.19.0 [2020.10]
Security update for UI (AngularJS & Material)
0.18.18 [2020.07]
Remove service namespace from scale request
0.18.17 [2020.04]
Publish async requests to multiple topics
0.18.16 [2020.04]
Add QueueName to async requests
faas-netes
0.13.0 [2021.02]
Update provider to v0.17.0
0.12.0 [2020.07]
Create new Policy client and type so that we can read Policy
configurations
Add linkerd auto injection
0.11.0 [2020.06]
Add cluster role and binding to operator
Expose nats monitoring metrics to prometheus
0.10.5 [2020.05]
Update apply REST handler
่ท fissionใkubelsss ็ฑปไผผ๏ผๆฒกๆๅคชๅคๅ่ฝๆง็ๆนๅจใไธ่ฟไปฅ 0.12.0๏ผ2020.07.15๏ผใ0.12.1๏ผ2020.07.20๏ผใ0.12.2๏ผ2020.07.20๏ผ๏ผๅๅธๅฏ้ใๅ่ฝๆนๅจๅฐ๏ผ็ๆฌ็ฎก็่ฟๆฏๆ็นๅซๅ ทไธๆ ผ๏ผๆไปฅๅ็ปญๅชๅ ณๆณจ 0.12 -> 0.13 ่ฟ็งๅคง็ๆฌๅๅจ๏ผ่ฝ็ถ็่ตทๆฅๅคง็ๆฌ้ดไนๆฒกๆๅคชๅคๅๅ
้จ็ฝฒ
็ปๅๅฎๆๆฅๅญฆไน ๆฌ repo
ๅฎ่ฃ
ๅฎ่ฃ
client
$ curl -Lo faas-cli https://github.com/openfaas/faas-cli/releases/download/0.12.8/faas-cli \
&& chmod +x faas-cli && sudo mv faas-cli /usr/local/bin/
ๅฎ่ฃ
server
$ cd faas-netes # ่ฟๅ
ฅ faas-netes ไปๅบ
$ kubectl apply -f namespaces.yml
$ kubectl -n openfaas create secret generic basic-auth \
--from-literal=basic-auth-user=admin \
--from-literal=basic-auth-password="admin"
$ kubectl apply -f ./yaml/
็กฎ่ฎค้จ็ฝฒ็ปไปถ้ฝๅทฒๆญฃๅธธๅทฅไฝ
$ kubectl -n openfaas get pod
NAME READY STATUS RESTARTS AGE
alertmanager-7b84d7cf98-4clfx 1/1 Running 0 2m29s
basic-auth-plugin-6b69d6f8f7-hdg4s 1/1 Running 0 2m29s
faas-idler-69669f65b4-9dwgg 1/1 Running 0 2m29s
gateway-5bb669b8b9-7jnnr 2/2 Running 0 2m29s
nats-7b999bdb67-s9wsg 1/1 Running 0 2m29s
prometheus-88c57d976-fqmss 1/1 Running 0 2m28s
queue-worker-6c95cf8664-nm4sb 1/1 Running 0 2m28s
้ช่ฏ
$ export OPENFAAS_URL=http://127.0.0.1:31112
$ faas-cli login --password admin
$ faas-cli store deploy figlet
$ echo "hello, world!" | faas-cli invoke figlet
hello, world!
ๅธ่ฝฝ
$ kubectl delete -f ./yaml/
$ kubectl delete -f namespaces.yml
ๆถๆ
ๅฎ่ฃ ๅฎ OpenFaas ไนๅ๏ผๆฅๆขณ็ไธๅฎ่ฃ ็็ปไปถ
pod
ๅฎนๅจ
ๅฝไปค
ๆบ็ repo
basic-auth-plugin
basic-auth-plugin
handler
OpenFaas
gateway
gateway
gateway
OpenFaas
faas-netes
faas-netes
faas-netes
ๆณจ๏ผ
faas-idler ็ผบ็ๅฎ่ฃ ๆ ๅตไธ๏ผๆฏไปฅ dry-run ่ฟ่ก็๏ผไนๅฐฑๆฏๅนถๆฒกๆๅจๅทฅไฝ
basic-auth ๆฏไธช็ฎๅ็้ดๆๅฎ็ฐ๏ผ่ฟ้ๅฐฑไธๅ่ฏฆ็ป่ฏดๆไบ
ๆดไฝๆถๆๅฆไธ๏ผ

ๅ ถไธญ๏ผ
alertmanagerใnatsใprometheus ๆฏ็คพๅบๅ ถๅฎ้กน็ฎ็ปไปถ
queue-worker ๆฏ้ ๅ nas ๅๅผๆญฅๅฝๆฐ invoke ็จ็
่ k8s ไฝ็ณปไธ faas ็็ธๅ ณๅฎ็ฐ๏ผไธป่ฆ้ฝๆฏๅจ faas-netes ไธญๅฎ็ฐ็
ๆฆๅฟต
ไธ Fission ๅ Kubeless ไธๅ๏ผOpenFaas ๆฏไป docker ็คพๅบ่ฏ็็้กน็ฎ๏ผๆไปฅๆๅ็่ฎพ่ฎกๆฏ้ขๅ่ฟ็จๅผ็๏ผๅนถๆฒกๆๅผๅ ฅ CRD
ๆณจ๏ผๆฒกๆ CRD ๅฝๅๆฏ็ผบ็ๆจกๅผ๏ผfaas-netes ไน่ฟฝๅ ไบไธ็ง้ขๅ CRD ็ๅฎ็ฐ
ไฝฟ็จ
ๅบๆฌๅ่ฝ
ๆฌๅฐ่ไผๆ็ งโไป้ถๅผๅงๅไธไธช go ๅฝๆฐโ็ๆต็จ๏ผๆฅๆขณ็ๅ่ฝ
ๅๅปบๅฝๆฐ
$ faas-cli new hello-go --lang go
ไธ่ฟฐๅฝไปคๅๅปบไบไธไธช go ๅฝๆฐใๅฎ้ ๅฎๆ็ๅทฅไฝๆฏ๏ผไปๆจกๆฟๅบ้่ทๅๆจกๆฟๅฐๅฝๅ็ฎๅฝ
$ tree -L 2
.
โโโ hello-go
โ โโโ handler.go
โโโ hello-go.yml
โโโ template
โโโ csharp
โโโ csharp-armhf
โโโ dockerfile
โโโ go
โโโ go-armhf
โโโ java11
โโโ java11-vert-x
โโโ java8
โโโ node
โโโ node12
โโโ node-arm64
โโโ node-armhf
โโโ php7
โโโ python
โโโ python3
โโโ python3-armhf
โโโ python3-debian
โโโ python-armhf
โโโ ruby
ๅกซๅ
go ๅฝๆฐ
ๅๅฐฑๆไปฌๆฌๆฌกๆต็จ่่ฎบ๏ผๅฏไปฅไปไน้ฝไธๆนใ็ผบ็ๆจกๆฟไปฃ็ ๏ผ
$ cat hello-go/handler.go
package function
import (
"fmt"
)
// Handle a serverless request
func Handle(req []byte) string {
return fmt.Sprintf("Hello, Go. You said: %s", string(req))
}
็ผ่ฏ go ๅฝๆฐ
$ faas-cli build -f hello-go.yml
ไธ่ฟฐๅฝไปคๆฌ่ดจไธๅฐฑๆฏ docker build๏ผๆ็ป็ๆไธไธชๅซๆ fwatchdog๏ผไธไธช go web server๏ผ ๅ go ไปฃ็ ็ผ่ฏๅ ็ๅทฅไฝ้ๅ
ๆจ้ go ้ๅ
$ faas-cli push -f hello-go.yml
ไธ่ฟฐๅฝไปคๆฌ่ดจไธๅฐฑๆฏ docker push
้จ็ฝฒ go ๅฝๆฐ
$ faas-cli deploy -f hello-go.yml
ไธ่ฟฐๅฝไปคๅฐๅๅ็ผ่ฏใๆจ้ๅฅฝ็ docker ้ๅ้จ็ฝฒๅฐ k8sใๆถๅ็ๅฎๆดๆต็จๆฏ๏ผ
faas-cli ๅ้ deploy ่ฏทๆฑๅฐ gateway
gateway ๅฐ deploy ่ฏทๆฑ่ฝฌๅ็ป faas-netes
faas-netes ๅๅปบๅฏนๅบ็ deploymentใservice
ไนๅชๆๅฐไบ่ฟไธๆญฅ๏ผfaas-cli ๆ่ฝ็ๅฐๅฝๆฐ๏ผ็ผบ็ๆจกๅผไธ๏ผใๅ ไธบๆฒกๆๅผๅ ฅ CRD๏ผfaas-cli list ๅฝไปคๆฌ่ดจไธไนไพ่ตไป deploy ่ทๅไฟกๆฏ๏ผๆขๅฅ่ฏ่ฏดๅ ้ค deploy๏ผlist ่ฟๅไนไผๅไธบ็ฉบใ่ๅฆๅคไธคไธชๅนณๅฐ๏ผๅไผๆ นๆฎ CR๏ผ้ๆฐๅๅปบ deploy
$ kubectl -n openfaas-fn get deploy
NAME READY UP-TO-DATE AVAILABLE AGE
hello-go 1/1 1 1 11m
$ faas-cli list
Function Invocations Replicas
hello-go 1 1
่งฆๅ go ๅฝๆฐ
$ echo -n "hello, world!" | faas-cli invoke hello-go
Hello, Go. You said: hello, world!
ไธ่ฟฐๅฝไปคๅฎๆไบ go ๅฝๆฐ็่งฆๅใๆถๅ็ๅฎๆดๆต็จๆฏ๏ผ
faas-cli ๅ้ invoke ๅฝไปคๅฐ gateway
gateway ไป faas-netes ่ทๅๅฝๆฐๅฐๅ
gateway ่ฐ็จๅฝๆฐ
pod ้็ fwatchdog ่ฟ็จๆถๅฐ่ฏทๆฑ๏ผๅ ่ฝฝๅนถ่ฟ่ก็จๆทๅฝๆฐ
ๅฝๆฐๆฉ็ผฉ
OpenFaas ๆไพไบๅค็งๆฉ็ผฉๅฎ็ฐ๏ผ
ๅบไบ AlertManager ็ๅฎ็ฐ
ๅบไบ HPA ็ๅฎ็ฐ
้คๆญคไนๅค๏ผgateway ๆไพไบ "scale up from zero" ่ฝๅ๏ผfaas-idler ็ปไปถๆไพไบ "scale down to zero" ็่ฝๅ
OpenFaas ็ๆฉ็ผฉ้ ็ฝฎๆฏ่พๅๆฃ๏ผๅ่ๆๆกฃ
ๅฝๆฐ่งฆๅ
ไธ่ฟฐๅฐ่ไปฅๅฝไปค่ก็ๅฝขๅผ๏ผๆๅทฅ่งฆๅๅฝๆฐ่ฐ็จ๏ผ่ๅจ็ไบง็ฏๅข๏ผOpenFaas ๆไพไบไปฅไธๅ ็ง่งฆๅๆนๅผ๏ผ
cron
็ฑปไผผ Fission timer trigger๏ผๅจ k8s ไฝ็ณปไธ้่ฟ cronjob ๅฎ็ฐ๏ผๅจๅ ถๅฎๅนณๅฐๆไพไบ cron connector
http/webhooks
็ผบ็ๆฏๆ๏ผ้่ฟไปฅไธๅฐๅ่งฆๅ
https://<gateway URL>:<port>/function/<function name>
async/nats streaming
็ผบ็ๆฏๆ๏ผ้่ฟไปฅไธๅฐๅ่งฆๅ
https://<gateway URL>:<port>/async-function/<function name>
่ชๅฎไน trigger
ๆฏๆ่ชๅฎไน connector๏ผ็ๆง่ชๅทฑๅ ณๅฟ็ไบไปถๆบ๏ผ้่ฟ่ฐ็จ gateway ๆฅ่งฆๅๅฝๆฐใOpenFaas ไน็ดฏ็งฏไบไธไบๅผๅๅฅฝ็ connector๏ผๅ ๆฌๅฏนๆฅ AWS ็ญๅไธไบงๅใredis ็ญๅผๆบไบงๅ็ๅฎ็ฐ
Last updated
Was this helpful?