Baetyl-cloud 安装


准备工作

  • 安装k8s,关于 k8s 介绍请参考 kubernetes 官网

  • 请先准备好数据库,并依次导入scripts/sql/tables.sql和scripts/sql/data.sql中的数据。

  • 使用k8s或helm安装时,由于采用nodeport映射,请修改scripts/sql/data.sql中baetyl_property表中 sync和init address中的端口号为30005和30003。

  • 如需编译本地镜像,可以直接在项目根目录运行docker build -t baetyl-cloud:local-build -f Dockerfile-local .,并确保镜像tag与后续helm以及k8s安装的tag一致。具体编译流程和方法请参照编译章节。

声明

  • 撰写本文时所用 k8s 相关信息如下:

// kubectl version
Client Version: version.Info{Major:"1", Minor:"17", GitVersion:"v1.17.3", GitCommit:"06ad960bfd03b39c8310aaf92d1e7c12ce618213", GitTreeState:"clean", BuildDate:"2020-02-11T18:14:22Z", GoVersion:"go1.13.6", Compiler:"gc", Platform:"darwin/amd64"}
Server Version: version.Info{Major:"1", Minor:"15", GitVersion:"v1.15.5", GitCommit:"20c265fef0741dd71a66480e35bd69f18351daea", GitTreeState:"clean", BuildDate:"2019-10-15T19:07:57Z", GoVersion:"go1.12.10", Compiler:"gc", Platform:"linux/amd64"}
  • 撰写本文使用 baetyl-cloud 版本信息如下:

// git log
commit 94728708cd2b775a124f6ed083ee3ad2779621e5 (HEAD -> master)
Author: hannatao <413024870@qq.com>
Date:   Thu Jun 16 15:05:54 2022 +0800

    Update Readme.md

因为 baetyl-cloud 代码在快速迭代,最新的代码可能无法做到实时适配。建议在下载 baetyl-cloud 代码后需要切换到此版本:

git reset --hard 94728708cd

另外本文会定期更新来适配最新的 baetyl-cloud 代码。


Helm 快速安装

本文支持使用 helm v2/v3 版本进行安装,测试时相关版本信息如下:

// helm v3: helm version
version.BuildInfo{Version:"v3.2.3", GitCommit:"8f832046e258e2cb800894579b1b3b50c2d83492", GitTreeState:"clean", GoVersion:"go1.13.12"}

// helm v2: helm version
Client: &version.Version{SemVer:"v2.16.9", GitCommit:"8ad7037828e5a0fca1009dabe290130da6368e39", GitTreeState:"clean"}
Server: &version.Version{SemVer:"v2.16.9", GitCommit:"8ad7037828e5a0fca1009dabe290130da6368e39", GitTreeState:"clean"}

关于 helm 的安装,可以参考 helm 安装链接

1. 初始化数据库

mysql / mariadb数据库初始化数据如下:

  • 创建 baetyl-cloud 数据库及表,具体 sql 语句见:scripts/sql/tables.sql

  • 初始化表数据,数据相关 sql 语句见:scripts/sql/data.sql

    # 注意修改 baetyl_property 中 sync-server-address 和 init-server-address 为实际的服务器地址:
    # 比如服务部署在本机,则地址可配置如下:
    # sync-server-address : https://0.0.0.0:30005
    # init-server-address : https://0.0.0.0:30003
    # 若服务部署在非本机,请将IP更改为实际的服务器IP地址
    
  • 根据自己数据库连接配置情况,修改scripts/charts/baetyl-cloud/conf/cloud.yml中database的连接配置信息。

2. 安装 baetyl-cloud

首先需要手动导入 crd:

# k8s版本为v1.16或更高版本 
# k3s版本为v1.17.4或更高版本执行
kubectl apply -f ./scripts/charts/baetyl-cloud/apply/
# k8s版本小于v1.16
# k3s版本小于v1.17.4
kubectl apply -f ./scripts/charts/baetyl-cloud/apply_v1beta1/

对于 helm v3,直接进入 baetyl-cloud 项目所在目录,执行如下命令。

# helm v3
helm install baetyl-cloud ./scripts/charts/baetyl-cloud/

对于 helm v2, 在上述目录下用户需要额外做些操作:

  • 将 ./scripts/charts/baetyl-cloud/Chart.yaml 中 apiVersion 版本从 v2 修改为 v1 并保存,如下所示:

apiVersion: v1
name: baetyl-cloud
description: A Helm chart for Kubernetes

...
  • helm v2 安装 baetyl-cloud:

// helm v2
helm install --name baetyl-cloud ./scripts/charts/baetyl-cloud/

接下来需要确认 baetyl-cloud 处于 Running 状态,也可查看日志是否报错。

kubectl get pod
# NAME                            READY   STATUS    RESTARTS   AGE
# baetyl-cloud-57cd9597bd-z62kb   1/1     Running   0          97s

kubectl logs -f baetyl-cloud-57cd9597bd-z62kb

成功后可通过 http://0.0.0.0:30004 操作 baetyl-cloud API。

2. 安装边缘节点

调用 RESTful API 创建节点。

