docker swarm 上部署openfaas

简介

最近有个想法,就是给树莓派上搭建很多接口服务,比如查询天气,查询微博热搜什么的,之前是想把程序打包成一个容器去部署,后来觉得这样做是不是有点麻烦,所以就决定使用openfaas了,因为是接口服务,所以openfaas很适合,之后只要写很多很多function就可以了,本地是docker swarm集群,所以就直接在swarm集群是搭建了

关于网关

目前的架构是这样子的用户访问域名dns解析到cloudflare cdn 之后到我的frp服务器,之后到我的路由器frp客户端,之后流量到我树莓派集群的traefik网关,然后到容器

部署

首先clone代码

git clone https://github.com/openfaas/faas.git

cd faas

为了减少因为网络原因造成镜像不能下载,所以提前下载镜像到本地,然后重新tag push到本地的镜像仓库

cat docker-compose.armhf.yml|grep image

1
2
3
4
5
6
7
image: openfaas/gateway:0.18.17-armhf
image: openfaas/basic-auth-plugin:0.18.17-armhf
image: openfaas/faas-swarm:0.8.5-armhf
image: nats-streaming:0.17.0
image: openfaas/queue-worker:0.11.2
image: prom/prometheus:v2.11.0
image: prom/alertmanager:v0.18.0

重新tag

1
2
3
4
5
6
7
docker tag openfaas/gateway:0.18.17-armhf reg.bboysoul.cn:5000/openfaas-gateway:0.18.17-armhf
docker tag openfaas/basic-auth-plugin:0.18.17-armhf reg.bboysoul.cn:5000/openfaas-basic-auth-plugin:0.18.17-armhf
docker tag openfaas/faas-swarm:0.8.5-armhf reg.bboysoul.cn:5000/openfaas-faas-swarm:0.8.5-armhf
docker tag nats-streaming:0.17.0 reg.bboysoul.cn:5000/nats-streaming:0.17.0
docker tag openfaas/queue-worker:0.11.2 reg.bboysoul.cn:5000/openfaas-queue-worker:0.11.2
docker tag prom/prometheus:v2.11.0 reg.bboysoul.cn:5000/prom-prometheus:v2.11.0
docker tag prom/alertmanager:v0.18.0 reg.bboysoul.cn:5000/prom-alertmanager:v0.18.0

push

1
2
3
4
5
6
7
docker push reg.bboysoul.cn:5000/openfaas-gateway:0.18.17-armhf
docker push reg.bboysoul.cn:5000/openfaas-basic-auth-plugin:0.18.17-armhf
docker push reg.bboysoul.cn:5000/openfaas-faas-swarm:0.8.5-armhf
docker push reg.bboysoul.cn:5000/nats-streaming:0.17.0
docker push reg.bboysoul.cn:5000/openfaas-queue-worker:0.11.2
docker push reg.bboysoul.cn:5000/prom-prometheus:v2.11.0
docker push reg.bboysoul.cn:5000/prom-alertmanager:v0.18.0

之后修改compose文件中的镜像名字,配置网关,配置网络

vim docker-compose.armhf.yml

接着使用部署脚本部署

./deploy_stack.sh

这个脚本会自动创建两个secrets

1
2
3
4
5
secrets:
basic-auth-user:
external: true
basic-auth-password:
external: true

三个config

1
2
3
4
5
6
7
configs:
prometheus_config:
file: ./prometheus/prometheus.yml
prometheus_rules:
file: ./prometheus/alert.rules.yml
alertmanager_config:
file: ./prometheus/alertmanager.yml

最后要值得注意的是,因为是在树莓派上部署,所以创建stack命令最好加上--resolve-image never

所以把deploy_stack.sh最后的命令改为

docker stack deploy func --compose-file $composefile --resolve-image never

部署一个函数

创建完成集群之后我们就可以去部署一个函数

首先安装faas-cli

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

登陆

echo -n a2c8e90a775ea8bxz063a3e8vc88991sdb6b4a00b994ba9bd8fsae93d145e6aa | faas-cli login --username=admin --password-stdin --gateway http://faas.bboysoul.cn/

查看可以使用的语言

faas-cli new --list

之后创建一个函数,我使用的是py3

faas-cli new weather --lang python3-armhf

编译

faas-cli build -f ./weather.yml

重新tag

docker tag weather:latest reg.bboysoul.cn:5000/weather:v1.0

推送

docker push reg.bboysoul.cn:5000/weather:v1.0

编辑yaml文件

vim weather.yml

修改使用的镜像之后运行函数

faas-cli deploy -f ./weather.yml --gateway http://faas.bboysoul.cn/ -l traefik.http.services.weather.loadbalancer.server.port=5917

如果没有什么问题的话你就可以访问你的函数了

http://域名/function/函数名

重置密码

如果你想查看或者重置密码可以看下面

https://docs.openfaas.com/deployment/troubleshooting/#i-forgot-my-gateway-password

目前我集群上拥有的函数

查看天气

https://faas.bboysoul.cn/function/weather

查看微博

https://faas.bboysoul.cn/function/weibo

欢迎关注Bboysoul的博客www.bboy.app
Have Fun

欢迎关注我的其它发布渠道