美文网首页
K8s & K3s 集群中 OpenFaaS 部署手册

K8s & K3s 集群中 OpenFaaS 部署手册

作者: 流雨声 | 来源:发表于2021-05-13 10:13 被阅读0次

    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 部署手册

          本文链接:https://www.haomeiwen.com/subject/tffhlltx.html