# 系统部署

# 容器镜像

ghcr.io/fogcloud-io/fogcloud:latest
ghcr.io/fogcloud-io/fogcloud-web:latest
ghcr.io/fogcloud-io/faas-builder:latest
ghcr.io/fogcloud-io/fogcron-scheduler:latest

# 服务组成

应用

说明

fogcloud

后端服务:fogcloud 核心接口

fogcloud-web

前端服务:后台管理页面

faas-builder

云函数编译服务

fogcron-scheduler

定时器服务

  • 依赖的第三方应用

应用

说明

默认

mqtt-broker

mqtt 服务,支持emqx

vernemq

, hmq

等开源软件

emqx

amqp 服务

提供消息订阅功能,支持rabbitmq

rabbitmq

关系数据库

数据存储,支持postgres

mysql

等开源软件

postgres

文档数据库

用于设备状态存储,支持mongodb

mongodb

kv 数据库

数据缓存

redis

etcd

用于数据存储和节点同步

etcd

对象存储

用于存储静态文件和设备固件,支持 minio

minio

# 配置要求

  • 一台或多台 linux-amd64 主机,建议三台或以上;
  • 单机最低配置:2 核 cpu,4g 内存,40g 硬盘;建议:4 核 cpu,8g 内存,40g 硬盘;
  • 主机间网络互通;
  • 主机可以访问外网;
  • 主机部分端口可以外网或局域网内访问;

fogcloud 默认使用的端口:

端口

描述

备注

80

http 服务

因为部分设备因为性能问题,无法访问 https 服务,因此使用 http 服务用于设备固件下载

443

https 服务

管理后台

1883

mqtt-tcp 服务

用于设备不安全 mqtt 连接

8883

mqtt-ssl-tcp 服务

用于设备 mqtt 连接

8083

mqtt-websocket 服务

用于前端虚拟设备不安全连接

8084

mqtt-websocket-ssl 服务

用于前端虚拟设备安全连接

5672

amqp 服务

用于服务端消息订阅(未加密)

5671

amqp-tls 服务

用于服务端消息订阅

# 1 使用 docker-compose 部署

# 1.1 安装前准备

# 1.2 安装

先修改fogcloud-deploy/docker/docker-compose.yaml文件中的配置项,参考以下配置说明:

配置项

说明

默认值

services.fogcloud_web.environment.API_BASE_URL

后端服务 url,请将host

修改为主机域名或公网 ip

http://localhost:8001/api/v1

services.fogcloud_web.environment.MQTT_BASE_URL

mqtt 服务 url,将host

修改为主机域名或公网 ip

ws://localhost:8083/mqtt

安装命令:

git clone https://github.com/fogcloud-io/fogcloud-deploy.git
cd fogcloud-deploy/docker
docker compose up -d

# 1.3 卸载

docker compose down

# 2 使用 kubernetes 部署

# 2.1 安装前准备

# 2.2 安装

先修改fogcloud-deploy/kubernetes/fogcloud-all.yaml文件中 fogcloud-web 的配置项,参考以下配置说明:

配置项

说明

默认值

spec.containers[].env[].value

(name='API_BASE_URL')

后端服务 url,请将host

修改为主机域名或公网 ip

http://localhost:8001/api/v1

spec.containers[].env[].value

(name='MQTT_BASE_URL')

mqtt 服务 url,将host

修改为主机域名或公网 ip

ws://localhost:8083/mqtt

安装命令:

git clone https://github.com/fogcloud-io/fogcloud-deploy.git
cd fogcloud-deploy/kubernetes
kubectl create ns fogcloud
./create-configmap.sh
kubectl apply -f fogcloud-all.yaml

# 2.3 卸载

kubectl delete -f fogcloud-all.yaml

# 3 使用 helm 部署

# 3.1 安装前准备

# 3.2 获取 chart

helm repo add fogcloud-charts https://fogcloud-io.github.io/fogcloud-charts
helm repo update
helm pull fogcloud-charts/fogcloud --untar
helm pull fogcloud-charts/fission-all --untar

运行后在当前目录会生成 fogcloud-charts 文件夹

# 3.3 安装 chart

  1. 拷贝 fogcloud-charts 目录的 values.yaml 文件,并命名为 myvalues.yaml
  2. 编辑 myvalues.yaml 文件,参考配置说明
  3. 安装 fission
