OpenFaaS实战之一:部署
欢迎访问我的GitHub
https://github.com/zq2599/blog_demos
内容:所有原创文章分类汇总及配套源码,涉及Java、Docker、Kubernetes、DevOPS等;
OpenFaaS实战系列文章链接
- 部署
- 函数入门
- Java函数
- 模板操作(template)
- 大话watchdog
- of-watchdog(为性能而生)
- java11模板解析
- OpenFaaS实战之八:自制模板(maven+jdk8)
- OpenFaaS实战之九:终篇,自制模板(springboot+maven+jdk8)
关于OpenFaaS
OpenFaaS是来自Docker社区的一款Serverless框架,作用是为用户提供FaaS计算平台,官网:https://www.openfaas.com,下图来自官方:

关于《OpenFaaS实战》系列
《OpenFaaS实战》系列是欣宸的又一个实战型的原创系列,旨在与读者一起通过实战学习主流的Serverless知识,向着学以致用的目标前进,从最基础的部署开始,再由浅入深逐渐熟悉OpenFaaS的高级功能;
本篇概览
作为系列文章的开篇,本文的主要内容是OpenFaaS环境搭建和客户端工具的安装配置,分为以下几部分:
- 环境信息
- Kubernetes下部署OpenFaaS的方式
- 部署OpenFaaS
- 体验OpenFaaS的基本功能
- 安装和配置客户端
环境信息
- 整个实战系列用到的OpenFaaS都是部署在Kubernetes环境下,因此请您提前准备好Kubernetes环境;
- 运行在Kubernetes环境下的OpenFaaS架构如下图所示,可见Gateway和faas-netes是两个重要组件:

