本指南適用於在 Linux 主機上執行的 vanilla Kubernetes 1.8 或 1.9 叢集。他不是一個手冊,請參閱openfaas/guide上提供的一系列指南和部落格文章。
Kubernetes
OpenFaaS 是 Kubernetes 原生的,而且用到了Deployments, Services 和 Secrets。更多的資訊請檢視"faas-netes"
1.0 構建叢集
你可以在膝上型電腦或者一個 VM 虛擬機器(雲端或者本地)上評估 FaaS 並用它構建函式。
更多關於Kubernetes設定的資訊。
我們這裡有一個特別的 minikube 指南:
!!! 小提示
如果你正在使用 Google Kubernetes Engine (GKE),name 需要用以下命令建立一個 RBAC 角色:
$ kubectl create clusterrolebinding "cluster-admin-$(whoami)" \
--clusterrole=cluster-admin \
--user="$(gcloud config get-value core/account)"
複製程式碼
1.1 選擇使用 helm 和 YAML 檔案部署
如果你想使用 helm,請按照 2.0a 的說明進行操作, 否則請按照 2.0b 中說的使用 plain kubectl
2.0a 使用 Helm 進行部署
faas-netes
中有 Helm 圖表,可以點選以下連結進行檢視。
2.0b 部署 OpenFaaS
此步驟假設你可以在主機上執行kubectl
。
-
Clone 程式碼
$ git clone https://github.com/openfaas/faas-netes 複製程式碼
使用 NATS 流框架提供的非同步函式部署棧。
-
部署整個棧
整個命令包含兩個部分,以便始終首先建立 OpenFaaS 的名稱空間:
- openfaas - OpenFaaS 的 service
- openfaas-fn - 函式
$ kubectl apply -f https://raw.githubusercontent.com/openfaas/faas-netes/master/namespaces.yml 複製程式碼
現在就可以部署 OpenFaaS:
$ cd faas-netes && \ kubectl apply -f ./yaml 複製程式碼
!!! 注意 要在支援 Kubernetes LoadBalancers的雲上部署,你可能還需要在
cloud/lb.yml
中進行一些配置。
3.0 使用 OpenFaaS
在部署 OpenFaaS 之後,你可以開始通過一個教程或者部落格文章來建立無伺服器函式或者測試社群函式。
你也可以通過視訊來觀看 OpenFaaS 在 Kubernetes 上的完整演示,包括自動伸縮以及如何使用 Prometheus 的 UI 介面。 視訊演示。
部署一個函式
為了簡單起見,預設使用 NodePorts 配置而不是使用更設定起來更復雜的 IngressController。
Service | TCP port |
---|---|
API Gateway / UI | 31112 |
Prometheus | 31119 |
!!! 注意 如果你是高階的 Kubernetes 使用者,則可以移除 NodePort 並向棧中新增 IngressController。
- 部署示例函式
雖然現在棧裡面並沒有內建的示例函式,但是我們可以通過 UI 或者 FaaS-CLI 快速新增一些。
使用 CLI
-
安裝 CLI
$ curl -sL https://cli.openfaas.com | sudo sh 複製程式碼
也可以使用非 root 使用者執行指令碼。faas-cli 二進位制檔案被下載到當前的工作目錄。
-
克隆一些示例函式然後在叢集中部署
$ git clone https://github.com/openfaas/faas-cli 複製程式碼
編輯 stack.yml,將閘道器地址從
localhost:8080
改為kubernetes-node-ip:31112
或者在命令中使用--gateway
/-g
。示例:
provider: name: faas gateway: http://192.168.4.95:31112 複製程式碼
部署示例:
$ faas-cli deploy -f stack.yml 複製程式碼
!!! 資訊 faas-cli 還支援的重寫
--gateway http://...
:faas-cli deploy -f stack.yml --gateway http://127.0.0.1:31112 複製程式碼
-
列出函式
$ faas-cli list -f stack.yml 或者 $ faas-cli list -g http://127.0.0.1:31112 Function Invocations Replicas inception 0 1 nodejs-echo 0 1 ruby-echo 0 1 shrink-image 0 1 stronghash 2 1 複製程式碼
-
呼叫函式:
$ echo -n "Test" | faas-cli invoke stronghash -g http://127.0.0.1:31112 c6ee9e33cf5c6715a1d148fd73f7318884b41adcb916021e2bc0e800a5c5dd97f5142178f6ae88c8fdd98e1afb0ce4c8d2c54b5f37b30b7da1997bb33b0b8a31 - 複製程式碼
-
構建你的第一個Python 函式
使用 UI
UI 介面被暴露在 31112 埠。
點選"New Function"然後填寫以下的內容:
Field | Value |
---|---|
Service | nodeinfo |
Image | functions/nodeinfo:latest |
fProcess | node main.js |
Network | default |
- Test the function
- 測試函式
你的函式將會在幾秒之後出現,然後點選"Invoke"
函式也可以通過 CLI 呼叫:
$ echo -n "" | faas-cli invoke --gateway http://kubernetes-ip:31112 nodeinfo
$ echo -n "verbose" | faas-cli invoke --gateway http://kubernetes-ip:31112 nodeinfo
複製程式碼
4.0 在 Kubernetes 上使用私有 registry
如果你使用一個託管的私有 Docker registry(Docker Hub或者其他),為了檢查如何配置,請參考 Kubernetes文件。
從私有 Docker 映象部署一個函式
通過如下命令,你可以從一個私有的Docker 映象部署一個函式,打 tag 並推送到你的 docker 註冊賬戶中:
$ docker pull functions/alpine:latest
$ docker tag functions/alpine:latest $DOCKER_USERNAME/private-alpine:latest
$ docker push $DOCKER_USERNAME/private-alpine:latest
複製程式碼
登入Hub,然後將映象設定為private-alpine
。
然後建立 OpenFaaS 專案:
$ mkdir privatefuncs && cd privatefuncs
$ touch stack.yaml
複製程式碼
在你喜歡的編輯器中開啟 stack.yaml 然後新增
provider:
name: faas
gateway: http://localhost:8080
functions:
protectedapi:
lang: Dockerfile
skip_build: true
image: username/private-alpine:latest
複製程式碼
建立一個映象拉取祕鑰
如果你嘗試使用faas-cli deploy
去部署,將會發現失敗了,因為 Kubernetes 不能拉取映象。你可以通過 Kubernetes 的 dashboard 或者使用kubectl describe
命令來進行驗證。
為了部署整個函式, 你應該建立 映象拉取祕鑰
設定如下環境變數:
export DOCKER_USERNAME=<your_docker_username>
export DOCKER_PASSWORD=<your_docker_password>
export DOCKER_EMAIL=<your_docker_email>
複製程式碼
然後執行以下命令建立祕鑰:
$ kubectl create secret docker-registry dockerhub \
--docker-username=$DOCKER_USERNAME \
--docker-password=$DOCKER_PASSWORD \
--docker-email=$DOCKER_EMAIL
複製程式碼
然後把祕鑰新增到stack.yml
檔案中:
secrets:
- dockerhub
複製程式碼
已經新增了祕鑰的stack.yml
檔案例子如下:
provider:
name: faas
gateway: http://localhost:8080
functions:
protectedapi:
lang: Dockerfile
skip_build: true
image: username/private-alpine:latest
secrets:
- dockerhub
複製程式碼
你也可以使用faas-cli deploy
進行部署函式。如果你檢視 Kubernetes 視窗,可以發現已經可以拉取映象了。
把映象拉取祕鑰連結到一個 service 賬戶的名稱空間
你可以把自己的私有Docker 倉庫祕鑰連結到 Kubernetes 的 service 賬戶名稱空間中,而不用每次都編輯函式的.yml 檔案。這將會自動把imagePullSecret
屬性新增到該私有專案的任何部署清單中。
在openfaas-fn
名稱空間中建立映象拉取祕鑰:
$ kubectl create secret docker-registry myPrivateRepo \
--docker-username=$DOCKER_USERNAME \
--docker-password=$DOCKER_PASSWORD \
--docker-email=$DOCKER_EMAIL \
--namespace openfaas-fn
複製程式碼
開啟 service 賬戶清單然後編輯:
kubectl edit serviceaccount default -n openfaas-fn
在底部新增:
imagePullSecrets:
- name: myPrivateRepo
複製程式碼
儲存更改。OpenFaaS 現在可以不用在部署清單中指定祕鑰,就可以部署私有倉庫的函式映象。
3.1 開始動手實驗
在我們為期半天的研討中,學習如何用 OpenFaaS 和 Python 構建無伺服器函式。你可以按照自己的進度進行線上學習。
故障排除
如果你遇到了任何問題,請在提 issues 之前檢視故障排除指南並搜尋文件和之前的 issue。