K8s & K3s 集群中 OpenFaaS 部署手册

OpenFaaS 简介

OpenFaaS是一个构建无服务器功能的框架,它拥有对指标的第一个类支持。任何流程都可以打包为一个功能,使你能够使用一系列web事件,而无需重复的样板化编码,让无服务器函数变得简单;

1 技术亮点

image
  • ·通过UI入口和单击安装轻松使用

  • ·为Linux或Windows的任何语言编写函数,以docker/oci图像格式编写包

  • ·便携式——在现有的硬件或公共/私有云上运行——Kubernetes或Docker集群

  • ·用于模板和定义函数的YAML格式的CLI

  • ·Auto-scales随着需求的增加

2 OpenFaaS概述

image
  • 监督功能
    1 你可以通过添加函数看门狗 (一个小型的Golang HTTP服务)把任何一个Docker镜像变成无服务器函数。
    2 函数看门狗是允许HTTP请求通过STDIN转发到目标进程的入口点。响应会从你应用写入STDOUT返回给调用者。

  • 网关
    1 API网关为您的函数提供了一个外部路由,并通过Prometheus收集云的原生数据。
    2 您的API网关将根据需求来扩展功能,通过更改Docker Swarm或Kubernetes API中的服务副本数。
    3 UI允许您在浏览器中调用函数,并根据需要创建新的函数。

  • CLI
    Docker容器中的任何容器或流程都可以是FaaS中的一个无服务器功能。通过使用FaaS CLI,您可以部署您的函数,或者从诸如Node.js或Python这样的模板中快速创建新的函数。

3 函数 Demo

你可以通过 使用FaaS-CLI和其内置的模板创建新函数,也可以在Docker中使用Windows或Linux的二进制文件。

  • Python示例(handler.py)
import requests


def handle(req):
    r =  requests.get(req, timeout = 1)
    print(req +" => " + str(r.status_code)
)
  • Node.js示例(handler.js)
"use strict"


module.exports = (callback, context) => {
    callback(null, {"message": "You said: " + context})
}

OpenFaaS 部署

OpenFaaS 是一个使用 Docker 构建 Serverless 功能的框架,它拥有对指标的一级支持。任何流程都可以打包为一个函数,使你能够使用一系列 web 事件,而无需重复的样板化编码。


image

1 获取 OpenFaaS Charts 资源

下载 Kubernetes 的 OpenFaaS 驱动程序 faas-netes:

git clone https://github.com/openfaas/faas-netes && cd faas-netes
or 国内码云镜像:
git clone https://gitee.com/mirrors/faas-netes.git && cd faas-netes

2 创建 OpenFaaS 依赖的 namespace

kubectl apply -f https://raw.githubusercontent.com/openfaas/faas-netes/master/namespaces.yml

3 增加 OpenFaaS helm chart

helm repo add openfaas https://openfaas.github.io/faas-netes/

4 OpenFaaS 部署拉起

helm repo update \
 && helm upgrade openfaas --install openfaas/openfaas \
    --namespace openfaas  \
    --set functionNamespace=openfaas-fn \
    --set generateBasicAuth=true

5 获取 password (账号: admin)

echo $(kubectl -n openfaas get secret basic-auth -o jsonpath="{.data.basic-auth-password}" | base64 --decode)

// password
LnMqQfE5PVv

6 控制台登录

默认的提供 31112 端口,我们通命令 $(minikube ip) 获取内部 ip,通过 ip:31112 访问,输入账号和上面提供的密码:


image

Hello Function

下面开始写我们的第一个 serverless function。

1 安装 faas-cli

# 安装 faas-cli 来创建和发布一个 Function
curl -sL cli.openfaas.com | sudo sh
# mac 可以通过以下命令安装
brew install faas-cli

2 NodeJS 函数

cd /home/work/demo
faas-cli new hellofaas --lang node

整个项目结构如下:

.
├── handler.js
└── package.json

拓展阅读

无服务器(Serverless)架构的时候,到底是指什么呢?其实,无服务器架构并不是说不使用服务器了。恰恰相反,客户端-服务端模式仍然在其中发挥着重要的作用。
无服务器架构实际上指的是能够让开发者在不需要关心服务器上架、为操作系统打补丁、创建容器镜像这些工作的情况下,就能够完成编码、部署和创建应用这一整套流程的架构。

1 无服务器架构的三个重要意义

  • 一些缺乏开发经验的人员现在要参与到开发工作中来了。无服务器架构能够让他们尽量只学习必要的工作内容,把更多的时间放在更具创造性的开发工作中。
  • 开发者不再需要重复造轮子。运行和维护服务器、为操作系统打补丁、创建容器等这一系列工作,都可以由更专业的无服务器架构提供商来完成。
  • 最现实的一点是,如果不使用无服务器架构,那么在服务器管理方面,总需要有一个作最终决策的人。当服务器发生崩溃时,或是需要在服务器上执行某些操作时,总是需要这样一个统领全局的人来作出决策。因此最佳的方案是使用无服务器架构。

2 无服务器架构应用场景

无服务器架构是个好东西。但事实上,无服务器架构并不是万能的,在使用之前还需要考虑以下这些因素:

  • 成本
  • 使用范围
  • 时间
  • 控制方式

你可能感兴趣的:(K8s & K3s 集群中 OpenFaaS 部署手册)