本指南適用於在 Linux 主機上運行的 vanilla Kubernetes 1.8 或 1.9 集羣。他不是一個手冊,請參閱openfaas/guide上提供的一系列指南和博客文章。node
OpenFaaS 是 Kubernetes 原生的,並且用到了Deployments, Services 和 Secrets。更多的信息請查看"faas-netes"python
你能夠在筆記本電腦或者一個 VM 虛擬機(雲端或者本地)上評估 FaaS 並用它構建函數。git
更多關於Kubernetes設置的信息。github
咱們這裏有一個特別的 minikube 指南:docker
!!! 小提示api
若是你正在使用 Google Kubernetes Engine (GKE),name 須要用如下命令建立一個 RBAC 角色:ruby
$ kubectl create clusterrolebinding "cluster-admin-$(whoami)" \
--clusterrole=cluster-admin \
--user="$(gcloud config get-value core/account)"
複製代碼
若是你想使用 helm,請按照 2.0a 的說明進行操做, 不然請按照 2.0b 中說的使用 plain kubectl
bash
faas-netes
中有 Helm 圖表,能夠點擊如下連接進行查看。服務器
此步驟假設你能夠在主機上運行kubectl
。app
Clone 代碼
$ git clone https://github.com/openfaas/faas-netes
複製代碼
使用 NATS 流框架提供的異步函數部署棧。
部署整個棧
整個命令包含兩個部分,以便始終首先建立 OpenFaaS 的命名空間:
$ 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
中進行一些配置。
在部署 OpenFaaS 以後,你能夠開始經過一個教程或者博客文章來建立無服務器函數或者測試社區函數。
你也能夠經過視頻來觀看 OpenFaaS 在 Kubernetes 上的完整演示,包括自動伸縮以及如何使用 Prometheus 的 UI 界面。 視頻演示。
爲了簡單起見,默認使用 NodePorts 配置而不是使用更設置起來更復雜的 IngressController。
Service | TCP port |
---|---|
API Gateway / UI | 31112 |
Prometheus | 31119 |
!!! 注意 若是你是高級的 Kubernetes 用戶,則能夠移除 NodePort 並向棧中添加 IngressController。
雖然如今棧裏面並無內置的示例函數,可是咱們能夠經過 UI 或者 FaaS-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 界面被暴露在 31112 端口。
點擊"New Function"而後填寫如下的內容:
Field | Value |
---|---|
Service | nodeinfo |
Image | functions/nodeinfo:latest |
fProcess | node main.js |
Network | default |
你的函數將會在幾秒以後出現,而後點擊"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
複製代碼
若是你使用一個託管的私有 Docker registry(Docker Hub或者其餘),爲了檢查如何配置,請參考 Kubernetes文檔。
經過以下命令,你能夠從一個私有的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 窗口,能夠發現已經能夠拉取鏡像了。
你能夠把本身的私有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 如今能夠不用在部署清單中指定祕鑰,就能夠部署私有倉庫的函數鏡像。
在咱們爲期半天的研討中,學習如何用 OpenFaaS 和 Python 構建無服務器函數。你能夠按照本身的進度進行在線學習。
若是你遇到了任何問題,請在提 issues 以前查看故障排除指南並搜索文檔和以前的 issue。