curl -d "{\"name\":\"demo-node\"}" -H "Content-Type: application/json" -X POST http://0.0.0.0:30004/v1/nodes
# {"namespace":"baetyl-cloud","name":"demo-node","version":"1931564","createTime":"2020-07-22T06:25:05Z","labels":{"baetyl-node-name":"demo-node"},"ready":false}

获取边缘节点的在线安装脚本。

curl http://0.0.0.0:30004/v1/nodes/demo-node/init
# {"cmd":"curl -skfL 'https://0.0.0.0:30003/v1/active/setup.sh?token=f6d21baa9b7b2265223a333630302c226b223a226e6f6465222c226e223a2264656d6f2d6e6f6465222c226e73223a2262616574796c2d636c6f7564222c227473223a313539353430323132367d' -osetup.sh && sh setup.sh"}

在 baetyl-cloud 部署地机器上执行安装脚本.

curl -skfL 'https://0.0.0.0:30003/v1/active/setup.sh?token=f6d21baa9b7b2265223a333630302c226b223a226e6f6465222c226e223a2264656d6f2d6e6f6465222c226e73223a2262616574796c2d636c6f7564222c227473223a313539353430323132367d' -osetup.sh && sh setup.sh

注意:如果需要在 baetyl-cloud 部署地机器以外的设备上安装边缘节点,请修改数据库将 baetyl_property 中 sync-server-address 和 init-server-address 修改成真实的地址。

查看边缘节点的状态,最终会有两个边缘服务处于 Running 状态,也可调用云端 RESTful API 查看边缘节点状态,可以看到边缘节点已经在线(”ready”:true)。

kubectl get pod -A
# NAMESPACE            NAME                                      READY   STATUS    RESTARTS   AGE
# baetyl-edge-system   baetyl-core-8668765797-4kt7r              1/1     Running   0          108s
# baetyl-edge-system   baetyl-init-cbc59995-z8sd8                1/1     Running   0          114s
# baetyl-edge-system   baetyl-broker-79cc99848c-ht6lq            1/1     Running   0          100s

curl http://0.0.0.0:30004/v1/nodes/demo-node
# {"namespace":"baetyl-cloud","name":"demo-node","version":"1939112",...,"report":{"time":"2020-07-22T07:25:27.495362661Z","sysapps":...,"node":...,"nodestats":...,"ready":true}

3. 卸载baetyl-cloud

helm delete baetyl-cloud

K8s 安装

1. 初始化数据库

安装 mysql 数据库,并初始化数据如下:

  • 创建 baetyl-cloud 数据库及表,具体 sql 语句见:scripts/sql/tables.sql

  • 初始化表数据,数据相关 sql 语句见:scripts/sql/data.sql

    # 注意修改 baetyl_property 中 sync-server-address 和 init-server-address 为实际的服务器地址:
    # 比如服务部署在本机,则地址可配置如下:
    # sync-server-address : https://0.0.0.0:30005
    # init-server-address : https://0.0.0.0:30003
    # 若服务部署在非本机,请将IP更改为实际的服务器IP地址
    
  • 修改 baetyl-cloud-configmap.yml 中的数据库配置

2. 安装 baetyl-cloud

cd scripts/k8s
# k8s版本为v1.16或更高版本 
# k3s版本为v1.17.4或更高版本执行
kubectl apply -f ./apply/
# k8s版本小于v1.16
# k3s版本小于v1.17.4
kubectl apply -f ./apply_v1beta1/

执行成功之后,可以通过kubectl get pods |grep baetyl-cloud 命令看到程序运行情况,之后就可以通过 http://0.0.0.0:30004 操作 baetyl-cloud API。

3. 安装边缘节点

调用 RESTful API 创建节点。

curl -d "{\"name\":\"demo-node\"}" -H "Content-Type: application/json" -X POST http://0.0.0.0:30004/v1/nodes
# {"namespace":"baetyl-cloud","name":"demo-node","version":"1931564","createTime":"2020-07-22T06:25:05Z","labels":{"baetyl-node-name":"demo-node"},"ready":false}

获取边缘节点的在线安装脚本。

curl http://0.0.0.0:30004/v1/nodes/demo-node/init
# {"cmd":"curl -skfL 'https://0.0.0.0:30003/v1/active/setup.sh?token=f6d21baa9b7b2265223a333630302c226b223a226e6f6465222c226e223a2264656d6f2d6e6f6465222c226e73223a2262616574796c2d636c6f7564222c227473223a313539353430323132367d' -osetup.sh && sh setup.sh"}

在 baetyl-cloud 部署地机器上执行安装脚本.

curl -skfL 'https://0.0.0.0:30003/v1/active/setup.sh?token=f6d21baa9b7b2265223a333630302c226b223a226e6f6465222c226e223a2264656d6f2d6e6f6465222c226e73223a2262616574796c2d636c6f7564222c227473223a313539353430323132367d' -osetup.sh && sh setup.sh

注意:如果需要在 baetyl-cloud 部署地机器以外的设备上安装边缘节点,请修改数据库将 baetyl_property 中 sync-server-address 和 init-server-address 修改成真实的地址。