- 我这里由于是开发环境,因此并未部署Kubernetes集群,而是在单机上部署的Kubernetes;
- 下面给出整个系列涉及到的环境和软件的版本信息,供您参考:
- 操作系统:CentOS Linux release 7.8.2003
- Kubernetes:1.18.6
- OpenFaaS gateway:0.20.1
- OpenFaaS faas-netes:0.12.8
Kubernetes下部署OpenFaaS的方式
faas-netes是OpenFaaS的子项目,用于在Kubernetes环境实现OpenFaaS的功能,部署faas-netes常用的方式有三种:
- faas-netes的GitHub仓库中已经自带了部署时所需的所有文件,下载下来直接使用即可;
- 可以用helm3来部署,这种方法虽然要先将helm3安装好,略显麻烦,但是可以通过修改配置文件的方式实现更多细粒度的设置;
- 使用arkade工具,这个又要增加学习成本,还是以后再说吧...
- 为了快速完成部署,本文选择的是第一种方式
部署
接下来下载faas-netes的源码,使用其中的kubernetes资源配置文件进行部署;
- 安装git命令
yum install -y git
- 下载源码
git clone https://github.com/openfaas/faas-netes
- 进入下载的文件夹
cd faas-netes
- 创建namespace
kubectl apply -f namespaces.yml
- 提示信息如下,可见新建了两个namespace:openfaas和openfaas-fn
[root@node1 faas-netes]# kubectl apply -f namespaces.yml
namespace/openfaas created
namespace/openfaas-fn created
- 设置登录web控制台的账号和密码,我这里账号密码都用admin
kubectl -n openfaas create secret generic basic-auth \
--from-literal=basic-auth-user=admin \
--from-literal=basic-auth-password=admin
- 部署
kubectl apply -f ./yaml/
- 控制台输出如下,可见大量资源正在被创建:
[root@node1 faas-netes]# kubectl apply -f ./yaml/
configmap/alertmanager-config created
deployment.apps/alertmanager created
service/alertmanager created
deployment.apps/basic-auth-plugin created
service/basic-auth-plugin created
serviceaccount/openfaas-controller created
role.rbac.authorization.k8s.io/openfaas-controller created
role.rbac.authorization.k8s.io/openfaas-profiles created
rolebinding.rbac.authorization.k8s.io/openfaas-controller created
rolebinding.rbac.authorization.k8s.io/openfaas-profiles created
customresourcedefinition.apiextensions.k8s.io/profiles.openfaas.com created
deployment.apps/faas-idler created
deployment.apps/gateway created
service/gateway-external created
service/gateway created
deployment.apps/nats created
service/nats created
customresourcedefinition.apiextensions.k8s.io/profiles.openfaas.com configured
configmap/prometheus-config created
deployment.apps/prometheus created
serviceaccount/openfaas-prometheus created
clusterrole.rbac.authorization.k8s.io/openfaas-prometheus created
rolebinding.rbac.authorization.k8s.io/openfaas-prometheus created
rolebinding.rbac.authorization.k8s.io/openfaas-prometheus created
service/prometheus created
deployment.apps/queue-worker created
- 启动期间各个pod并不稳定,遇到类似以下这种CrashLoopBackOff和Error都出现的情况,建议稍等几分钟,经历几次自动重启后会恢复正常:
[root@node1 faas-netes]# kubectl get pods -n openfaas
NAME READY STATUS RESTARTS AGE
alertmanager-dc4b8b67b-m8pkx 1/1 Running 0 66s
basic-auth-plugin-7bb7698cb4-d6zkl 1/1 Running 0 66s
faas-idler-df8c6d98d-p726g 0/1 CrashLoopBackOff 1 66s
gateway-775db4dbd4-dcvx9 1/2 Error 0 66s
nats-58d4d5db8d-km9jf 1/1 Running 0 66s
prometheus-8689d7dc98-dmjvs 1/1 Running 0 58s
queue-worker-5b4db6776f-hzl5q 1/1 Running 0 59s
- 等待镜像下载、pod创建、启动等操作完成后,实例情况如下:
[root@node1 faas-netes]# kubectl get pods -n openfaas
NAME READY STATUS RESTARTS AGE
alertmanager-dc4b8b67b-kl4wq 1/1 Running 0 10m
basic-auth-plugin-7bb7698cb4-ln6fx 1/1 Running 0 10m
faas-idler-df8c6d98d-xn68z 1/1 Running 2 10m
gateway-775db4dbd4-7l9h4 2/2 Running 1 10m
nats-58d4d5db8d-z7zzt 1/1 Running 0 10m
prometheus-8689d7dc98-9lk8t 1/1 Running 0 10m
queue-worker-5b4db6776f-nl999 1/1 Running 0 10m
- 查看service,如下可见,gateway服务映射到了31222端口:
[root@node1 faas-netes]# kubectl get service -n openfaas
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
alertmanager ClusterIP 10.233.27.131 <none> 9093/TCP 13m
basic-auth-plugin ClusterIP 10.233.21.234 <none> 8080/TCP 13m
gateway ClusterIP 10.233.34.151 <none> 8080/TCP 13m
gateway-external NodePort 10.233.62.82 <none> 8080:31112/TCP 13m
nats ClusterIP 10.233.28.109 <none> 4222/TCP 13m
prometheus ClusterIP 10.233.60.220 <none> 9090/TCP 13m
至此,部署完成,接下来验证环境是否可用
验证
当前K8S宿主机IP地址是192.168.133.164,因此浏览器访问192.168.133.164:31112,如下图,会弹出账号密码输入窗口,账号admin,密码也是admin:

登录成功:

点击DEPLOY NEW FUNCTION,弹出部署函数的窗口,如下图,可见官方提供了一些现成的供我们使用,咱们挑一个试试,选择NodeInfo吧,其作用是提供当前服务器的基本信息,按照下图红框的数字顺序点击:

此时左侧菜单会立即出现nodeinfo的链接,这个函数已经就绪了,在线验证如下图所示,异常简单,动动鼠标就能完成调用(红框2的内容当前用不上,后面的操作会用到):

