藉助 minikube 上手 OpenFaaS
本文將介紹如何藉助 minikube 在 Kubernetes 1.8 上搭建 OpenFaaS(讓 Serverless Function 變得更簡單)。minikube 是一個 Kubernetes 分發版,藉助它,你可以在筆記本電腦上運行 Kubernetes 集群,minikube 支持 Mac 和 Linux 操作系統,但是在 MacOS 上使用得更多一些。
本文基於我們最新的部署手冊 Kubernetes 官方部署指南
安裝部署 Minikube
1、 安裝 xhyve driver 或 VirtualBox ,然後在上面安裝 Linux 虛擬機以部署 minikube 。根據我的經驗,VirtualBox 更穩定一些。
2、 參照官方文檔 安裝 minikube 。
3、 使用 brew
或 curl -sL cli.openfaas.com | sudo sh
安裝 faas-cli
。
4、 通過 brew install kubernetes-helm
安裝 helm
命令行。
5、 運行 minikube :minikube start
。
Docker 船長小貼士:Mac 和 Windows 版本的 Docker 已經集成了對 Kubernetes 的支持。現在我們使用 Kubernetes 的時候,已經不需要再安裝額外的軟體了。
在 minikube 上面部署 OpenFaaS
1、 為 Helm 的伺服器組件 tiller 新建服務賬號:
kubectl -n kube-system create sa tiller
&& kubectl create clusterrolebinding tiller
--clusterrole cluster-admin
--serviceaccount=kube-system:tiller
2、 安裝 Helm 的服務端組件 tiller:
helm init --skip-refresh --upgrade --service-account tiller
3、 克隆 Kubernetes 的 OpenFaaS 驅動程序 faas-netes:
git clone https://github.com/openfaas/faas-netes && cd faas-netes
4、 Minikube 沒有配置 RBAC,這裡我們需要把 RBAC 關閉:
helm upgrade --install --debug --reset-values --set async=false --set rbac=false openfaas openfaas/
(LCTT 譯註:RBAC(Role-Based access control)基於角色的訪問許可權控制,在計算機許可權管理中較為常用,詳情請參考以下鏈接:https://en.wikipedia.org/wiki/Role-based_access_control )
現在,你可以看到 OpenFaaS pod 已經在你的 minikube 集群上運行起來了。輸入 kubectl get pods
以查看 OpenFaaS pod:
NAME READY STATUS RESTARTS AGE
alertmanager-6dbdcddfc4-fjmrf 1/1 Running 0 1m
faas-netesd-7b5b7d9d4-h9ftx 1/1 Running 0 1m
gateway-965d6676d-7xcv9 1/1 Running 0 1m
prometheus-64f9844488-t2mvn 1/1 Running 0 1m
30,000ft:
該 API 網關包含了一個 用於測試功能的最小化 UI,同時開放了用於功能管理的 RESTful API 。 faas-netesd 守護進程是一種 Kubernetes 控制器,用來連接 Kubernetes API 伺服器來管理服務、部署和密碼。
Prometheus 和 AlertManager 進程協同工作,實現 OpenFaaS Function 的彈性縮放,以滿足業務需求。通過 Prometheus 指標我們可以查看系統的整體運行狀態,還可以用來開發功能強悍的儀錶盤。
Prometheus 儀錶盤示例:
構建/遷移/運行
和很多其他的 FaaS 項目不同,OpenFaaS 使用 Docker 鏡像格式來進行 Function 的創建和版本控制,這意味著可以在生產環境中使用 OpenFaaS 實現以下目標:
- 漏洞掃描(LCTT 譯註:此處我覺得應該理解為更快地實現漏洞補丁)
- 持續集成/持續開發
- 滾動更新
你也可以在現有的生產環境集群中利用空閑資源部署 OpenFaaS。其核心服務組件內存佔用大概在 10-30MB 。
OpenFaaS 一個關鍵的優勢在於,它可以使用容器編排平台的 API ,這樣可以和 Kubernetes 以及 Docker Swarm 進行本地集成。同時,由於使用 Docker 存儲庫 進行 Function 的版本控制,所以可以按需擴展 Function,而沒有按需構建 Function 的框架的額外的延時。
新建 Function
faas-cli new --lang python hello
以上命令創建文件 hello.yml
以及文件夾 handler
,文件夾有兩個文件 handler.py
、requirements.txt
可用於你可能需要的 pip 模塊。你可以隨時編輯這些文件和文件夾,不需要擔心如何維護 Dockerfile —— 我們為你通過以下方式維護:
- 分級創建
- 非 root 用戶
- 以官方的 Docker Alpine Linux 版本為基礎進行鏡像構建 (可替換)
構建你的 Function
先在本地創建 Function,然後推送到 Docker 存儲庫。 我們這裡使用 Docker Hub,打開文件 hello.yml
然後輸入你的賬號名:
provider:
name: faas
gateway: http://localhost:8080
functions:
hello:
lang: python
handler: ./hello
image: alexellis2/hello
現在,發起構建。你的本地系統上需要安裝 Docker 。
faas-cli build -f hello.yml
把封裝好 Function 的 Docker 鏡像版本推送到 Docker Hub。如果還沒有登錄 Docker hub ,繼續前需要先輸入命令 docker login
。
faas-cli push -f hello.yml
當系統中有多個 Function 的時候,可以使用 --parallel=N
來調用多核並行處理構建或推送任務。該命令也支持這些選項: --no-cache
、--squash
。
部署及測試 Function
現在,可以部署、列出、調用 Function 了。每次調用 Function 時,可以通過 Prometheus 收集指標值。
$ export gw=http://$(minikube ip):31112
$ faas-cli deploy -f hello.yml --gateway $gw
Deploying: hello.
No existing function to remove
Deployed.
URL: http://192.168.99.100:31112/function/hello
上面給到的是部署時調用 Function 的標準方法,你也可以使用下面的命令:
$ echo test | faas-cli invoke hello --gateway $gw
現在可以通過以下命令列出部署好的 Function,你將看到調用計數器數值增加。
$ faas-cli list --gateway $gw
Function Invocations Replicas
hello 1 1
提示:這條命令也可以加上 --verbose
選項獲得更詳細的信息。
由於我們是在遠端集群(Linux 虛擬機)上面運行 OpenFaaS,命令裡面加上一條 --gateway
用來覆蓋環境變數。 這個選項同樣適用於雲平台上的遠程主機。除了加上這條選項以外,還可以通過編輯 .yml 文件裡面的 gateway
值來達到同樣的效果。
遷移到 minikube 以外的環境
一旦你在熟悉了在 minikube 上運行 OpenFaaS ,就可以在任意 Linux 主機上搭建 Kubernetes 集群來部署 OpenFaaS 了。
繼續學習
我們的 Github 上面有很多手冊和博文,可以帶你輕鬆「上車」,把我們的頁面保存成書籤吧:openfaas/faas 。
2017 哥本哈根 Dockercon Moby 峰會上,我做了關於 Serverless 和 OpenFaaS 的概述演講,這裡我把視頻放上來,視頻不長,大概 15 分鐘左右。
最後,別忘了關注 OpenFaaS on Twitter 這裡有最潮的新聞、最酷的技術和 Demo 展示。
via: https://medium.com/@alexellisuk/getting-started-with-openfaas-on-minikube-634502c7acdf
作者:Alex Ellis 譯者:mandeler 校對:wxy
本文轉載來自 Linux 中國: https://github.com/Linux-CN/archive