# 从零开始使用 helm 部署 fogcloud

# 1. 部署前准备

硬件说明:

  • ubuntu云服务器 ×3(为方便下文以 node1,node2,node3 命名),本机 mac 笔记本 ×1;

  • 云服务器能连接外网,并位于同一局域网;

  • 本机能正常访问云服务器;

  • 假设您的云服务器公网 ip 地址和局域网 ip 地址为:(注意:请将以下 ip 替换为您云服务器的真实 ip,以下只是示例)

node1: 公网 ip: x.x.x.1;局域网 ip: 192.168.10.1

node2: 公网 ip: x.x.x.2;局域网 ip: 192.168.10.2

node3: 公网 ip: x.x.x.3;局域网 ip: 192.168.10.3

  • 云服务器开放以下端口:

端口

描述

备注

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 服务

用于服务端消息订阅

# 1.1 安装 k3s 集群

更详细的安装教程请参考官方文档 (opens new window)

  1. node1上新增文件/etc/rancher/k3s/config.yaml作为 k3s 启动的配置文件,文件内 容:
service-node-port-range: "1000-40000"
tls-san:
  - "192.168.10.1"
  - "192.168.10.2"
  - "192.168.10.3"
  - "x.x.x.1"
kubelet-arg:
  - "container-log-max-files=10"

注意:以将上配置文件中的ip请替换为您云服务器的真实ip

  1. node1上运行脚本:
curl -sfL https://get.k3s.io | sh -
  1. 从 node1 的 /var/lib/rancher/k3s/server/node-token获取mynodetoken

  2. node2, node3上分别运行脚本:

curl -sfL https://get.k3s.io | K3S_URL=https://192.168.10.1:6443 K3S_TOKEN=${mynodetoken} sh -
  1. 本机安装kubectl,并配置kubeconfigkubeconfig位于node1/etc/rancher/k3s/k3s.yaml ;kubeconfig 配置方式参考官方教程 (opens new window)

  2. 验证安装: 在本机运行命令:kubectl get nodes,若出现上述三个云服务器节点则安装正确;

# 1.2 本机安装 helm v3

安装命令:

brew install helm

验证安装:

helm version

# 2 安装

# 2.1 获取 chart

在本机运行命令:

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

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

# 2.2 配置说明

# 2.2.1 证书配置

假设我们为 fogcloud 服务申请了如下域名并拥有对应证书文件:

服务

域名

证书文件

前端服务

app.example.io

web.crt,web.key

后端服务

api.example.io

api.crt,api.key

mqtt 服务

mqtt.example.io

mqtt.crt,mqtt.key

amqp 服务

amqp.example.io

amqp.crt,amqp.key

  1. 使用 web.crt,web.key 替换fogcloud/configs/cert/webAdmin目录下原有证书文件

  2. 使用 api.crt,api.key 替换fogcloud/configs/cert/api目录下原有证书文件

  3. 使用 mqtt.crt,mqtt.key 替换fogcloud/configs/cert/mqtt目录下原有证书文件

  4. 使用 amqp.crt,amqp.key 替换fogcloud/configs/cert/amqp目录下原有证书文件

注:证书和密钥文件名可以随意更改,但后缀名需要改为.crt.key

# 2.2.1 helm values 配置

配置文件位于fogcloud/values.yaml 我们使用 Ingress 方式暴露服务,正式环境推荐使用 LoadBalancer; 更改配置文件的配置项:

配置项

说明

environment

配置文件的环境

production

k8sApiServer

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

获取

https://node1:6443

fissionEnabled

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

true

expose.type

如何暴露服务:Ingress

ClusterIP

NodePort

LoadBalancer

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

Ingress

expose.hosts.api

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

api.example.io

expose.hosts.mqtt

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

mqtt.example.io:8084

expose.tls.enabled

是否启用 ingress tls

true

expose.tls.cert.api.certSource

api 服务证书的来源:file

, auto

none

;1)file

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

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

:不为服务入口配置证书

file

expose.tls.cert.webAdmin.certSource

web 服务证书的来源:file

, auto

none

;1)file

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

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

:不为服务入口配置证书

file

expose.Ingress.hosts.webAdmin

web 服务域名,用于 ingress 路由

app.example.io

expose.Ingress.hosts.api

api 服务域名,用于 ingress 路由

api.example.io

mqttBroker.internal.tls.enabled

mqtt 应用是否启用 tls

true

# 2.2.2 fogcloud 应用配置

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

更改配置文件的配置项:

配置项

说明

HOST

前端服务域名

app.example.io

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

# 2.3   安装服务

export NAMESPACE_NAME=fogcloud
export RELEASE_NAME=fogcloud
kubectl create namespace ${NAMESPACE_NAME}
kubectl create namespace fission
kubectl apply -f ./fogcloud/operator/rabbitmq-cluster-operator.yaml
helm install fission -n fission ./fission-all
helm install ${RELEASE_NAME} -n ${NAMESPACE_NAME} ./fogcloud

# 2.4 升级服务

您可以在获取到最新的容器镜像后,替换掉 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

然后运行以下命令即可:

helm upgrade ${RELEASE_NAME} -n ${NAMESPACE_NAME} ./fogcloud

# 2.5 卸载/重新安装服务

使用 helm uninstall 卸载服务时,应用数据会保留;

请勿直接删除 fogcloud 使用的命名空间!

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

重新安装服务时,只需要运行以下命令即可:

helm install ${RELEASE_NAME} -n ${NAMESPACE_NAME} ./fogcloud

更新时间: 2023/6/20 下午4:10:29