# 系统部署
# 容器镜像
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 核心接口 |
| 前端服务:后台管理页面 |
| 云函数编译服务 |
| 定时器服务 |
- 依赖的第三方应用
应用 | 说明 | 默认 |
mqtt-broker | mqtt 服务,支持 , , 等开源软件 |
|
amqp 服务 | 提供消息订阅功能,支持 |
|
关系数据库 | 数据存储,支持 , 等开源软件 |
|
文档数据库 | 用于设备状态存储,支持 |
|
kv 数据库 | 数据缓存 |
|
etcd | 用于数据存储和节点同步 |
|
对象存储 | 用于存储静态文件和设备固件,支持 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
文件中的配置项,参考以下配置说明:
配置项 | 说明 | 默认值 |
| 后端服务 url,请将 修改为主机域名或公网 ip |
|
| mqtt 服务 url,将 修改为主机域名或公网 ip |
|
安装命令:
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 的配置项,参考以下配置说明:
配置项 | 说明 | 默认值 |
(name='API_BASE_URL') | 后端服务 url,请将 修改为主机域名或公网 ip |
|
(name='MQTT_BASE_URL') | mqtt 服务 url,将 修改为主机域名或公网 ip |
|
安装命令:
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 安装前准备
- 安装 kubernetes (opens new window) 1.19+
- 安装并设置 kubectl (opens new window) 1.19+
- 安装 helm (opens new window) 3+
# 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
- 拷贝 fogcloud-charts 目录的 values.yaml 文件,并命名为 myvalues.yaml
- 编辑 myvalues.yaml 文件,参考配置说明
- 安装 fission
helm install fission ./fission-all -n fission
- 安装 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
- 升级 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 配置说明
配置项 | 说明 | 默认值 |
| 配置文件的环境 |
|
| 镜像拉取策略 |
|
| k8s server api 地址,用来创建 k8s StatefulSet 资源;可以通过 获取 |
|
| 是否启用了云函数功能 |
|
expose | ||
| 如何暴露服务: 、 、 或 ,其他值将被忽略,服务的创建将被跳过。 |
|
| 不安全的 oss 下载 |
|
| api 服务域名,用于前端服务访问后端 api |
|
| mqtt 服务域名,用于前端服务访问 mqtt-websocket 服务 |
|
| 是否启用 ingress tls |
|
| api 服务证书的来源: , 或 ;1) :使用证书文件,直接将.key 和.crt 文件放入 fogcloud-charts/config/cert/api 目录下;2) :使用 cert-manager 生成免费证书,需要保证设置的域名可用;3) :不为服务入口配置证书 |
|
| api 服务所用证书对应的 k8s secret 资源名 |
|
| 当 = 时,用于 cert-manage 生成 x509 证书 |
|
| web 服务证书的来源: , 或 ;1) :使用证书文件,直接将.key 和.crt 文件放入 fogcloud-charts/config/cert/api 目录下;2) :使用 cert-manager 生成免费证书,需要保证设置的域名可用;3) :不为服务入口配置证书 |
|
| web 服务所用证书对应的 k8s secret 资源名 |
|
| 当 = 时,用于 cert-manage 生成 x509 证书 |
|
|
设置为 Ingress 时才需要设置 | |
| ingress class 资源名 |
|
| ingress controller 类型 |
|
| ingress 注释,可以用来设置 ingress 部分参数 |
|
| web 服务域名,用于 ingress 路由 |
|
| api 服务域名,用于 ingress 路由 |
|
| ||
| 流量策略: 或 ;1) :流量可以转发到其他 k8s 节点的 pod,2) :流量只转发给本机的 pod |
|
| web 服务的 NodePort 端口,可用于外网暴露 web 服务 |
|
| api 服务的 NodePort 端口,可用于外网暴露 api 服务 |
|
| ||
| 流量策略: 或 ;1) :流量可以转发到其他 k8s 节点的 pod,2) :流量只转发给本机的 pod |
|
| 健康检查端口,用于外部 slb 检测 web 服务是否正常运行 |
|
| 健康检查端口,用于外部 slb 检测 api 服务是否正常运行 |
|
secret | ||
| 配置私有镜像仓库源 | |
| 私有镜像仓库地址 |
|
| k8s dockerconfigjson secret 名称 |
|
| 私有镜像仓库用户名 |
|
| 私有镜像仓库密码 |
|
|
| |
fogcloud | api 服务相关配置 | |
| pod 重启策略: |
|
| 镜像地址 |
|
| 镜像版本 |
|
| deployment 复制节点数量 |
|
| 应用更新策略: , ;1) 滚动更新;2) 重启更新 |
|
| 应用更新时最大新版本 pod 新增数量比例 |
|
| 应用更新时的最大不可用 pod 数量 |
|
faasbuilder | ||
| 使用文件创建 对象,用于创建云函数;若启用可将 kubeconfig 文件放到 目录下,并删除该目录的 kubeconfig-demo 文件 |
|
mqttBroker | ||
| mqtt-broker 创建方式: , ;1) :使用 helm 自动创建;2) :使用外部的 mqtt-broker |
|
| mqtt-broker 类型选择,默认 ,不建议修改 |
|
| mqtt-broker 镜像 |
|
| mqtt-broker 镜像版本 |
|
| ||
| 是否使用已存在的 pvc |
|
| pvc 名称 |
|
| pvc 绑定的 |
|
| 是否启用 pod 节点选择 |
|
| k8s 节点名 | |
| mqtt 应用是否启用 tls | |
| 是否使用证书文件创建 mqtt 应用的 sercret 对象,启用 mqttBroker.internal.tls 时有效;若为 true,可将.crt(证书), .key(密钥)文件放到 fogcloud-charts/configs/cert/mqtt 目录下 | |
rabbitmq | ||
| rabbitmq 创建方式: , ;1) :使用 helm 自动创建;2) :使用外部的 rabbitmq |
|
| rabbitmq 是否启用 tls | |
| 是否使用证书文件创建 rabbitmq 的 sercret 对象,启用 rabbitmq.tls 时有效;若为 true,可将.crt(证书), .key(密钥)文件放到 目录下,并删除该目录下的示例 , 文件 | |
postgres | ||
| 如果使用外部的 ,设置为 |
|
mongodb | ||
| 如果使用外部的 ,设置为 |
|
redis | ||
| 如果使用外部的 ,设置为 |
|
etcd | ||
| 如果使用外部的 ,设置为 |
|
minio | ||
| 如果使用外部的 ,设置为 |
|
# 3.6 安装示例
下面根据expose.type
,分别给出三种部署示例;