查看边缘节点的状态,最终会有两个边缘服务处于 Running 状态,也可调用云端 RESTful API 查看边缘节点状态,可以看到边缘节点已经在线(”ready”:true)。

kubectl get pod -A
# NAMESPACE            NAME                                      READY   STATUS    RESTARTS   AGE
# baetyl-edge-system   baetyl-core-8668765797-4kt7r              1/1     Running   0          108s
# baetyl-edge-system   baetyl-init-cbc59995-z8sd8                1/1     Running   0          114s
# baetyl-edge-system   baetyl-broker-79cc99848c-ht6lq            1/1     Running   0          100s

curl http://0.0.0.0:30004/v1/nodes/demo-node
# {"namespace":"baetyl-cloud","name":"demo-node","version":"1939112",...,"report":{"time":"2020-07-22T07:25:27.495362661Z","sysapps":...,"node":...,"nodestats":...,"ready":true}

4. 卸载baetyl-cloud

cd scripts/k8s
# k8s版本为v1.16或更高版本 
# k3s版本为v1.17.4或更高版本执行
kubectl delete -f ./apply/
# k8s版本小于v1.16
# k3s版本小于v1.17.4
kubectl delete -f ./apply_v1beta1/

进程安装

1.安装数据库

安装 mysql 数据库,并初始化数据如下:

  • 创建 baetyl-cloud 数据库及表,具体sql语句见:scripts/sql/tables.sql

  • 初始化表数据,数据相关 sql 语句见:scripts/sql/data.sql

    # 注意修改 baetyl_property 中 sync-server-address 和 init-server-address 为实际的服务器地址:
    # 比如服务部署在本机,则地址可配置如下:
    # sync-server-address : https://0.0.0.0:9005
    # init-server-address : https://0.0.0.0:9003
    # 若服务部署在非本机,请将IP更改为实际的服务器IP地址
    
  • 修改 native/conf/conf.yml 中的数据库配置

2. 源码编译

参考源码编译

3. 启动 baetyl-cloud

cd scripts/native
# 导入 k8s crd 资源
# k8s版本为v1.16或更高版本 
# k3s版本为v1.17.4或更高版本执行
kubectl apply -f ./apply/
# k8s版本小于v1.16
# k3s版本小于v1.17.4
kubectl apply -f ./apply_v1beta1/
# 执行如下命令,然后替换 conf/kubeconfig.yml 文件中的 example
kubectl config view --raw
# 然后执行如下命令:
nohup ../../output/baetyl-cloud -c ./conf/conf.yml > /dev/null &
# 执行成功后会返回成功建立的 baetyl-cloud 进程号

执行成功后可以通过 http://0.0.0.0:9004 操作 baetyl-cloud API。

4. 安装边缘节点

调用 RESTful API 创建节点。

curl -d "{\"name\":\"demo-node\"}" -H "Content-Type: application/json" -X POST http://0.0.0.0:9004/v1/nodes
# {"namespace":"baetyl-cloud","name":"demo-node","version":"1931564","createTime":"2020-07-22T06:25:05Z","labels":{"baetyl-node-name":"demo-node"},"ready":false}

获取边缘节点的在线安装脚本。

curl http://0.0.0.0:9004/v1/nodes/demo-node/init
# {"cmd":"curl -skfL 'https://0.0.0.0:9003/v1/active/setup.sh?token=f6d21baa9b7b2265223a333630302c226b223a226e6f6465222c226e223a2264656d6f2d6e6f6465222c226e73223a2262616574796c2d636c6f7564222c227473223a313539353430323132367d' -osetup.sh && sh setup.sh"}

在 baetyl-cloud 部署地机器上执行安装脚本.

curl -skfL 'https://0.0.0.0:9003/v1/active/setup.sh?token=f6d21baa9b7b2265223a333630302c226b223a226e6f6465222c226e223a2264656d6f2d6e6f6465222c226e73223a2262616574796c2d636c6f7564222c227473223a313539353430323132367d' -osetup.sh && sh setup.sh

注意:如果需要在 baetyl-cloud 部署地机器以外的设备上安装边缘节点,请修改数据库将 baetyl_property 中 sync-server-address 和 init-server-address 修改成真实的地址。

查看边缘节点的状态,最终会有两个边缘服务处于 Running 状态,也可调用云端 RESTful API 查看边缘节点状态,可以看到边缘节点已经在线(”ready”:true)。

kubectl get pod -A
# NAMESPACE            NAME                                      READY   STATUS    RESTARTS   AGE
# baetyl-edge-system   baetyl-core-8668765797-4kt7r              1/1     Running   0          108s
# baetyl-edge-system   baetyl-init-cbc59995-z8sd8                1/1     Running   0          114s
# baetyl-edge-system   baetyl-broker-79cc99848c-ht6lq            1/1     Running   0          100s

curl http://0.0.0.0:9004/v1/nodes/demo-node
# {"namespace":"baetyl-cloud","name":"demo-node","version":"1939112",...,"report":{"time":"2020-07-22T07:25:27.495362661Z","sysapps":...,"node":...,"nodestats":...,"ready":true}

5. 进程退出

# 根据创建成功时的进程号杀死进程:
sudo kill 进程号