本指南适用于在 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。