如何 借助minikube 搭建 OpenFaaS ?

2018-01-02 18:24:00
Angela
转贴
702

本文将介绍如何借助 minikube 在 Kubernetes 1.8 上搭建 OpenFaaS(让 Serverless Function 变得更简单)。minikube 是一个 Kubernetes 分发版,借助它,你可以在笔记本电脑上运行 Kubernetes 集群,minikube 支持 Mac 和 Linux 操作系统,但是在 MacOS 上使用得更多一些。

-- Alex Ellis


本文导航

◈ 安装部署 Minikube                                               08%

◈ 在 minikube 上面部署 OpenFaaS                        18%

◈ 构建/迁移/运行                                                     43%

◈ 新建 Function                                                       53%

◈ 构建你的 Function                                                59%

◈ 部署及测试 Function                                            70%

◈ 迁移到 minikube 以外的环境                                 84%

◈ 继续学习                                                               86%

编译自 | https://medium.com/@alexellisuk/getting-started-with-openfaas-on-minikube-634502c7acdf 
       作者 | Alex Ellis
       译者 | mandeler

本文将介绍如何借助 minikube 在 Kubernetes 1.8 上搭建 OpenFaaS(让 Serverless Function 变得更简单)。minikube 是一个 Kubernetes 分发版,借助它,你可以在笔记本电脑上运行 Kubernetes 集群,minikube 支持 Mac 和 Linux 操作系统,但是在 MacOS 上使用得更多一些。


安装部署 Minikube

1、 安装 xhyve drive  或 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 存储库registry进行 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

最后,别忘了关注 OpenFaaS on Twitter 这里有最潮的新闻、最酷的技术和 Demo 展示。




via: https://medium.com/@alexellisuk/getting-started-with-openfaas-on-minikube-634502c7acdf

作者:Alex Ellis 译者:mandeler 校对:wxy


发表评论
评论通过审核后显示。
联系我们