页面上的调用成功了,接下来试试远程访问,这才是生产环境的用法,上图红框2中的地址就是该函数的endpoint,浏览器里访问这个地址,如下图,可以成功调用:

部署和配置命令行工具
命令行工具也是非常重要的,尽管本章不用,也要装好为后面作准备;
- 该工具可以装在其他电脑上,只要网络访问K8S环境没问题就行;
- 一行命令即可完成部署:
curl -sL https://cli.openfaas.com | sh
- 看到如下输出表示命令行部署成功:
Finding latest version from GitHub
0.12.18
Downloading package https://github.com/openfaas/faas-cli/releases/download/0.12.18/faas-cli as /tmp/faas-cli
Download complete.
Running with sufficient permissions to attempt to move faas-cli to /usr/local/bin
New version of faas-cli installed to /usr/local/bin
Creating alias 'faas' for 'faas-cli'.
___ _____ ____
/ _ \ _ __ ___ _ __ | ___|_ _ __ _/ ___|
| | | | '_ \ / _ \ '_ \| |_ / _` |/ _` \___ \
| |_| | |_) | __/ | | | _| (_| | (_| |___) |
\___/| .__/ \___|_| |_|_| \__,_|\__,_|____/
|_|
CLI:
commit: 9e3c15ef3ad7bd7cceb0cd577144aebb50c6681c
version: 0.12.18
- 执行如下命令完成配置,将OPENFAAS_URL写入环境变量中,192.168.133.187是K8S宿主机IP:
echo export OPENFAAS_URL=192.168.133.187:31112 >> ~/.bashrc
- 再执行source ~/.bashrc让前面的配置立即生效;
- 执行以下命令,用账号密码登录:
faas-cli login -u admin -p admin
- 登录成功,可以执行客户端命令了,list命令的结果如下:
[root@node1 ~]# faas-cli list
Function Invocations Replicas
nodeinfo 2 1
清理
如果您不想用OpenFaaS,需要彻底清理OpenFaaS,请执行如下操作:
- 进入目录faas-netes
- 账号密码
kubectl delete secret basic-auth -n openfaas
- 资源文件
kubectl delete -f ./yaml
- 命名空间openfaas-fn
kubectl delete namespace openfaas-fn
- 命名空间openfaas
kubectl delete namespace openfaas
至此,Kubernetes环境下OpenFaaS的部署就完成了,接下来的章节,咱们会重点实战OpenFaaS的函数能力;
你不孤单,欣宸原创一路相伴
欢迎关注公众号:程序员欣宸
微信搜索「程序员欣宸」,我是欣宸,期待与您一同畅游Java世界...
https://github.com/zq2599/blog_demos
OpenFaaS实战之一:部署的更多相关文章
- OpenFaaS实战之二:函数入门
欢迎访问我的GitHub https://github.com/zq2599/blog_demos 内容:所有原创文章分类汇总及配套源码,涉及Java.Docker.Kubernetes.DevOPS ...
- OpenFaaS实战之三:Java函数
欢迎访问我的GitHub https://github.com/zq2599/blog_demos 内容:所有原创文章分类汇总及配套源码,涉及Java.Docker.Kubernetes.DevOPS ...
- OpenFaaS实战之四:模板操作(template)
欢迎访问我的GitHub https://github.com/zq2599/blog_demos 内容:所有原创文章分类汇总及配套源码,涉及Java.Docker.Kubernetes.DevOPS ...
- OpenFaaS实战之五:大话watchdog
欢迎访问我的GitHub https://github.com/zq2599/blog_demos 内容:所有原创文章分类汇总及配套源码,涉及Java.Docker.Kubernetes.DevOPS ...
- OpenFaaS实战之六:of-watchdog(为性能而生)
欢迎访问我的GitHub https://github.com/zq2599/blog_demos 内容:所有原创文章分类汇总及配套源码,涉及Java.Docker.Kubernetes.DevOPS ...
- OpenFaaS实战之七:java11模板解析
欢迎访问我的GitHub https://github.com/zq2599/blog_demos 内容:所有原创文章分类汇总及配套源码,涉及Java.Docker.Kubernetes.DevOPS ...
- OpenFaaS实战之八:自制模板(maven+jdk8)
欢迎访问我的GitHub https://github.com/zq2599/blog_demos 内容:所有原创文章分类汇总及配套源码,涉及Java.Docker.Kubernetes.DevOPS ...
- OpenFaaS实战之九:终篇,自制模板(springboot+maven+jdk8)
欢迎访问我的GitHub https://github.com/zq2599/blog_demos 内容:所有原创文章分类汇总及配套源码,涉及Java.Docker.Kubernetes.DevOPS ...
- 企业实战之部署Solarwinds Network八部众
企业实战之部署Solarwinds Network 网管系统八部众 Orion Network Performance Monitor是全面的带宽性能监控和故障管理软件,能监控并收集来自路由器.交换机 ...
随机推荐
- Redis系列(五):消息队列
消息队列已经成为现在互联网服务端的标配组件,现在比较常用的消息中间件有RabbitMQ.Kafka.RocketMQ.ActiveMQ.说出来你可能不信,Redis作为一个缓存中间件,居然也提供了消息 ...
- Java如何使用while和for嵌套循环控制输出数据,使数据奇偶行不同
/* 题目1 使用Eclipse编写控制台应用程, 使用while循环在控制台打印10行10列的如下图形 □ □ □ □ □ □ □ □ □ □ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ □ □ □ □ ...
- 实验2、Flask模板、表单、视图和重定向示例
实验内容 1. 实验内容 表单功能与页面跳转功 能是Web应用程序的基础功能,学习并使用他们能够更好的完善应用程序的功能.Flask使用了名为Jinja2的模板引擎,该引擎根据用户的交互级别显示应用程 ...
- 【NX二次开发】Block UI 选择表达式
属性说明 属性 类型 描述 常规 BlockID String 控件ID Enable Logical 是否可操作 Group ...
- 【NX二次开发】大开眼界,DLL还可以这么调!
NX二次开发应用程序有交互式.批处理和远程3中模式.交互模式的应用程序(.dll)在NX界面环境下运行.dll以动态链接库的方式被加载到NX的进程空间中.dll可以通过下列几种方式执行. 1.直接激活 ...
- spring + spring mvc + tomcat 面试题(史上最全)
文章很长,而且持续更新,建议收藏起来,慢慢读! 高并发 发烧友社群:疯狂创客圈(总入口) 奉上以下珍贵的学习资源: 疯狂创客圈 经典图书 : 极致经典 + 社群大片好评 < Java 高并发 三 ...
- 多图:一文带你入门掌握JVM所有知识点
本JVM系列属于本人学习过程当中总结的一些知识点,目的是想让读者更快地掌握JVM相关的知识要点,难免会有所侧重,若想要更加系统更加详细的学习JVM知识,还是需要去阅读专业的书籍和文档. 本文主题内容: ...
- 『言善信』Fiddler工具 — 16、使用Fiddler抓取移动端App请求
目录 1.抓取Android移动端App请求 2.抓取IOS移动端App请求 3.总结: 1.抓取Android移动端App请求 前提: 因为Fiddler抓包的原理就是通过代理,所以确保被测终端要和 ...
- noip2010 总结
机器翻译 题目背景 小晨的电脑上安装了一个机器翻译软件,他经常用这个软件来翻译英语文章. 题目描述 这个翻译软件的原理很简单,它只是从头到尾,依次将每个英文单词用对应的中文含义来替换.对于每个英文单词 ...
- uniapp 打包IOS 更新AppStore版本
Hello 你好,我是大粽子. 最近随着新版本UI的发布APP也随之更新,随之而来的也就是IOS程序提审步骤,这次我详细的截图了每一个步骤,如果你正好也需要那么跟着我的节奏一步步来肯定是没问题的. 提 ...