helm install fission ./fission-all -n fission
  1. 安装 fogcloud-charts
export NAMESPACE_NAME=fogcloud
export RELEASE_NAME=fogcloud
kubectl create namespace ${NAMESPACE_NAME}
kubectl apply -f ./fogcloud/operator/rabbitmq-cluster-operator.yaml
helm install -f myvalues.yaml ${RELEASE_NAME} --set namespace=${NAMESPACE_NAME} ./fogcloud
  1. 升级 fogcloud-charts
helm upgrade -f myvalues.yaml ${RELEASE_NAME} --set namespace=${NAMESPACE_NAME} ./fogcloud

# 3.4 卸载 chart

helm uninstall ${RELEASE_NAME} -n ${NAMESPACE_NAME}
helm uninstall fission -n fission
kubectl delete -f ./fogcloud/operator/rabbitmq-cluster-operator.yaml

注意:默认启用了 helm 的资源保留,卸载时不会释放 persistent volume 资源;

# 3.5 values 配置说明

配置项

说明

默认值

environment

配置文件的环境

production

imagePullPolicy

镜像拉取策略

Always

k8sApiServer

k8s server api 地址,用来创建 k8s StatefulSet 资源;可以通过kubectl config view

获取

https://localhost:6443

fissionEnabled

是否启用了云函数功能

false

expose

expose.type

如何暴露服务:Ingress

ClusterIP

NodePort

LoadBalancer

,其他值将被忽略,服务的创建将被跳过。

ClusterIP

expose.insecureOSS

不安全的 oss 下载

true

expose.hosts.api

api 服务域名,用于前端服务访问后端 api

localhost

expose.hosts.mqtt

mqtt 服务域名,用于前端服务访问 mqtt-websocket 服务

localhost

expose.tls.enabled

是否启用 ingress tls

false

expose.tls.cert.api.certSource

api 服务证书的来源:file

, auto

none

;1)file

:使用证书文件,直接将.key 和.crt 文件放入 fogcloud-charts/config/cert/api 目录下;2)auto

:使用 cert-manager 生成免费证书,需要保证设置的域名可用;3)none

:不为服务入口配置证书

none

expose.tls.cert.api.secretName

api 服务所用证书对应的 k8s secret 资源名

fogcloud-api

expose.tls.cert.api.dnsName

expose.tls.cert.api.certSource

=auto

时,用于 cert-manage 生成 x509 证书

fogcloud-api

expose.tls.cert.webAdmin.certSource

web 服务证书的来源:file

, auto

none

;1)file

:使用证书文件,直接将.key 和.crt 文件放入 fogcloud-charts/config/cert/api 目录下;2)auto

:使用 cert-manager 生成免费证书,需要保证设置的域名可用;3)none

:不为服务入口配置证书

none

expose.tls.cert.webAdmin.secretName

web 服务所用证书对应的 k8s secret 资源名

fogcloud-web

expose.tls.cert.webAdmin.dnsName

expose.tls.cert.webAdmin.certSource

=auto

时,用于 cert-manage 生成 x509 证书

fogcloud-api

expose.Ingress

expose.type

设置为 Ingress 时才需要设置

expose.Ingress.className

ingress class 资源名

traefik

expose.Ingress.controller

ingress controller 类型

traefik.io/ingress-controller

expose.Ingress.annotations

ingress 注释,可以用来设置 ingress 部分参数

{}

expose.Ingress.hosts.webAdmin

web 服务域名,用于 ingress 路由

localhost

expose.Ingress.hosts.api

api 服务域名,用于 ingress 路由

localhost

expose.NodePort

expose.NodePort.externalTrafficPolicy

流量策略:Cluster

Local

;1)Cluster

:流量可以转发到其他 k8s 节点的 pod,2)Local

:流量只转发给本机的 pod

Local

expose.NodePort.ports.webAdmin.httpPort

web 服务的 NodePort 端口,可用于外网暴露 web 服务

8888

expose.NodePort.ports.api.httpPort

api 服务的 NodePort 端口,可用于外网暴露 api 服务

8000

expose.LoadBalancer

expose.LoadBalancer.externalTrafficPolicy

流量策略:Cluster

Local

;1)Cluster

:流量可以转发到其他 k8s 节点的 pod,2)Local

