OpenFaaS的Kubernetes 部署指南

本指南适用于在 Linux 主机上运行的 vanilla Kubernetes 1.8 或 1.9 集群。他不是一个手册,请参阅openfaas/guide上提供的一系列指南和博客文章。

Kubernetes

OpenFaaS 是 Kubernetes 原生的,而且用到了Deployments, ServicesSecrets。更多的信息请查看"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。

ServiceTCP port
API Gateway / UI31112
Prometheus31119

!!! 注意 如果你是高级的 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 函数

    你的第一个无服务器 Python 函数

使用 UI

UI 界面被暴露在 31112 端口。

点击"New Function"然后填写以下的内容:

FieldValue
Servicenodeinfo
Imagefunctions/nodeinfo:latest
fProcessnode main.js
Networkdefault
  • 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。

转载于:https://juejin.im/post/5b585050f265da0f9c67a9cc

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值