欢迎访问我的GitHub

https://github.com/zq2599/blog_demos

内容:所有原创文章分类汇总及配套源码,涉及Java、Docker、Kubernetes、DevOPS等;

OpenFaaS实战系列文章链接

  1. 部署
  2. 函数入门
  3. Java函数
  4. 模板操作(template)
  5. 大话watchdog
  6. of-watchdog(为性能而生)
  7. java11模板解析
  8. OpenFaaS实战之八:自制模板(maven+jdk8)
  9. OpenFaaS实战之九:终篇,自制模板(springboot+maven+jdk8)

关于OpenFaaS

OpenFaaS是来自Docker社区的一款Serverless框架,作用是为用户提供FaaS计算平台,官网:https://www.openfaas.com,下图来自官方:

关于《OpenFaaS实战》系列

《OpenFaaS实战》系列是欣宸的又一个实战型的原创系列,旨在与读者一起通过实战学习主流的Serverless知识,向着学以致用的目标前进,从最基础的部署开始,再由浅入深逐渐熟悉OpenFaaS的高级功能;

本篇概览

作为系列文章的开篇,本文的主要内容是OpenFaaS环境搭建和客户端工具的安装配置,分为以下几部分:

  1. 环境信息
  2. Kubernetes下部署OpenFaaS的方式
  3. 部署OpenFaaS
  4. 体验OpenFaaS的基本功能
  5. 安装和配置客户端

环境信息

  • 整个实战系列用到的OpenFaaS都是部署在Kubernetes环境下,因此请您提前准备好Kubernetes环境;
  • 运行在Kubernetes环境下的OpenFaaS架构如下图所示,可见Gateway和faas-netes是两个重要组件:

  • 我这里由于是开发环境,因此并未部署Kubernetes集群,而是在单机上部署的Kubernetes;
  • 下面给出整个系列涉及到的环境和软件的版本信息,供您参考:
  1. 操作系统:CentOS Linux release 7.8.2003
  2. Kubernetes:1.18.6
  3. OpenFaaS gateway:0.20.1
  4. OpenFaaS faas-netes:0.12.8

Kubernetes下部署OpenFaaS的方式

faas-netes是OpenFaaS的子项目,用于在Kubernetes环境实现OpenFaaS的功能,部署faas-netes常用的方式有三种:

  1. faas-netes的GitHub仓库中已经自带了部署时所需的所有文件,下载下来直接使用即可;
  2. 可以用helm3来部署,这种方法虽然要先将helm3安装好,略显麻烦,但是可以通过修改配置文件的方式实现更多细粒度的设置;
  3. 使用arkade工具,这个又要增加学习成本,还是以后再说吧...
  • 为了快速完成部署,本文选择的是第一种方式

部署

接下来下载faas-netes的源码,使用其中的kubernetes资源配置文件进行部署;

  1. 安装git命令
yum install -y git
  1. 下载源码
git clone https://github.com/openfaas/faas-netes
  1. 进入下载的文件夹
cd faas-netes
  1. 创建namespace
kubectl apply -f namespaces.yml
  1. 提示信息如下,可见新建了两个namespace:openfaas和openfaas-fn
[root@node1 faas-netes]# kubectl apply -f namespaces.yml
namespace/openfaas created
namespace/openfaas-fn created
  1. 设置登录web控制台的账号和密码,我这里账号密码都用admin
kubectl -n openfaas create secret generic basic-auth \
--from-literal=basic-auth-user=admin \
--from-literal=basic-auth-password=admin
  1. 部署
kubectl apply -f ./yaml/
  1. 控制台输出如下,可见大量资源正在被创建:
