Raspberry Pi 与 OpenFaaS 构建 Serverless Kubernetes 集群

本指南介绍了如何使用 Raspberry Pi 和 OpenFaaS 构建自己的 Serverless Kubernetes 集群。这篇文章是构建廉价和可扩展的 Serverless 树莓派(Raspberry Pi)的系列文章中的第三篇。通过增加更多的 $35 的 Raspberry Pi 来进行扩展。

OpenFaaS 是 Docker 和 Kubernetes 的 Serverless 框架,易于使用、部署和由不断增长的黑客社区小心构建。

迄今为止的系列

如果您是这个领域的新手,请阅读第一篇文章的介绍,以了解无服务器是什么以及它可以为您做什么。

第一部分:Swarm

在本系列的第 1 部分中,我们介绍了 Serverless 以及它的用途。 然后,我们使用 Docker Swarm 构建了一个集群。

Raspberry Pi 与 Docker 构建 Serverless 集群

第二部分:监控

第 2 部分,着重于监视群集的磁盘空间,CPU 使用情况和网络 I/O。

Monitor your Raspberry Pi cluster with Prometheus

第三部分:Kubernetes

在这一部分中,我们用 Raspberry Pi 构建一个 Kubernetes 集群,并部署 OpenFaaS 来测试它。 你可以访问 kubectl - 所以一旦你完成了教程,你可以继续学习。

构建你的集群

它的意思是这样的

本指南将向您展示:如何将 Kubernetes 直接安装在 Raspbian 之上 - 这就是它的本意。 我们不需要刷新任何自定义镜像或花时间学习如何配置新的操作系统。

按照我的 Gist 上的分步说明:

Install your Kubernetes cluster (Gist)

部署 FaaS

现在部署 OpenFaaS。 OpenFaaS 代表“函数即服务”(Functions as a Service): - 一种热门新兴技术,可让您专注于编写小型可重用函数。 - 把几行代码放在一起,说出你需要什么样的依赖关系 - 然后用我们的 CLI 把它构建到一个 Docker 镜像中,并将它部署到你的集群中 - OpenFaaS 将完成剩下的工作。

然后,您可以通过 Prometheus 获得完整的指标,并且该数据由集群用于在需求增加时自动扩展功能。

在 Vimeo HD 上观看我在 Cloud Native London 会议上的 OpenFaas FaaS and Furious - 0 to Serverless in 60 seconds, anywhere

现在,让我们克隆 GitHub 代码并使用 kubectl 进行部署。如果您想将 OpenFaaS 部署到云或笔记本电脑,仓库中也可以使用 Helm 图表。

$ git clone https://github.com/openfaas/faas-netes && cd faas-netes
$ kubectl apply -f faas.armhf.yml,rbac.yml,monitoring.armhf.yml

注意:OpenFaaS 的 Kubernetes 控制器称为 faas-netes。

就这样。

现在获取集群中主节点的 IP 地址(即 192.168.0.100),并在 Web 浏览器中打开 FaaS UI:http://192.168.0.100:31112/

我们在 Kubernetes 中使用了 NodePort 概念,但是如果你想使用像 80 这样的特权端口,你可以添加一个 IngressController 和一个软件负载平衡器,比如 Nginx 或者 Traefik。

尝试 OpenFaaS CLI

您可以输入以下命令获取 OpenFaaS 的 CLI:

$ curl -SL https://cli.openfaas.com/ | sudo sh

armv7l
Getting package https://github.com/alexellis/faas-cli/releases/download/0.4.14/faas-cli-armhf
Attemping to move faas-cli to /usr/local/bin
New version of faas-cli installed to /usr/local/bin

我们为 Windows,Linux,Linux ARM 和 MacOS 构建 CLI

您可以随时通过 CLI 获得帮助,或者通过以下方式查看版本:

$ faas-cli --help
$ faas-cli <command> --help
$ faas-cli version

修补用于 ARM 的函数模板

克隆 CLI 示例,并修补(patch)ARM 的模板:

$ git clone https://github.com/alexellis/faas-cli && \
  cd faas-cli

$ cp template/node-armhf/Dockerfile template/node/ && \
  cp template/python-armhf/Dockerfile template/python/ && \
  cp template/go-armhf/Dockerfile template/go/

现在,你可以继续在 Python 中创建你的第一个函数:

$ faas-cli new --lang python --name http-ping

Folder: http-ping created.
Function created in folder: http-ping
Stack file written: http-ping.yml

这将创建一个空的 hello,world 风格的函数。 让我们来看看。

您会看到 CLI 创建了三个文件:

http-ping.yml
http-ping/handler.py
http-ping/requirements.txt

编辑 http-ping.yml,用你的 Docker Hub 帐户替换 image:http-ping,如: image:alexellis2/http-ping

由于我们在 Kubernetes 上,我们也需要从网关编辑网关端口:http://localhost:8080 到网关:http://localhost:31112

现在我们来构建,部署和调用这个函数:

$ faas-cli build -f http-ping.yml

第一次运行时,我们将下载一些 Docker 镜像,但是对于每个后续的构建,它都会使用一个缓存。

如果您的 Docker 引擎正在以实验模式运行,您还可以使用 faas-cli build --squash 来 “挤压”(squash) 图层以获得较小的最终图像。

$ faas-cli push -f http-ping.yml

我们提交到 Docker Hub,但是如果你有一个本地注册表,可能会更快。

$ faas-cli deploy -f http-ping.yml
Deploying: http-ping.
Deployed.
202 Accepted
URL: http://localhost:31112/function/http-ping

该函数将由 Kubernetes 下载并部署在您的一个节点(Raspberry Pi)上。

现在可以通过 UI 或 CLI 调用该函数。

  • 触发函数:

在这里,我们可以通过另一个 CLI 命令来输入任何输出:

$ echo -n "Hi Kubernetes!" | faas-cli invoke http-ping -f http-ping.yml
Hi Kubernetes!

或者使用自由风格的输入:

$ faas-cli invoke http-ping -f http-ping.yml
Reading from STDIN - hit (Control + D) to stop.
I'm writing the tutorial now

I'm writing the tutorial now

列出函数和调用计数:

$ faas-cli list -f http-ping.yml
Function                        Invocations     Replicas
http-ping                       2               1

我们看到副本计数设置为 1,这意味着只有一个容器映射到这个函数(如果我们开始产生高负载,将由 OpenFaaS 添加更多的容器)。

调用计数现在是 2,它是从普罗米修斯(Prometheus)度量值实时更新的。

下一步:更深入

以下是您可以支持我们工作的一些方法:

star 我们的 GitHub 来支持我们做的工作。

原文链接:https://blog.alexellis.io/serverless-kubernetes-on-raspberry-pi/

尚未评分
您的评分将帮助我们做出更好的玩法

观光\评论区

Copyright © 2017 玩点什么. All Rights Reserved.