# fogcloud 生产部署文档
本示例教程介绍了如何在阿里云上部署 fogcloud5.0 生产环境,若您打算将 fogcloud 部署于其他公有云平台或本地服务器,也可以参考本教程,并结合其他公有云平台的文档进行部署,部署流程基本相同。
# 1 部署准备
请提前申请好您的阿里云账号,阿里云申请地址:https://www.aliyun.com/ (opens new window)
本示例教程中省略了阿里云服务资源创建的过程,您可能需要参考阿里云官方帮助文档进行资源的购买或开通。
提醒:在您开始部署前应当先了解所需开通的云服务的资费情况,您可以在相关资源的定价页中进行查询。
# 1.1 创建服务器
本教程中的 fogcloud 运行于k3s
环境,当然您也可以使用各公有云上提供的托管类型的 kubernetes 服务进行部署,如阿里云 ACK、AWS EKS 等。
您至少需要创建三台 ECS 实例,用来部署 k3s 集群,其中一台为master
控制节点,两台为node
工作节点,以下为推荐的服务器最低配置。
节点类型 | 硬件配置 | 服务器名称 | 内网 IP |
master | CPU:4 核 内存:8G 硬盘:60G | mxchip-fogcloud-prod1 | 192.168.10.1 |
node1 | CPU:4 核 内存:8G 硬盘:60G | mxchip-fogcloud-k8s-prod1 | 192.168.20.1 |
node2 | CPU:4 核 内存:8G 硬盘:60G | mxchip-fogcloud-k8s-prod2 | 192.168.30.1 |
网络要求:服务器能够访问外网,并且也可以互相通信
安全组配置:若需要通过外网管理 k3s,您需要在 ECS 实例所在的安全组中开放6443/TCP
端口
提醒:您需要在创建服务器前规划好您的 VPC 网络,可以参考阿里云 VPC 帮助文档 (opens new window)
# 1.2 创建数据库
默认情况下,fogcloud 在部署过程中会在 k3s 上自动创建数据库容器(仅用于测试环境)
生产环境建议使用阿里云的云数据库,下文将提供关闭 k3s 数据库容器的方法。
数据库类型 | 规格 | 版本 | 数量 |
mongodb | 2 核 4G,硬盘空间:40G,三节点 | 4.2 | 1 |
postgresql | 2 核 4G,硬盘空间:20G,高可用版 | 14 | 1 |
redis | 1GB | 7.0 | 1 |
网络要求:需要打通与服务器的网络(通过数据库的 IP 白名单配置)
# 1.3 域名规划
您共需要准备四个域名,并请准备好对应的 SSL 证书,可以使用通配符域名证书。
以下为本次部署示例所使用的域名:
域名 | 描述 |
app-fog.dev.mxchip.com.cn | fogcloud 前端 |
api-fog.dev.mxchip.com.cn | fogcloud 后端 API |
mqtt-fog.dev.mxchip.com.cn | mqtt 消息 |
amqp-fog.dev.mxchip.com.cn | rabbitmq 消息队列 |
# 1.4 各服务对应端口
在部署开始前,请先了解 fogcloud 对外使用的服务端口及其作用:
端口 | 描述 | 备注 |
6443 | k8s api | 用于访问 k8s api |
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 服务 | 用于服务端消息订阅 |
# 2 安装 k3s 集群
# 2.1 安装 k3s
若您希望了解更多的 k3s 使用信息,请参考官方文档 (opens new window)
# 1. master上创建配置文件
master
上创建文件/etc/rancher/k3s/config.yaml
作为 k3s 启动的配置文件:
root@mxchip-fogcloud-prod1:~# mkdir -p /etc/rancher/k3s/
root@mxchip-fogcloud-prod1:~# cat > /etc/rancher/k3s/config.yaml < "1000-40000"
tls-san:
- "192.168.10.1"
- "192.168.20.1"
- "192.168.30.1"
kubelet-arg:
- "container-log-max-files=10"
EOF
注意:请将以上配置文件中的 ip 替换为您云服务器的真实 ip
# 2. k3s master
节点安装
在master
上运行脚本:
root@mxchip-fogcloud-prod1:~# curl -sfL https://get.k3s.io | sh -
提醒:国内用户,可以使用以下方法加速安装:
curl -sfL https://rancher-mirror.rancher.cn/k3s/k3s-install.sh | INSTALL_K3S_MIRROR=cn sh -
# 3. master 上获取 token
从master
的/var/lib/rancher/k3s/server/node-token
获取mynodetoken
该 token 用于将node
节点加入到 k3s 集群
root@mxchip-fogcloud-prod1:~# cat /var/lib/rancher/k3s/server/node-token
# 4. node 节点加入到 k3s
在node1
、node2
上分别运行脚本:
注意:将${mynodetoken}替换为上一步中获得的 token
root@mxchip-fogcloud-k8s-prod1:~# curl -sfL https://get.k3s.io | K3S_URL=https://192.168.10.1:6443 K3S_TOKEN=${mynodetoken} sh -
提醒:国内用户,可以使用以下方法加速安装:
curl -sfL https://rancher-mirror.rancher.cn/k3s/k3s-install.sh | INSTALL_K3S_MIRROR=cn K3S_URL=https://192.168.10.1:6443 K3S_TOKEN=${mynodetoken} sh -
# 5. 验证 k3s 集群状态
在master
上查看集群状态,正常情况下集群所有节点状态都应为Ready
root@mxchip-fogcloud-prod1:~# kubectl get node
NAME STATUS ROLES AGE VERSION
mxchip-fogcloud-prod1 Ready control-plane,master 22m v1.27.6+k3s1
mxchip-fogcloud-k8s-prod1 Ready <none> 41s v1.27.6+k3s1
mxchip-fogcloud-k8s-prod2 Ready <none> 5s v1.27.6+k3s1
# 2.2 安装 Helm v3
您可以选择在自己的本机
或在master
节点安装 Helm,请先根据自己的操作系统类型下载好对应的安装包。
Helm github 下载地址:https://github.com/helm/helm/releases (opens new window)
- 在
master
节点安装 Helm:
root@mxchip-fogcloud-prod1:~# wget https://get.helm.sh/helm-v3.12.3-linux-amd64.tar.gz
root@mxchip-fogcloud-prod1:~# tar zxf helm-v3.12.3-linux-amd64.tar.gz
root@mxchip-fogcloud-prod1:~# mv linux-amd64/helm /usr/local/bin/
root@mxchip-fogcloud-prod1:~# export KUBECONFIG=/etc/rancher/k3s/k3s.yaml #Helm将使用该变量获取kubeconfig配置文件,从而连接到k3s
在
本机
安装 Helm:- 请根据您自己的操作系统并参照官方教程 (opens new window)安装 kubectl 工具。
- 请按照官方教程 (opens new window)配置
kubeconfig
,kubeconfig
位于master
的/etc/rancher/k3s/k3s.yaml
,通常情况下,您需要将该文件重命名为config
,并放置于$HOME/.kube
目录下。 - 请将
$HOME/.kube/config
中的server: https://192.168.10.1:6443
,修改为server: https://<master公网IP>:6443
,此处请注意在安全组中开放6443/TCP
端口。 - 验证安装:在本机运行命令:
kubectl get nodes
,若出现上述三个云服务器节点则安装正确。 - 请根据自己的操作系统并参考官方教程 (opens new window)安装 Helm
验证 Helm 安装:
root@mxchip-fogcloud-k8s-prod1:~# helm version
version.BuildInfo{Version:"v3.12.3", GitCommit:"3a31588ad33fe3b89af5a2a54ee1d25bfe6eaa5e", GitTreeState:"clean", GoVersion:"go1.20.7"}
# 3 安装 fogcloud
# 3.1 获取 chart
fogcloud5.0 chart:📎fogcloud.zip
在master
上运行命令:
root@mxchip-fogcloud-prod1:~# helm repo add fogcloud-charts https://fogcloud-io.github.io/fogcloud-charts
root@mxchip-fogcloud-prod1:~# helm repo update
root@mxchip-fogcloud-prod1:~# helm pull fogcloud-charts/fission-all --untar
root@mxchip-fogcloud-prod1:~# unzip fogcloud.zip
运行成功后,会在本机当前目录生成两个文件夹:fogcloud
、fission-all
# 3.2 准备配置文件
# 3.2.1 证书配置
假设我们为 fogcloud 服务申请了如下域名的证书文件:
服务 | 域名 | 证书文件 |
前端服务 | app-fog.dev.mxchip.com.cn | web.crt,web.key |
后端服务 | api-fog.dev.mxchip.com.cn | api.crt,api.key |
mqtt 服务 | mqtt-fog.dev.mxchip.com.cn | mqtt.crt,mqtt.key |
amqp 服务 | amqp-fog.dev.mxchip.com.cn | amqp.crt,amqp.key |
- 使用 web.crt,web.key 替换
fogcloud/configs/cert/webAdmin
目录下原有证书文件 - 使用 api.crt,api.key 替换
fogcloud/configs/cert/api
目录下原有证书文件 - 使用 mqtt.crt,mqtt.key 替换
fogcloud/configs/cert/mqtt
目录下原有证书文件 - 使用 amqp.crt,amqp.key 替换
fogcloud/configs/cert/amqp
目录下原有证书文件
注意:证书和密钥文件名可以随意更改,但后缀名需要改为.crt
和.key
# 3.2.2 helm values 配置
配置文件位于fogcloud/values.yaml
,生产环境推荐使用LoadBalancer
请注意以下两点:
- 如果
PostgreSQL
、mongodb
和redis
使用的是云数据库,需要注释values.yaml
文件的postgres
、mongodb
和redis
三段段,并且删除fogcloud/templates/
目录下,postgres
、mongodb
与redis
三个目录 - 如果您开启了
etcd-cluster
,可以将values.yaml
中etcd.internal.enabled
的值改为false
或注释该段,并删除fogcloud/templates/
目录下etcd
目录 - 如果您开启了
minio-cluster
,需要注释values.yaml
中的minio
这段,并删除fogcloud/templates/
目录下 minio 目录 - 部分
resources
资源限制可先注释,或按服务器资源大小结合实际业务用量设置
更改配置文件的配置项:
配置项 | 说明 | 值 |
| 配置文件的环境 |
|
| k8s server api 地址,用来创建 k8s StatefulSet 资源;可以通过 |
|
| 是否启用了云函数功能;若启用该功能,需要将 kubeconfig 文件放入 |
|
| 是否启用云网关功能 |
|
| 是否启用遥测 |
|
| 如何暴露服务: |
|
| api 服务域名,用于前端服务访问后端 api |
|
| mqtt 服务域名,用于前端服务访问 mqtt-websocket 服务 |
|
| 是否启用 ingress tls |
|
| 使用的存储类,k3s 默认为 local-path |
|
| api 服务证书的来源: 1) 2) 3) |
|
| web 服务证书的来源: 1) 2) 3) |
|
| web 服务域名,用于 ingress 路由 |
|
| api 服务域名,用于 ingress 路由 |
|
| mqtt 应用是否启用 tls |
|
| rabbitmq 应用是否启用 tls |
|
| 是否开启单机 etcd |
|
| 是否开启单机 minio |
|
| 是否开启 tdengine 集群 |
|
| 是否开启 nats |
|
| 是否开启 minio 集群 |
|
| 是否开启 redis 集群 |
|
| 是否开启 etcd 集群 |
|
提供本次部署示例修改后的values.yaml
文件供参考:
# Default values for fogcloud-charts.
# This is a YAML-formatted file.
# Declare variables to be passed into your templates.
# 配置文件环境:development,test,production
environment: production
imagePullPolicy: Always
k8sApiServer: "https://192.168.10.1:6443"
# 是否启用云函数功能,若安装了fission可以设置为true
fissionEnabled: false
# 是否启用云网关功能
cloudGatewayEnabled: true
# 是否启用遥测
telemetryEnabled: true
# 暴露web管理后台和api服务,有:Ingress, ClusterIP, NodePort, LoadBalancer这几种类型;
# 若要公开服务,请使用LoadBalancer,Ingress,NodePort三种类型
expose:
type: LoadBalancer
insecureOSS: true
# 各个服务的域名,若启用对应服务的tls,请保证域名是外网可以访问的;
hosts:
api: api-fog.dev.mxchip.com.cn
mqtt: mqtt-fog.dev.mxchip.com.cn:8084
tls:
enabled: true
cert:
webAdmin:
# x509证书创建方式,支持file, auto, none这三种方式
# file: 通过文件创建,可将对应证书文件:*.key,*.crt,放到fogcloud-charts/configs/cert/webAdmin目录下
# none: 不创建
# auto: 使用cert-manager自动生成
certSource: file
secretName: web-cert
dnsName:
api:
certSource: file
secretName: api-cert
dnsName:
Ingress:
className: traefik-lb
controller: traefik.io/ingress-controller
annotations: {}
hosts:
# web管理后台域名
webAdmin: app-fog.dev.mxchip.com.cn
# 后端api服务域名
api: api-fog.dev.mxchip.com.cn
NodePort:
externalTrafficPolicy: Local
ports:
webAdmin:
httpPort: 8000
api:
httpPort: 8001
LoadBalancer:
externalTrafficPolicy: Local
healthCheckNodePort: 4000
ports:
webAdmin:
httpPort: 18000
api:
httpPort: 18001
secret:
# 配置私有镜像仓库
imageCredentials:
# - registry:
# name:
# username:
# password:
# email:
storageClassName: "local-path"
resourceRangeLimit:
limits:
# - default:
# memory: "512Mi"
# cpu: "0.5"
# defaultRequest:
# memory: "256Mi"
# cpu: "0.1"
# min:
# memory: "128Mi"
# cpu: "0.1"
# max:
# memory: "4Gi"
# cpu: "2"
# type: Container
fogcloud:
restartPolicy: Always
image: registry.cn-shanghai.aliyuncs.com/fogcloud/public-fogcloud
imageTag: v5.2.0
config:{}
replicas: 3
service:
externalTrafficPolicy: Local
type: ClusterIP
ports:
http:
nodePort: 4000
grpc:
nodePort: 4001
strategy:
type: RollingUpdate # enum: Recreate, RollingUpdate
rollingUpdate:
maxSurge: 25%
maxUnavailable: 25%
resources:
limits:
cpu: "3"
memory: "4Gi"
requests:
cpu: "10m"
memory: "32Mi"
fogcloudWeb:
image: registry.cn-shanghai.aliyuncs.com/fogcloud/public-fogcloud-web
imageTag: v5.2.0
replicas: 3
envVars:
- name: "MAP_CONFIG"
value: "china"
- name: "DEPLOYMENT_CONFIG"
value: "private"
strategy:
type: RollingUpdate # enum: Recreate, RollingUpdate
rollingUpdate:
maxSurge: 25%
maxUnavailable: 25%
resources:
limits:
cpu: "100m"
memory: "32Mi"
requests:
cpu: "10m"
memory: "16Mi"
faasbuilder:
image: registry.cn-shanghai.aliyuncs.com/fogcloud/public-faas-builder
imageTag: latest
config: {}
createKubeconfigWithFile: true
replicas: 3
resources:
limits:
cpu: "2"
memory: "2Gi"
requests:
cpu: "10m"
memory: "32Mi"
strategy:
type: RollingUpdate # enum: Recreate, RollingUpdate
rollingUpdate:
maxSurge: 25%
maxUnavailable: 25%
fogcronScheduler:
image: registry.cn-shanghai.aliyuncs.com/fogcloud/public-fogcron-scheduler
imageTag: latest
replicas: 3
config: {}
resources:
limits:
cpu: "500m"
memory: "128Mi"
requests:
cpu: "10m"
memory: "16Mi"
strategy:
type: RollingUpdate # enum: Recreate, RollingUpdate
rollingUpdate:
maxSurge: 25%
maxUnavailable: 25%
fognotifier:
image: registry.cn-shanghai.aliyuncs.com/fogcloud/public-fognotifier
imageTag: v5.0.0
replicas: 3
config: {}
resources:
limits:
cpu: "500m"
memory: "128Mi"
requests:
cpu: "10m"
memory: "16Mi"
strategy:
type: RollingUpdate
rollingUpdate:
maxSurge: 25%
maxUnavailable: 25%
mqttwebhook:
image: registry.cn-shanghai.aliyuncs.com/fogcloud/public-mqttwebhook
imageTag: v5.1.0
replicas: 3
config: {}
resources:
limits:
cpu: "1"
memory: "1Gi"
requests:
cpu: "10m"
memory: "16Mi"
strategy:
type: RollingUpdate
rollingUpdate:
maxSurge: 25%
maxUnavailable: 25%
fogthinghistory:
image: registry.cn-shanghai.aliyuncs.com/fogcloud/public-fogthinghistory
imageTag: v5.0.0
replicas: 3
config: {}
resources:
limits:
cpu: "1"
memory: "1Gi"
requests:
cpu: "10m"
memory: "16Mi"
strategy:
type: RollingUpdate
rollingUpdate:
maxSurge: 25%
maxUnavailable: 25%
nginx:
image: nginx
imageTag: 1.21
replicas: 3
resources:
limits:
cpu: "1"
memory: "1Gi"
requests:
cpu: "10m"
memory: "16Mi"
strategy:
type: RollingUpdate # enum: Recreate, RollingUpdate
rollingUpdate:
maxSurge: 25%
maxUnavailable: 25%
mqttBroker:
type: internal
internal:
type: emqx
image: emqx/emqx
imageTag: 4.2.14
defaultUsername: fogcloud
defaultPassword: "4Jy!YC7bdpsjU*6k"
dashboardUsername: admin
dashboardPassword: "%PWpPb*qhB*g82dY"
persistence:
keep: true
pvcExisted: false
pvc: emqx-pvc
storageClassName: local-path
storage: 10Gi
resources:
limits:
cpu: "2"
memory: "4Gi"
requests:
cpu: "10m"
memory: "256Mi"
nodeSelector:
enabled: false
key: kubernetes.io/hostname
value: fogcloud-prod1
replicas: 3
tls:
enabled: true
certSource: file # file, auto, none
secretName: mqtt-cert
service:
type: NodePort
externalTrafficPolicy: Local
healthCheckNodePort: 30000
ports:
mqttTcp:
port: 1883
nodePort: 1883
mqttTcpTls:
port: 8883
nodePort: 8883
httpApi:
port: 8081
nodePort: 8081
mqttWs:
port: 8083
nodePort: 8083
mqttWss:
port: 8084
nodePort: 8084
admin:
port: 18083
nodePort: 18083
rabbitmq:
type: internal
internal:
image: rabbitmq
imageTag: 3.10.2-management
replicas: 3
defaultUsername: rabbitmq
defaultPassword: fogcloud
additionalConfigs:
envVars:
persistence:
keep: true
pvcExisted: false
pvc: rabbitmq-pvc
storageClassName: local-path
storage: 5Gi
resources:
limits:
cpu: "1"
memory: "1Gi"
requests:
cpu: "10m"
memory: "256Mi"
tls:
enabled: true
certSource: file # file, auto, none
secretName: amqp-cert
service:
externalTrafficPolicy: Cluster
healthCheckNodePort: 30001
type: NodePort
ports:
amqp:
port: 5672
nodePort: 5672
amqps:
port: 5671
nodePort: 5671
#postgres:
# type: internal
# internal:
# image: postgres
# imageTag: 13
# persistence:
# pvcExisted: false
# keep: true
# pvc: postgres-pvc
# storageClassName: local-path
# storage: 10Gi
# resources:
# limits:
# cpu: "1"
# memory: "512Mi"
# requests:
# cpu: "0.01"
# memory: "64Mi"
# envVars:
# - name: POSTGRES_DB
# value: fogcloud
# - name: POSTGRES_PASSWORD
# value: fogcloud
# - name: POSTGRES_USER
# value: postgres
#mongodb:
# type: internal
# internal:
# enabled: true
# image: mongo
# imageTag: 4.4-rc-focal
# persistence:
# keep: true
# pvcExisted: false
# pvc: mongo-pvc
# storageClassName: local-path
# storage: 30Gi
# resources:
# limits:
# cpu: "1"
# memory: "512Mi"
# requests:
# cpu: "0.1"
# memory: "128Mi"
# envVars:
#redis:
# type: internal
# internal:
# image: redis
# imageTag: 6.2
# persistence:
# keep: true
# pvcExisted: false
# pvc: redis-pvc
# storageClassName: local-path
# storage: 1Gi
# resources:
# limits:
# cpu: "0.1"
# memory: "128Mi"
# requests:
# cpu: "0.01"
# memory: "8Mi"
# envVars:
etcd:
type: internal
internal:
enabled: false
image: bitnami/etcd
imageTag: 3.5.1
persistence:
keep: true
pvcExisted: false
pvc: etcd-pvc
storageClassName: local-path
storage: 3Gi
resources:
limits:
cpu: "100m"
memory: "256Mi"
requests:
cpu: "10m"
memory: "32Mi"
replicas: 1
envVars:
- name: ALLOW_NONE_AUTHENTICATION
value: "yes"
- name: ETCD_ADVERTISE_CLIENT_URLS
value: "http://etcd1:2379"
- name: ETCD_LISTEN_CLIENT_URLS
value: "http://0.0.0.0:2379"
#minio:
# type: internal
# internal:
# service:
# type: ClusterIP
# nodePorts:
# api: "19000"
# console: "19001"
# enabled: false
# image: minio/minio
# imageTag: latest
# persistence:
# keep: true
# pvcExisted: false
# pvc: minio-pvc
# storageClassName: local-path
# storage: 30Gi
# resources:
# limits:
# cpu: "1"
# memory: "256Mi"
# requests:
# cpu: "10m"
# memory: "128Mi"
# envVars:
# - name: MINIO_ACCESS_KEY
# value: "1234567890"
# - name: MINIO_REGION_NAME
# value: "cn-south-1"
# - name: MINIO_ROOT_PASSWORD
# value: "fogcloud"
# - name: MINIO_ROOT_USER
# value: "minio"
# - name: MINIO_SECRET_KEY
# value: "abcdefghi"
tdengine:
enabled: true
replicaCount: 3
resources:
limits:
cpu: "1"
memory: "1Gi"
requests:
cpu: "10m"
memory: "64Mi"
nats:
enabled: true
config:
cluster:
enabled: true
replicas: 3
jetstream:
enabled: true
merge:
system_account: SYS
accounts:
SYS:
users:
- user: admin
password: public
APP:
jetstream:
max_memory: 1G
max_filestore: 10G
max_streams: 100
max_consumers: 100
jetstream: enabled
users:
- user: "fogcloud"
password: "root"
service:
ports:
monitor:
enabled: true
natsBox:
enabled: false
reloader:
enabled: true
container:
merge:
resources:
limits:
cpu: 1
memory: 512Mi
requests:
cpu: 100m
memory: 16Mi
minio-cluster:
enabled: true
mode: distributed
nameOverride: minio
auth:
rootUser: "minio"
rootPassword: "fogcloud"
resources:
limits:
cpu: 1
memory: 256Mi
requests:
cpu: 10m
memory: 128Mi
statefulset:
replicaCount: 4
persistence:
storageClass: local-path
size: 30Gi
redis-cluster:
enabled: false
nameOverride: redis
global:
storageClass: local-path
master:
persistence:
size: 1Gi
sentinel:
enabled: true
auth:
password: "fogcloud"
replica:
persistence:
size: 1Gi
resources:
limits:
cpu: 1000m
memory: 256Mi
requests:
cpu: 10m
memory: 16Mi
etcd-cluster:
enabled: true
nameOverride: etcd
replicaCount: 3
auth:
rbac:
create: false
persistence:
storageClass: local-path
size: 2Gi
resources:
limits:
cpu: "100m"
memory: "256Mi"
requests:
cpu: "10m"
memory: "32Mi"
# 3.2.3 fogcloud 应用配置
- fogcloud-core 应用配置文件修改
fogcloud-core
应用配置文件位于fogcloud/configs/fogcloud-core/fogcloud.example.yaml
生产环境配置请在production
段下添加数据库信息,以下内容请按实际情况填写:
...
production:
<<: *development
NAME: fogcloud
HOST: app-fog.dev.mxchip.com.cn
FAAS_STORE_ENDPOINT: https://fogcloud.io
MINIO_HOST: fogcloud-minio
# postgres配置
POSTGRES_HOST: pgm-uf6jwv17jf31i2zb.pg.rds.aliyuncs.com
POSTGRES_PORT: 5432
POSTGRES_USER: fogcloud
POSTGRES_PASSWORD: aA123456
POSTGRES_DBNAME: fogcloud
POSTGRES_SSLMODE: disable
# mongo配置
MONGO_URI: mongodb://root:aA123456@dds-uf6a96d35090c0141.mongodb.rds.aliyuncs.com:3717,dds-uf6a96d35090c0142.mongodb.rds.aliyuncs.com:3717/fogcloud?replicaSet=mgset-72857898
MONGO_DBNAME: fogcloud
# redis配置
REDIS_HOST: r-bp2ae47c4nsrhy868s.redis.rds.aliyuncs.com
REDIS_PORT: 6379
REDIS_PASSWORD: "aA123456"
REDIS_DB: 0
CRON_WORKER_BROKER_ENDPOINTS: "redis://:aA123456@r-bp2ae47c4nsrhy868s.redis.rds.aliyuncs.com:6379/11"
CRON_WORKER_RESULT_BACKEND_ENDPOINT: "redis://:aA123456@r-bp2ae47c4nsrhy868s.redis.rds.aliyuncs.com:6379/12"
- faasbuilder 应用配置文件修改:
faasbuilder
应用配置文件位于fogcloud/configs/faasbuilder/faasbuilder.yaml
以下内容请按实际情况填写:
...
production:
<<: *development
POSTGRES_HOST: pgm-uf6jwv17jf31i2zb.pg.rds.aliyuncs.com
POSTGRES_PORT: 5432
POSTGRES_USER: fogcloud
POSTGRES_PASSWORD: aA123456
POSTGRES_DBNAME: fogcloud
POSTGRES_SSLMODE: disable
REDIS_HOST: r-bp2ae47c4nsrhy868s.redis.rds.aliyuncs.com
REDIS_PORT: 6379
REDIS_PASSWORD: "aA123456"
REDIS_DB: 3
- fogcron 应用配置文件修改:
fogcron
应用配置文件位于fogcloud/configs/fogcron/fogcron.yaml
以下内容请按实际情况填写:
...
production:
<<: *development
BROKER_ENDPOINTS: "redis://:aA123456@r-bp2ae47c4nsrhy868s.redis.rds.aliyuncs.com:6379/11"
RESULT_BACKEND_ENDPOINT: "redis://:aA123456@r-bp2ae47c4nsrhy868s.redis.rds.aliyuncs.com:6379/12"
- fognotifier 应用配置文件修改:
fognotifier
应用配置文件位于fogcloud/configs/fognotifier/fognotifier.yaml
以下内容请按实际情况填写:
...
production:
<<: *development
POSTGRES_DBNAME: fogcloud
POSTGRES_HOST: pgm-uf6jwv17jf31i2zb.pg.rds.aliyuncs.com
POSTGRES_PASSWORD: aA123456
POSTGRES_PORT: 5432
POSTGRES_SSLMODE: disable
POSTGRES_USER: fogcloud
REDIS_DB: 1
REDIS_HOST: r-bp2ae47c4nsrhy868s.redis.rds.aliyuncs.com
REDIS_PASSWORD: aA123456
REDIS_PORT: 6379
SERVER_NOTIFIER_TASK_POOL_SIZE: 50
- tdengine 应用配置文件修改:
tdengine
应用配置文件位于fogcloud/charts/tdengine/values.yaml
需要修改存储类名称和 pvc 存储大小
storage:
# Set storageClassName for pvc. K8s use default storage class if not set.
#
className: "local-path" #修改该处
dataSize: "10Gi" #修改该处
logSize: "5Gi" #修改该处
- nats 应用配置文件修改:
nats
应用配置文件位于fogcloud/charts/nats/values.yaml
需要修改存储类名称
...
jetstream:
enabled: false
fileStore:
enabled: true
dir: /data
############################################################
# stateful set -> volume claim templates -> jetstream pvc
############################################################
pvc:
enabled: true
size: 10Gi
storageClassName: local-path #修改该处
...
resolver:
enabled: false
dir: /data/resolver
############################################################
# stateful set -> volume claim templates -> resolver pvc
############################################################
pvc:
enabled: true
size: 10Gi
storageClassName: local-path #修改该处
# 3.3 安装服务
# 3.3.1 配置阿里云负载均衡
您需要创建一个阿里云负载均衡CLB
实例,创建完成后需要将步骤1.3
中规划好的 4 个域名解析到该CLB
实例上。
阿里云负载均衡 CLB 的配置,你可以参考阿里云帮助文档 (opens new window)
# 3.3.1.1 创建虚拟服务器组
请先创建如下虚拟服务器组,分组对应的后端服务器端口如下:
分组名称 | 后端服务器端口 |
fogcloud-k8s-api | 8001 |
fogcloud-k8s-web-admin | 8000 |
fogcloud-k8s-mqtt-tcp | 1883 |
fogcloud-k8s-mqtt-ssl-tcp | 8883 |
fogcloud-k8s-mqtt-websocket-ssl | 8084 |
fogcloud-k8s-amqp | 5672 |
fogcloud-k8s-amqp-tls | 5671 |
注意:三台服务器都需要添加到分组中,配置示例如下:
# 3.3.1.2 创建监听
请按下表创建监听器:
注意:web-admin
对应的为 HTTPS 协议,需要在监听器上绑定 app-fog.dev.mxchip.com.cn 证书
监听名称 | 前端协议/端口 | 服务器组 | 健康检查 |
ota | HTTP:80 | [虚拟]fogcloud-k8s-api | 健康检查协议:HTTP 健康检查方法:GET 健康检查路径:/api/v1/ping 健康检查端口:8001 健康检查域名:app-fog.dev.mxchip.com.cn |
amqp_tls | TCP:5671 | [虚拟]fogcloud-k8s-amqp-tls | 健康检查协议:TCP 健康检查端口:5671 |
mqtt_tcp | TCP:1883 | [虚拟]fogcloud-k8s-mqtt-tcp | 健康检查协议:TCP 健康检查端口:1883 |
amqp | TCP:5672 | [虚拟]fogcloud-k8s-amqp | 健康检查协议:TCP 健康检查端口:5672 |
mqtt_websocket_ssl | TCP:8084 | [虚拟]fogcloud-k8s-mqtt-websocket-ssl | 健康检查协议:TCP 健康检查端口:8084 |
mqtt_ssl_tcp | TCP:8883 | [虚拟]fogcloud-k8s-mqtt-ssl-tcp | 健康检查协议:TCP 健康检查端口:8883 |
web-admin | HTTPS:443 | [虚拟]fogcloud-k8s-web-admin | 健康检查协议:HTTP 健康检查方法:HEAD 健康检查路径:/ 健康检查端口:8000 健康检查域名:app-fog.dev.mxchip.com.cn |
# 3.3.1.3 转发策略配置
请按下图进行配置:
ota
监听器转发策略配置:
web-admin
监听器转发策略配置:
# 3.3.2 安装 fogcloud
请先确认已按步骤 3.2 的要求正确修改了您的配置文件;
若检查无误,请在master
上运行如下命令(若您在自己本机安装的 helm,则在本机
运行):
root@mxchip-fogcloud-prod1:~# kubectl create namespace fogcloud
root@mxchip-fogcloud-prod1:~# kubectl create namespace fission
root@mxchip-fogcloud-prod1:~# kubectl apply -f ./fogcloud/operator/rabbitmq-cluster-operator.yaml
root@mxchip-fogcloud-prod1:~# helm install fission -n fission ./fission-all
root@mxchip-fogcloud-prod1:~# helm install fogcloud -n fogcloud ./fogcloud
提醒:请保存好您的 helm 部署文件,在后续的升级更新中仍将使用这些文件。
# 4 验证 fogcloud
# 4.1 查看 pod 状态
- 请确认所有 pod 运行状态为
Running
- pod 副本数量可通过配置文件
fogcloud/values.yaml
的 replicas 参数调节
root@mxchip-fogcloud-prod1:~# kubectl get pod -n fogcloud
NAME READY STATUS RESTARTS AGE
faasbuilder-766bfd956f-bddzm 1/1 Running 0 11m
faasbuilder-766bfd956f-jcf6d 1/1 Running 0 11m
faasbuilder-766bfd956f-lgvjj 1/1 Running 0 11m
fogcloud-core-7d6c9ffc9d-gvr2x 1/1 Running 0 11m
fogcloud-core-7d6c9ffc9d-hd7bl 1/1 Running 0 11m
fogcloud-core-7d6c9ffc9d-vtbwt 1/1 Running 0 11m
fogcloud-etcd-0 1/1 Running 0 11m
fogcloud-etcd-1 1/1 Running 0 11m
fogcloud-etcd-2 1/1 Running 0 11m
fogcloud-minio-0 1/1 Running 0 11m
fogcloud-minio-1 1/1 Running 0 11m
fogcloud-minio-2 1/1 Running 0 11m
fogcloud-minio-3 1/1 Running 0 11m
fogcloud-nats-0 2/2 Running 0 11m
fogcloud-nats-1 2/2 Running 0 11m
fogcloud-nats-2 2/2 Running 0 11m
fogcloud-tdengine-0 1/1 Running 0 11m
fogcloud-tdengine-1 1/1 Running 0 11m
fogcloud-tdengine-2 1/1 Running 0 11m
fogcloud-web-6964ccddbb-7cjts 1/1 Running 0 11m
fogcloud-web-6964ccddbb-865wd 1/1 Running 0 11m
fogcloud-web-6964ccddbb-ljsc5 1/1 Running 0 11m
fogcron-scheduler-7958699885-6plsf 1/1 Running 0 11m
fogcron-scheduler-7958699885-dvk9w 1/1 Running 0 11m
fogcron-scheduler-7958699885-sz9bs 1/1 Running 0 11m
fognotifier-7455c74c6-b7x9n 1/1 Running 0 11m
fognotifier-7455c74c6-n5fzd 1/1 Running 0 11m
fognotifier-7455c74c6-spqc4 1/1 Running 0 11m
fogthinghistory-7d6f88895-6tdg8 1/1 Running 0 11m
fogthinghistory-7d6f88895-d9klb 1/1 Running 0 11m
fogthinghistory-7d6f88895-dhp72 1/1 Running 0 11m
mqtt-broker-0 1/1 Running 0 11m
mqtt-broker-1 1/1 Running 0 11m
mqtt-broker-2 1/1 Running 0 11m
mqttwebhook-9b9d9fbf5-4rzh9 1/1 Running 0 11m
mqttwebhook-9b9d9fbf5-j7lv9 1/1 Running 0 11m
mqttwebhook-9b9d9fbf5-qvqqb 1/1 Running 0 11m
nginx-f6499fd78-8xw6p 1/1 Running 0 11m
nginx-f6499fd78-phnss 1/1 Running 0 11m
nginx-f6499fd78-v2vjf 1/1 Running 0 11m
rabbitmq-server-0 1/1 Running 0 11m
rabbitmq-server-1 1/1 Running 0 11m
rabbitmq-server-2 1/1 Running 0 11m
若 pod 运行状态长时间不能转为Running
,请通过以下命令定位问题:
- kubectl describe pod <pod 名称>-n fogcloud # 查看 pod 的详细信息,其中 Events 事件可以查看到 pod 被创建的详细过程
- kubectl logs -f <pod 名称>-n fogcloud #查看 pod 中的程序打印到标准输出的日志
# 4.2 查看负载均衡状态
# 4.3 登录 fogcloud
您可以通过 fogcloud 前端域名登录到 fogcloud 控制台:
# 5 更新 fogcloud 服务
您可以在获取到最新的容器镜像后,替换掉helm values.yaml
里的镜像版本,例如:
升级 fogcloud-core 服务至 v5.2.x 版本,您可以修改values.yaml
里面的fogcloud.imageTag
为v5.2.x;
升级 fogcloud-web 服务至 v5.2.x 版本,您可以修改values.yaml
里面的fogcloudWeb.imageTag
为v5.2.x;
然后运行以下命令即可:
root@mxchip-fogcloud-prod1:~# helm upgrade fogcloud -n fogcloud .
# 6 卸载/重新安装服务
使用 helm uninstall 卸载服务时,应用数据会保留;
请勿直接删除 fogcloud 使用的命名空间!
root@mxchip-fogcloud-prod1:~# helm uninstall fogcloud -n fogcloud
root@mxchip-fogcloud-prod1:~# helm uninstall fission -n fission
root@mxchip-fogcloud-prod1:~# kubectl delete -f ./fogcloud/operator/rabbitmq-cluster-operator.yaml
重新安装服务时,只需要运行以下命令即可:
root@mxchip-fogcloud-prod1:~# helm install fogcloud -n fogcloud .