TranslateProject/sources/tech/20171118 Getting started with OpenFaaS on minikube.md
2017-11-22 22:55:42 +08:00

9.0 KiB
Raw Blame History

#借助 minikube 上手 OpenFaaS

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

本文基于我们最新的部署手册 Official Kubernetes Deployment guide

** 此处有Canvas,请手动处理 **

安装部署 Minikube

  1. 安装 xhyve driver 或 VirtualBox ,然后在上面安装 Liux 虚拟机以部署 minikube 。根据我的经验VirtualBox更稳定一些

  2. 参照官方文档 安装 minikube

  3. 安装 faas-cli :

使用 brew 安装

brew install faas-cli

使用官方安装脚本

curl -sL cli.openfaas.com | sudo sh

  1. 用 brew 安装 helm

 brew install kubernetes-helm

  1. 运行 minikube :

minikube start

Docker Captain 的小贴士: Mac 和 Windows 版本的 Docker 已经集成了对 Kubernetes 的支持。现在我们使用 Kubernetes 的时候,已经不需要再安装额外的软件了。

在 minikube 上面部署 OpenFaaS

  1. 给 Helms 服务器组件新建账号 tiller:

    kubectl -n kube-system create sa tiller && kubectl create clusterrolebinding tiller
    --verbose_rbose_usterrole cluster-admin
    --verbose_rviceaccount=kube-system:tiller

  2. 安装 Helm 的服务端组件 tiller:

  helm init --skip-refresh --upgrade --service-account tiller

  1. Git Clone faas-netes (Kubernetes 上面的 OpenFaaS 驱动程序): 

git clone https://github.com/openfaas/faas-netes && cd faas-netes

  1. Minikube 没有配置 RBAC, 这里我们需要把 RBAC 关闭:

  helm upgrade --install --debug --reset-values --set async=false --set rbac=false openfaas openfaas/

译者注RBACRole-Based access control基于角色的访问权限控制在计算机权限管理中较为常用详情请参考以下链接 https://en.wikipedia.org/wiki/Role-based_access_control

现在,你可以看到 OpenFaaS pods 已经在你的 minikube 群集上运行起来了。输入 kubectl get pods 以查看 OpenFaaS pods:

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 gateway 进程包含了一个 用于测试的最小化 UI ,同时开放了用于功能管理的 RESTful API 。 faas-netesd 守护进程是一种 Kubernetes 控制器,用来连接 Kubernetes API 服务实现对 Kubernetes 函数、部署和密码的管理功能。 Prometheus 和 AlertManager 进程协同工作,实现 OpenFaaS 函数的弹性缩放,以满足业务需求。通过 Prometheus metrics 我们可以查看系统的整体运行状态还可以用来开发功能强悍的仪表盘Dashboard

Prometheus 仪表盘示例:

部署/迁移/运行

和很多其他的 FaaS 项目不同OpenFaaS 的创建和函数版本控制使用的是 Docker 镜像格式,这意味着咱可以在生产环境中使用 OpenFaaS 实现以下目标:

  • 漏洞扫描vulnerability scanning译者注此处我觉得应该理解为更快地实现漏洞补丁

  • CI/CD Continuous integration and continuous deployment 持续集成/持续开发

  • 滚动更新

你也可以在现有的生产环境群集中利用空闲资源部署 OpenFaaS。每个核心服务组件内存占用大概在 10-30MB 。

OpenFaaS 一个关键的优势在于,它可以使用容器编排平台的 API ,这样可以和 Kubernetes 以及 Docker Swarm 进行本地集成。同时由于使用Docker registry 进行函数的版本控制,咱可以按需扩展函数。同时不会对按需开发函数的框架造成额外的延时。

新建 function

faas-cli new --lang python hello

以上命令创建文件 hello.yml 以及文件夹 handler,文件夹有两个文件 handler.py 、requirements.txt ,包含了你可能需要用到的任何 pip 模块。你可以随时编辑这些文件和文件夹,不需要担心如何维护 Dockerfile--我们为你维护,并且使用以下最佳实践:

  • 分级创建版本multi-stage builds

  • 非 root 用户non-root users

  • 以 Docker Alpine Linux 版本为基础进行镜像构建 (可变更)

build function

先在本地创建函数,然后 push 到 Docker registry 。 使用 Docker Hub ,打开文件 hello.yml 然后输入你的账号名:

provider:
  name: faas
  gateway: http://localhost:8080
functions:
  hello:
    lang: python
    handler: ./hello
    image: alexellis2/hello

现在,调用一个 build 版本。你的系统上需要安装 Docker 。

faas-cli build -f hello.yml

把封装好函数的 Docker 镜像版本 push 到 Docker Hub。如果还没有登录 Docker hub ,继续前需要先输入命令 docker login 。

faas-cli push -f hello.yml

当系统中有多个函数的时候,可以使用 --parallel=N 来调用多核并行处理 build 或 push 任务。命令也支持这些选项: --no-cache  --squash

部署及测试 function

现在,可以部署、列出、调用函数了。每次调用函数时,可以通过 Prometheus 收集 metric 值。

$ 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

上面给到的是部署时调用函数的标准方法,你也可以使用下面的命令:

$ echo test | faas-cli invoke hello --gateway $gw

现在可以通过以下命令列出部署好的函数,你将看到调用计数器数值增加。

$ faas-cli list --gateway $gw
Function                       Invocations     Replicas
hello                          1               1

提示:这条命令也可以 also accepts a _--verbose_ flag for more information.

由于我们是在远端群集( Linux 虚拟机)上面运行 OpenFaaS命令里面加上一条 --gateway 用来来覆盖环境变量. 这个选项同样适用于云平台上的远程主机。除了加上这条选项以外,还可以通过编辑 .yml 文件里面的 gateway 值来达到同样的效果。

迁移到 minikube 以外的环境

一旦你在熟悉了在 minikube 上运行 OpenFaaS ,就可以在任意 Linux 主机上搭建 Kubernetes 群集来部署 OpenFaaS 了。下图是由来自 WeaveWorks 的 Stefan Prodan 做的 OpenFaaS Demo ,这个 Demo 部署在 Google GKE 平台上的 Kubernetes 上面。图片上展示的是 OpenFaaS 内置的自动扩容的功能:

译者注下面图片来自twitter可能访问不了

继续学习

我们的 Github上面有很多手册和博文可以带你轻松“上车”把我们的页面保存成书签吧

openfaas/faas faas - OpenFaaS - Serverless Functions Made Simple for Docker & Kubernetesgithub.com

2017 哥本哈根 Dockercon Moby 峰会上,我做了关于 Serverless 和 OpenFaaS 的概述演讲,这里我把视频放上来,视频不长,大概 15 分钟左右(译者注视频在youtube,需要科学访问)。 Youtube视频

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


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

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

本文由 LCTT 原创编译,Linux中国 荣誉推出