:流量只转发给本机的 pod

Local

expose.LoadBalancer.ports.webAdmin.healthCheckNodePort

健康检查端口,用于外部 slb 检测 web 服务是否正常运行

8880

expose.LoadBalancer.ports.api.healthCheckNodePort

健康检查端口,用于外部 slb 检测 api 服务是否正常运行

8880

secret

secret.imageCredentials

配置私有镜像仓库源

secret.imageCredentials[].registry

私有镜像仓库地址

""

secret.imageCredentials[].name

k8s dockerconfigjson secret 名称

""

secret.imageCredentials[].username

私有镜像仓库用户名

""

secret.imageCredentials[].password

私有镜像仓库密码

""

storageClassName

local-path

fogcloud

api 服务相关配置

fogcloud.restartPolicy

pod 重启策略:Always

Always

fogcloud.image

镜像地址

ghcr.io/fogcloud-io/fogcloud

fogcloud.imageTag

镜像版本

v4.13.0

fogcloud.replicas

deployment 复制节点数量

3

fogcloud.strategy.type

应用更新策略:RollingUpdate

Recreate

;1)RollingUpdate

滚动更新;2)Recreate

重启更新

RollingUpdate

fogcloud.strategy.rollingUpdate.maxSurge

应用更新时最大新版本 pod 新增数量比例

50%

fogcloud.strategy.rollingUpdate.maxUnavailable

应用更新时的最大不可用 pod 数量

0

faasbuilder

faasbuilder.createKubeconfigWithFile

使用文件创建kubeconfig

对象,用于创建云函数;若启用可将 kubeconfig 文件放到fogcloud/configs/kubeconfig

目录下,并删除该目录的 kubeconfig-demo 文件

false

mqttBroker

mqttBroker.type

mqtt-broker 创建方式:internal

external

;1)internal

:使用 helm 自动创建;2)external

:使用外部的 mqtt-broker

internal

mqttBroker.internal.type

mqtt-broker 类型选择,默认emqx

,不建议修改

emqx

mqttBroker.internal.image

mqtt-broker 镜像

emqx/emqx

mqttBroker.internal.imageTag

mqtt-broker 镜像版本

4.2.8

mqttBroker.internal.persistence

mqttBroker.internal.persistence.pvcExisted

是否使用已存在的 pvc

false

mqttBroker.internal.persistence.pvc

pvc 名称

emqx-pvc

mqttBroker.internal.persistence.storageClassName

pvc 绑定的stogrageClassName

local-path

mqttBroker.internal.nodeSelector.enabled

是否启用 pod 节点选择

false

mqttBroker.internal.nodeSelector.key

k8s 节点名

mqttBroker.internal.tls.enabled

mqtt 应用是否启用 tls

mqttBroker.internal.tls.createWithCertFile

是否使用证书文件创建 mqtt 应用的 sercret 对象,启用 mqttBroker.internal.tls 时有效;若为 true,可将.crt(证书), .key(密钥)文件放到 fogcloud-charts/configs/cert/mqtt 目录下

rabbitmq

rabbitmq.type

rabbitmq 创建方式:internal

external

;1)internal

:使用 helm 自动创建;2)external

:使用外部的 rabbitmq

internal

rabbitmq.internal.tls.enabled

rabbitmq 是否启用 tls

rabbitmq.internal.tls.createWithCertFile

是否使用证书文件创建 rabbitmq 的 sercret 对象,启用 rabbitmq.tls 时有效;若为 true,可将.crt(证书), .key(密钥)文件放到fogcloud/configs/cert/amqp

目录下,并删除该目录下的示例tls.key

,tls.crt

文件

postgres

postgres.type

如果使用外部的postgres

,设置为external

internal

mongodb

mongodb.type

如果使用外部的mongodb

,设置为external

internal

redis

redis.type

如果使用外部的redis

,设置为external

internal

etcd

etcd.type

如果使用外部的etcd

,设置为external

internal

minio

minio.type

如果使用外部的minio

,设置为external

internal

# 3.6 安装示例

下面根据expose.type,分别给出三种部署示例;

# 3.6.1 NodePort

# 3.6.2 使用 Ingress 服务部署(测试环境推荐)

# 3.6.3 使用 LoadBalancer 服务部署(生产环境推荐)

更新时间: 2023/1/30 下午5:27:13