[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
  1. 启动期间各个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
  1. 等待镜像下载、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
  1. 查看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

至此,部署完成,接下来验证环境是否可用

验证

  1. 当前K8S宿主机IP地址是192.168.133.164,因此浏览器访问192.168.133.164:31112,如下图,会弹出账号密码输入窗口,账号admin,密码也是admin:

  2. 登录成功:

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

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

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

部署和配置命令行工具

命令行工具也是非常重要的,尽管本章不用,也要装好为后面作准备;

  1. 该工具可以装在其他电脑上,只要网络访问K8S环境没问题就行;
  2. 一行命令即可完成部署:
curl -sL https://cli.openfaas.com | sh
  1. 看到如下输出表示命令行部署成功:
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
  1. 执行如下命令完成配置,将OPENFAAS_URL写入环境变量中,192.168.133.187是K8S宿主机IP:
echo export OPENFAAS_URL=192.168.133.187:31112 >> ~/.bashrc
  1. 再执行source ~/.bashrc让前面的配置立即生效;
  2. 执行以下命令,用账号密码登录:
faas-cli login -u admin -p admin
  1. 登录成功,可以执行客户端命令了,list命令的结果如下:
[root@node1 ~]# faas-cli list
Function Invocations Replicas
nodeinfo 2 1

清理

如果您不想用OpenFaaS,需要彻底清理OpenFaaS,请执行如下操作:

  1. 进入目录faas-netes
  2. 账号密码
kubectl delete secret basic-auth -n openfaas
  1. 资源文件
kubectl delete -f ./yaml
  1. 命名空间openfaas-fn
kubectl delete namespace openfaas-fn
  1. 命名空间openfaas
kubectl delete namespace openfaas

至此,Kubernetes环境下OpenFaaS的部署就完成了,接下来的章节,咱们会重点实战OpenFaaS的函数能力;

你不孤单,欣宸原创一路相伴

  1. Java系列
  2. Spring系列
  3. Docker系列
  4. kubernetes系列
  5. 数据库+中间件系列
  6. DevOps系列

欢迎关注公众号:程序员欣宸

微信搜索「程序员欣宸」,我是欣宸,期待与您一同畅游Java世界...

https://github.com/zq2599/blog_demos

OpenFaaS实战之一:部署的更多相关文章

  1. OpenFaaS实战之二:函数入门

    欢迎访问我的GitHub https://github.com/zq2599/blog_demos 内容:所有原创文章分类汇总及配套源码,涉及Java.Docker.Kubernetes.DevOPS ...

  2. OpenFaaS实战之三:Java函数

    欢迎访问我的GitHub https://github.com/zq2599/blog_demos 内容:所有原创文章分类汇总及配套源码,涉及Java.Docker.Kubernetes.DevOPS ...

  3. OpenFaaS实战之四:模板操作(template)

    欢迎访问我的GitHub https://github.com/zq2599/blog_demos 内容:所有原创文章分类汇总及配套源码,涉及Java.Docker.Kubernetes.DevOPS ...

  4. OpenFaaS实战之五:大话watchdog

    欢迎访问我的GitHub https://github.com/zq2599/blog_demos 内容:所有原创文章分类汇总及配套源码,涉及Java.Docker.Kubernetes.DevOPS ...

  5. OpenFaaS实战之六:of-watchdog(为性能而生)

    欢迎访问我的GitHub https://github.com/zq2599/blog_demos 内容:所有原创文章分类汇总及配套源码,涉及Java.Docker.Kubernetes.DevOPS ...

  6. OpenFaaS实战之七:java11模板解析

    欢迎访问我的GitHub https://github.com/zq2599/blog_demos 内容:所有原创文章分类汇总及配套源码,涉及Java.Docker.Kubernetes.DevOPS ...

  7. OpenFaaS实战之八:自制模板(maven+jdk8)

    欢迎访问我的GitHub https://github.com/zq2599/blog_demos 内容:所有原创文章分类汇总及配套源码,涉及Java.Docker.Kubernetes.DevOPS ...

  8. OpenFaaS实战之九:终篇,自制模板(springboot+maven+jdk8)

    欢迎访问我的GitHub https://github.com/zq2599/blog_demos 内容:所有原创文章分类汇总及配套源码,涉及Java.Docker.Kubernetes.DevOPS ...

  9. 企业实战之部署Solarwinds Network八部众

    企业实战之部署Solarwinds Network 网管系统八部众 Orion Network Performance Monitor是全面的带宽性能监控和故障管理软件,能监控并收集来自路由器.交换机 ...

随机推荐

  1. 【NX二次开发】Block UI 指定位置

    属性说明 属性   类型   描述   常规           BlockID    String    控件ID    Enable    Logical    是否可操作    Group    ...

  2. 【NX二次开发】Block UI 树列表

    属性说明 属性   类型   描述   常规           BlockID    String    控件ID    Enable    Logical    是否可操作    Group    ...

  3. Django基础之cookie与session

    cookie与session 由来及简介 HTTP协议四大特性 1.基于请求响应 2.基于TCP.IP作用于应用层之上 3.无连接 4.无状态 基于HTTP协议的通信无法记录客户端状态 但是现在很多软 ...

  4. 『言善信』Fiddler工具 — 15、使用Fiddler抓取HTTPS请求

    目录 1.Fiddler抓取HTTPS过程 2.拓展:SSL/TLS证书握手原理 3.Fiddler抓取HTTPS原理总结 4.Fiddler抓取HTTPS设置 步骤1:配置证书 步骤2:勾选设置 5 ...

  5. Spring Boot WebFlux-08——WebFlux 中 WebSocket 实现通信

    第08课:WebFlux 中 WebSocket 实现通信 前言 WebFlux 该模块中包含了对反应式 HTTP.服务器推送事件和 WebSocket 的客户端和服务器端的支持.这里我们简单实践下 ...

  6. 【模拟7.27】单(liu_runda学长的神题)

    好像用到一些高中数学知识...... 满分做法: case 0:已知a数组求b数组 因为是树状结构,设当前节点x 儿子to 我们从任意一点出发可求出b[root]来,之后我们可以通过寻找两两相连节点的 ...

  7. noip模拟9[斐波那契·数颜色·分组](洛谷模拟测试)

    这次考试还是挺好的 毕竟第一题被我给A了,也怪这题太简单,规律一眼就看出来了,但是除了第一题,剩下的我只有30pts,还是菜 第二题不知道为啥我就直接干到树套树了,线段树套上一个权值线段树,然后我发现 ...

  8. ld-linux-x86-64消耗大量的CPU

    1.现象: 服务器CPU使用率很高 top查看cpu使用进程: 2.进程用户是oracle,根据spid查看是否是数据库进程,经过查询发现:不是数据库内部的进程 select a.sql_id,a.s ...

  9. C#设计模式学习之装饰者模式

    写这个随笔时,其实对该模式理解的并不是十分透彻.在此想到什么写什么,希望对自己对他人有所帮助. 装饰者模式主要是应用继承和组合的思想,极大的实现了程序的多态,使得的程序有了更高的扩展性. 第一个基础例 ...

  10. kube-controller-manager源码分析-AD controller分析

    kubernetes ceph-csi分析目录导航 概述 kube-controller-manager组件中,有两个controller与存储相关,分别是PV controller与AD contr ...