# fogcloud 生产部署文档

本示例教程介绍了如何在阿里云上部署 fogcloud 生产环境,若您打算将 fogcloud 部署于其他公有云平台或本地服务器,也可以参考本教程,并结合其他公有云平台的文档进行部署,部署流程基本相同。

# 1 部署准备

请提前申请好您的阿里云账号,阿里云申请地址:https://www.aliyun.com/ (opens new window)

本示例教程中省略了阿里云服务资源创建的过程,您可能需要参考阿里云官方帮助文档进行资源的购买或开通。

提醒:在您开始部署前应当先了解所需开通的云服务的资费情况,您可以在相关资源的定价页中进行查询。

# 1.1 创建服务器

本教程中的 fogcloud 运行于 k3s,您至少需要创建三台 ECS 实例,用来部署 k3s 集群,其中一台为master控制节点,两台为node工作节点,以下为推荐的服务器最低配置。

节点类型

硬件配置

服务器名称

内网 IP

master

CPU:4 核

内存:8G

硬盘:40G

mxchip-fogcloud-prod1

192.168.10.1

node1

CPU:2 核

内存:4G

硬盘:40G

mxchip-fogcloud-k8s-prod1

192.168.20.1

node2

CPU:2 核

内存:4G

硬盘:40G

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

网络要求:需要打通与服务器的网络(通过数据库的 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 <<EOF
service-node-port-range: "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

node1node2上分别运行脚本:

注意:将${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:

    1. 请根据您自己的操作系统并参照官方教程 (opens new window)安装 kubectl 工具。
    2. 请按照官方教程 (opens new window)配置kubeconfigkubeconfig位于master/etc/rancher/k3s/k3s.yaml,通常情况下,您需要将该文件重命名为config,并放置于$HOME/.kube目录下。
    3. 请将$HOME/.kube/config中的server: https://192.168.10.1:6443,修改为server: https://<master公网IP>:6443,此处请注意在安全组中开放6443/TCP端口。
    4. 验证安装:在本机运行命令:kubectl get nodes,若出现上述三个云服务器节点则安装正确。
    5. 请根据自己的操作系统并参考官方教程 (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

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:~# helm pull fogcloud-charts/fogcloud --untar

运行成功后,会在本机当前目录生成两个文件夹:fogcloudfission-all

# 3.2 配置说明

说明:fission为云函数功能,若不使用,以下与 fission 相关的功能可以不安装

# 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

请注意以下两点:

  • 如果PostgreSQLmongodb使用的是云数据库,建议注释values.yaml文件的postgresmongodb两段,并且删除fogcloud/templates/目录下,postgresmongodb两个目录
  • 部分resources资源限制可先注释,或按服务器资源大小结合实际业务用量设置

更改配置文件的配置项:

配置项

说明

environment

配置文件的环境

production

k8sApiServer

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

https://192.168.10.1:6443

fissionEnabled

是否启用了云函数功能;若启用该功能,需要将 kubeconfig 文件放入fogcloud-charts/config/kubeconfig目录,文件名没有要求。(注意 kubeconfig 里面服务器地址要改为可用域名)

false

expose.type

如何暴露服务:IngressClusterIPNodePortLoadBalancer,其他值将被忽略,服务的创建将被跳过。

LoadBalancer

expose.hosts.api

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

api-fog.dev.mxchip.com.cn

expose.hosts.mqtt

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

mqtt-fog.dev.mxchip.com.cn:8084

expose.tls.enabled

是否启用 ingress tls

true

expose.tls.cert.api.certSource

api 服务证书的来源:file, autonone

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

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

3)none:不为服务入口配置证书

file

expose.tls.cert.webAdmin.certSource

web 服务证书的来源:file, autonone

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

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

3)none:不为服务入口配置证书

file

expose.Ingress.hosts.webAdmin

web 服务域名,用于 ingress 路由

app-fog.dev.mxchip.com.cn

expose.Ingress.hosts.api

api 服务域名,用于 ingress 路由

api-fog.dev.mxchip.com.cn

mqttBroker.internal.tls.enabled

mqtt 应用是否启用 tls

true

提供本次部署示例修改后的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: 8000  
      api:
        httpPort: 8001  

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: latest
  replicas: 3
  strategy: 
    type: RollingUpdate # enum: Recreate, RollingUpdate
    rollingUpdate:
      maxSurge: 25%
      maxUnavailable: 25%
  resources:
    #    limits:
    #      cpu: "0.5"
    #      memory: "512Mi"
    #    requests:
    #      cpu: "0.01"
    #      memory: "64Mi"  

fogcloudWeb:
  image: registry.cn-shanghai.aliyuncs.com/fogcloud/public-fogcloud-web
  imageTag: latest
  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: "0.1"
    #      memory: "64Mi"
    #    requests:
    #      cpu: "0.01"
    #      memory: "32Mi"

faasbuilder:
  image: registry.cn-shanghai.aliyuncs.com/fogcloud/public-faas-builder
  imageTag: latest
  createKubeconfigWithFile: false
  replicas: 1
  resources:
    #    limits:
    #      cpu: "0.1"
    #      memory: "64Mi"
    #    requests:
    #      cpu: "0.01"
    #      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: 2
  resources:
    #    limits:
    #      cpu: "0.1"
    #      memory: "64Mi"
    #    requests:
    #      cpu: "0.01"
    #      memory: "32Mi"       
  strategy: 
    type: RollingUpdate # enum: Recreate, RollingUpdate
    rollingUpdate:
      maxSurge: 25%
      maxUnavailable: 25%    

nginx:
  image: nginx
  imageTag: 1.21
  replicas: 3
  resources:
    #    limits:
    #    cpu: "0.1"
    #      memory: "64Mi"
    #    requests:
    #      cpu: "0.01"
    #      memory: "32Mi"        

mqttBroker:
  type: internal
  internal:
    type: emqx
    image: emqx/emqx
    imageTag: 4.2.8
    defaultUsername: fogcloud
    defaultPassword: "4Jy!YC7bdpsjU*6k"
    dashboardUsername: admin
    dashboardPassword: "%PWpPb*qhB*g82dY"
    persistence:
      keep: true
      pvcExisted: false
      pvc: emqx-pvc
      storageClassName: local-path
      storage: 1Gi      
    resources:
      #      limits:
      #        cpu: "1"
      #        memory: "512Mi"
      #      requests:
      #        cpu: "0.1"
      #        memory: "128Mi"    
    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:
      pvcExisted: false
      pvc: rabbitmq-pvc
      storageClassName: local-path
      storage: 5Gi  
    resources:
      #      limits:
      #        cpu: "1"
      #        memory: "512Mi"
      #      requests:
      #        cpu: "0.1"
      #        memory: "128Mi"  
    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: true
    image: bitnami/etcd
    imageTag: 3.5.1
    persistence:
      keep: true
      pvcExisted: false
      pvc: etcd-pvc
      storageClassName: local-path
      storage: 1Gi    
    resources:
      limits:
        cpu: "0.1"
        memory: "256Mi"
      requests:
        cpu: "0.01"
        memory: "64Mi"    
    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: 
    enabled: true
    image: minio/minio
    imageTag: latest
    persistence:
      keep: true
      pvcExisted: false
      pvc: minio-pvc
      storageClassName: local-path
      storage: 10Gi     
    resources:
      limits:
        cpu: "0.1"
        memory: "256Mi"
      requests:
        cpu: "0.01"
        memory: "64Mi"   
    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"

# 3.2.3 fogcloud 应用配置

  • fogcloud-core 应用配置文件修改

fogcloud-core 应用配置文件位于fogcloud/configs/fogcloud-core/fogcloud.example.yaml

更改配置文件的配置项:

配置项

说明

HOST

前端服务域名

app-fog.dev.mxchip.com.cn

ENABLE_TLS

是否启用 tls,用于云函数触发 url 和部分 oss 资源下载

true

POSTGRES_HOST

postgres 域名

POSTGRES_PORT

postgres 端口

POSTGRES_USER

postgres 用户名

POSTGRES_PASSWORD

postgres 密码

POSTGRES_DBNAME

postgres 数据库名

MONGO_URI

mongo 数据库 uri

生产环境配置请在production段下添加数据库信息,以下内容请按实际情况填写:

...
production:
  <<: *development
  NAME: fogcloud
  HOST: app-fog.dev.mxchip.com.cn
  FAAS_STORE_ENDPOINT: https://fogcloud.io
  # 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://fogcloud:aA123456@dds-uf6a96d35090c0141.mongodb.rds.aliyuncs.com:3717,dds-uf6a96d35090c0142.mongodb.rds.aliyuncs.com:3717/fogcloud?replicaSet=mgset-72857898
  MONGO_DBNAME: fogcloud
  • 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

# 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
etcd1                                1/1     Running   0          11m
nginx-66c6c87cb8-pqwk8               1/1     Running   0          11m
redis                                1/1     Running   0          11m
fogcron-scheduler-568cddfcdd-s5nth   1/1     Running   0          11m
fogcloud-core-76f57b985-89st9        1/1     Running   0          11m
fogcloud-web-767c7f55f6-hdz6p        1/1     Running   0          11m
mqtt-broker-0                        1/1     Running   0          11m
fogcloud-web-767c7f55f6-6hkzx        1/1     Running   0          11m
nginx-66c6c87cb8-gd7fv               1/1     Running   0          11m
fogcron-scheduler-568cddfcdd-f8l7x   1/1     Running   0          11m
fogcloud-web-767c7f55f6-6n7wf        1/1     Running   0          11m
nginx-66c6c87cb8-8fm5v               1/1     Running   0          11m
minio                                1/1     Running   0          11m
mqtt-broker-1                        1/1     Running   0          11m
mqtt-broker-2                        1/1     Running   0          11m
rabbitmq-server-0                    1/1     Running   0          11m
rabbitmq-server-2                    1/1     Running   0          11m
rabbitmq-server-1                    1/1     Running   0          11m
fogcloud-core-76f57b985-5vn7z        1/1     Running   0          11m
fogcloud-core-76f57b985-5whp9        1/1     Running   0          11m
faasbuilder-6f56458c56-vd9tm         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 服务至 v.4.19.x 版本,您可以修改values.yaml里面的fogcloud.imageTagv4.19.x

升级 fogcloud-web 服务至 v4.19.x 版本,您可以修改values.yaml里面的fogcloudWeb.imageTagv4.19.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 .
更新时间: 2024/2/19 12:23:45