9. 可信计算服务安装部署

9.1. 概述

数据要素流通平台基于k3s环境部署,提供了一键部署脚本和yaml文件,用户可以根据自己的需求,选择部署对应的服务, 可根据实际情况调整适配yaml文件。

9.2. 环境依赖

9.2.1. 硬件要求

配置 最低配置 推荐配置
CPU 1.5GHz 2.4GHz
内存 16GB 64GB
核心 8核 16核
带宽 20Mb 40Mb

需要注意的是,可信计算的执行引擎在执行时,会使用一些CPU指令集,包括sse, avx等, 指令集检查方式如下:

# 以下命令如果返回值包含sse、avx等指令集,则说明支持  ~ cat /proc/cpuinfo  | grep sse
flags		: ...acpi mmx fxsr sse sse2 ss ht tm pbe syscall...

# 以下命令如果返回值包含avx2等指令集,则说明支持  ~ cat /proc/cpuinfo  | grep avx2
flags		: ... tsc_adjust bmi1 hle avx2 smep bmi2 erms invpcid rtm...

9.2.2. 软件依赖

名称 版本 描述 是否必须
docker 24+ 运行核心组件及服务
docker-compose v2.24.6+ 本地部署长安链服务
k3s v1.28.2+ 与 Kubernetes 集群进行交互和管理,管理核心组件及服务
helm v3.14.0+ 管理 Kubernetes 应用部署的包,管理服务任务

9.3. 基础环境安装

9.3.1. 安装docker

参考官网:https://docs.docker.com/engine/install/

安装完成后,执行以下命令进行验证:

  ~ docker version
Client:
 Version:           24.0.6-rd
 API version:       1.43
 Go version:        go1.20.7
 Git commit:        da4c87c
 Built:             Wed Sep  6 16:39:20 2023
 OS/Arch:           darwin/amd64
 Context:           desktop-linux

Server: Docker Desktop 4.27.1 (136059)
 Engine:
  Version:          25.0.2
  API version:      1.44 (minimum version 1.24)
  Go version:       go1.21.6
  Git commit:       fce6e0c
  Built:            Thu Feb  1 00:23:17 2024
  OS/Arch:          linux/amd64
  Experimental:     false
 containerd:
  Version:          1.6.28
  GitCommit:        ae07eda36dd25f8a1b98dfbf587313b99c0190bb
 runc:
  Version:          1.1.12
  GitCommit:        v1.1.12-0-g51d5e94
 docker-init:
  Version:          0.19.0
  GitCommit:        de40ad0

9.3.2. k3s集群部署

注:安装K3S前需要先完成Docker安装

9.3.2.1. 使用脚本安装

下面以 Linux为例进行安装,

使用K3S安装脚本进行安装,具体步骤如下:

#1. 下载K3S安装脚本和依赖包  ~  wget  -c "https://get.k3s.io" -O install.sh
➜  ~  wget  -c "https://github.com/k3s-io/k3s/releases/download/v1.28.2%2Bk3s1/k3s"  ~  wget  -c "https://github.com/k3s-io/k3s/releases/download/v1.28.2%2Bk3s1/k3s-airgap-images-amd64.tar.gz"  ~  wget  -c "https://github.com/k3s-io/k3s/releases/download/v1.28.2%2Bk3s1/k3s-images.txt"  ~  wget  -c "https://github.com/k3s-io/k3s/releases/download/v1.28.2%2Bk3s1/sha256sum-amd64.txt"

# 2. 设置K3S配置文件  ~ mkdir -p /etc/rancher/k3s/
➜  ~ tee /etc/rancher/k3s/config.yaml <<-'EOF'
docker: true
tls-san: k3s.domain.com
service-node-port-range: 30000-40000
kubelet-arg: system-reserved=cpu=500m,memory=512Mi,ephemeral-storage=1024Mi,pid=100
kubelet-arg: kube-reserved=cpu=500m,memory=512Mi,ephemeral-storage=1024Mi,pid=100
kubelet-arg: eviction-hard=memory.available<1024Mi,nodefs.available<10%,imagefs.available<10%
kubelet-arg: eviction-minimum-reclaim=memory.available=500Mi,nodefs.available=500Mi,imagefs.available=500Mi
EOF

# 3. 导入K3S镜像,并执行安装脚本  ~ docker load -i k3s-airgap-images-amd64.tar.gz
➜  ~ cp -f k3s /usr/local/bin/
➜  ~ chmod 700 /usr/local/bin/k3s
➜  ~ chmod 700 install.sh
➜  ~ INSTALL_K3S_SKIP_DOWNLOAD=true  ./install.sh

安装完成后,执行以下命令进行验证:

  ~ k3s -v
k3s version v1.21.4+k3s- ()
go version go1.16.6

➜  ~ kubectl get ns
NAME              STATUS   AGE
default           Active   420d
kube-system       Active   420d
kube-public       Active   420d

9.3.2.2. 使用Rancher-Desktop安装

除命令行安装k3s外,还可使用Rancher Desktop工具进行可视化安装。
Rancher Desktop官网为:https://rancherdesktop.io/
安装步骤:https://docs.rancherdesktop.io/getting-started/installation/#linux

9.3.3. helm安装

Helm是Kubernetes的包管理工具,可以方便的在Kubernetes集群中部署应用。
Helm安装官网:https://helm.sh/docs/intro/install/

安装Rancher后,默认会安装helm,如果未安装可以通过脚本单独安装,步骤如下:

  ~ curl -fsSL -o get_helm.sh https://raw.githubusercontent.com/helm/helm/main/scripts/get-helm-3
➜  ~ chmod 700 get_helm.sh
➜  ~ ./get_helm.sh

安装完成后,使用以下命令进行验证:

  ~ helm version
version.BuildInfo{Version:"v3.13.1", GitCommit:"3547a4b5bf5edb5478ce352e18858d8a552a4110", GitTreeState:"clean", GoVersion:"go1.20.8"}

9.4. 数据要素流通平台部署

9.4.1. 获取部署脚本

# 1. 获取数据要素流通平台部署脚本, 并切换到对应版本  ~ git clone -b v1.1.0 https://git.chainweaver.org.cn/chainweaver/mira/mira-deployment.git

9.4.2. 部署长安链和智能合约

9.4.2.1. 部署长安链

数据要素流通平台依赖长安链(需要启用docker go VM),需要先部署长安链。如果已经部署长安链,可以跳过该步骤。

9.4.2.2. 安装智能合约

数据要素流通平台智能合约包括数据产品登记合约与隐私计算合约两部分:

  • 数据产品登记合约: ida合约

  • 隐私计算合约: mira合约

智能合约的部署方式与链的管理方式有关,一般有两种方式:

  • 通过管控台管理的链:合约可以通过管控台直接部署或升级

  • 无管控台管理的链:合约需要通过命令行部署或升级

注:多个参与方分别部署数据要素流通平台时,合约也仅需部署一次,无需每个参与方分别部署。

下面以命令行部署为例:

## 1. 使用mira-deployment进行合约部署
```shell
# 1. 进入合约部署目录 cd mira-deployment/contract

# 2. 查看合约压缩包和部署脚本 tree -L 2
.
├── contracts # mira和ida合约文件   ├── contract_ida.7z
│   └── contract_mira.7z
├── crypto-config # 长安链用户证书,需要根据实际情况进行替换(下面为cert模式链的证书列表)   ├── wx-org1.chainmaker.org
│   ├── wx-org2.chainmaker.org
│   ├── wx-org3.chainmaker.org
│   └── wx-org4.chainmaker.org
├── deploy.sh # 部署合约脚本
├── scripts # 部署合约脚本、配置文件(支持cert模式和pk模式)   ├── cmc
│   ├── create_contract.sh
│   ├── create_contract_pk.sh
│   ├── sdk_config.yml
│   ├── sdk_config_pk.yml
│   ├── upgrade_contract.sh
│   └── upgrade_contract_pk.sh
└── upgrade.sh # 升级合约脚本

# 3. 执行脚本部署智能合约
# 支持cert模式和pk模式, 以cert模式为例 ./deploy.sh cert

# 如果是升级合约,执行upgrade.sh脚本。
# 支持cert模式和pk模式, 同时支持升级ida、mira合约以及同时升级ida和mira合约
# 以升级ida和mira合约为例:
# ida:v2.0.0表示ida合约升级到v2.0.0版本
# mira:v1.1.0表示mira合约升级到v1.1.0版本 ./upgrade.sh cert ida:v2.0.0 mira:v1.1.0

9.4.3. 部署公共服务和ida组件

mira-deployment提供了公共服务和ida组件的部署脚本,用户可以根据实际情况进行部署,默认使用版本为v2.0.0

# 1. 进入安装目录 cd mira-deployment/ida

# 2. 查看部署脚本 tree -L 2
.
├── ida-deployment # 执行部署脚本自动克隆   ├── helm
│   └── k3s
├── install.sh # 公共组件和IDA部署脚本
└── uninstall.sh # 公共组件和IDA卸载脚本

# 3. 修改install.sh脚本中的配置信息,根据实际情况修改。如:
# dataPath=/home/data/630/data # 数据存储路径,根据实际情况修改
# --set global.circulation.nodePort=31090 # 前端页面访问端口

# 4. 执行安装脚本 sh install.sh

安装完成后,执行以下命令进行验证:

# 查看public命名空间下的pod,如果以下服务正常运行,说明公共服务组件部署成功  ~ kubectl get pod -n public
NAME                                       READY   STATUS    RESTARTS   AGE
mysql-8c648b66b-4clz5                      1/1     Running   0          3m18s
redis-797cf49c8c-wkgvw                     1/1     Running   0          3m18s
key-ff87f646f-288qc                        1/1     Running   0          3m18s
chain-f5f7f896c-2b2nl                      1/1     Running   0          3m18s
minio-7cf7bfc7c-42ljh                      1/1     Running   0          55s
chartmuseum-chartmuseum-7d6d6887cf-44pnp   1/1     Running   0          55s

# 查看ida命名空间下的pod,如果以下服务正常运行,说明ida组件部署成功  ~ kubectl get pod -n ida
NAME                             READY   STATUS    RESTARTS   AGE
circulation-6c6cffffcc-nvkdl     1/1     Running   0          3m19s
gateway-6bd8cf8c9b-7gwsb         1/1     Running   0          3m19s
certification-64d8885b57-8c9qj   1/1     Running   0          3m19s
registration-6db56bccc5-bxrp7    1/1     Running   0          3m19s

9.5. 部署mira组件

mira组件包含所有mira可信计算服务相关服务或组件,在使用mira-deployment部署脚本进行mira安装之前,需要配置Mira服务。

主要配置文件如下:

  • mira/mira/values.yaml: 服务端口、数据库、对象存储等配置

  • mira/mira/custom-values.yaml: 镜像版本、集群地址等配置

9.5.1. 创建数据库

在部署Mira服务前,首先需要创建mira使用的数据库(下面以mysql为例):

# 需要根据mysql的命名空间和密码进行修改,默认如下
NAMESPACE=public
MYSQL_PASSWORD=root123456

# 创建mysql数据库
kubectl exec -it $(kubectl get pods -n $NAMESPACE -l deployment=mysql -o jsonpath='{.items[0].metadata.name}') -n $NAMESPACE \
-- mysql -uroot -p${MYSQL_PASSWORD} -e "CREATE DATABASE mira;"

9.5.2. 对象存储配置

隐私计算结果会存储到本地minio,在前端下载结果时,需要访问本地minio,因此需要配置minio的访问地址如下:

# 1. 进入mira安装目录 cd mira-deployment/mira

# 2. 修改mira配置,并配置minio地址, vim mira/mira/values.yaml
  # minio配置
  minio:
    host: "192.168.0.91" # minio 服务地址, 根据实际情况修改!
    port: 31000 # minio 服务端口,默认为31000
    access_key: minio
    secret_key: minio123
    bucket_name: result

9.5.3. 调度服务配置

mira-scheduler调度服务需要访问集群,以便于拉起pod执行隐私计算任务,因此需要配置集群访问地址。如下:

# 1. 进入mira安装目录 cd mira-deployment/mira

# 2. 修改mira配置,并配置k3s集群地址 vim mira/mira/custom-values.yaml
# k3s配置项需要从宿主机 ~/.kube/config或者/etc/rancher/config获取, 注:k3s中server地址192.168.0.91需要替换为实际集群地址
# 然后将custom-values.yaml默认的k3s.config进行全部替换
k3s:
  config: |-
    apiVersion: v1
    clusters:
    - cluster:
        certificate-authority-data: LS0tLS1CRUdJTi0K...
        server: https://192.168.0.91:6443
      name: default
    contexts:
    - context:
        cluster: default
        user: default
      name: default
    current-context: default
    kind: Config
    preferences: {}
    users:
    - name: default
      user:
        client-certificate-data: LS0tLS1CRUdJTiBFQyBQUklWQVRFIEtFWS...
        client-key-data: LS0tLS1CRUdJTiBFQyBQUklWQVRFIEtFWS...

Mira组件使用helm进行部署,部署步骤如下:

# 1. 进入mira安装目录 cd mira-deployment/mira

# 2. 查看部署文件 tree -L 2
.
├── engine # 执行引擎算子对应的chart包   └── exec
├── install.sh # mira组件安装脚本
├── minio # minio对象存储服务(可选)   ├── Chart.yaml
│   ├── charts
│   └── values.yaml
├── mira # mira服务对应的chart包   ├── Chart.yaml
│   ├── charts
│   ├── custom-Values.yaml
│   ├── templates
│   └── values.yaml
├── push_charts.sh # 执行引擎算子chart包上传脚本
└── uninstall.sh # mira组件卸载脚本

# 3. 执行安装脚本 ./install.sh # 使用helm安装mira组件安装

安装完成后,执行以下命令进行验证:

# 查看mira命名空间下的pod,如果以下服务正常运行,说明mira组件部署成功  ~ kubectl get pod -n mira
NAME                                     READY   STATUS    RESTARTS       AGE
mira-job-service-b6fc4745-kmqgm          1/1     Running   1 (7d3h ago)   7d3h
mira-ida-access-service-b8b44cbd-xg26r   1/1     Running   0              30h
mira-scheduler-fb555d7cf-m92bp           1/1     Running   0              30h
mira-network-manager-58f75f459b-hwglf    1/1     Running   0              7h58m
mira-backend-service-59f8bb6dd5-58qtf    1/1     Running   0              6m16s
➜  ~

9.6. 服务列表

必选组件安装成功后,集群中会部署以下服务或组件, 其中镜像registry为hub-dev.cnbn.org.cn/chainweaver:

服务/组件名称 说明 命名空间 部署类型 Docker镜像 K8S Service名称 dataPath / logPath
mysql 公共服务-存储 public Deployment mysql mysql /mnt/data/public/mysql (mysql存储目录)
redis 公共服务-缓存 public Deployment redis redis /mnt/data/public/redis (redis存储目录)
key 公共服务-链密钥管理 public Deployment public-key key /mnt/data/public/key/logs
chain 公共服务-链服务 public Deployment public-chain chain /mnt/data/public/chain/logs
chartmuseum 公共服务-chart仓库 public Deployment public-chartmuseum chartmuseum-chartmuseum -
minio 公共服务-对象存储 public Deployment public-minio minio -
certification IDA-数据产品认证服务 ida Deployment ida-certification certification /mnt/data/ida/certification/logs
registration IDA-数据产品登记服务 ida Deployment ida-registration registration /mnt/data/ida/registration/logs
gateway IDA-网关 ida Deployment ida-gateway gateway /mnt/data/ida/gateway/logs
circulation IDA-数据要素流通平台前端 ida Deployment ida-circulation circulation /mnt/data/ida/circulation/logs
mira-network-manager MIRA-端口管理服务 mira Deployment mira-network-manager:v1.1.0 port-server /mnt/data/mira
mira-job-service MIRA-PQL解析服务 mira Deployment mira-job-service:v1.1.0 job-service /mnt/data/mira
mira-backend-service MIRA-后端web服务 mira Deployment mira-backend-service:v1.1.0 java-backendservice /mnt/data/mira
mira-scheduler MIRA-调度服务 mira Deployment mira-scheduler:v1.1.0 mpc-scheduler /mnt/data/mira
mira-mpc-engine MIRA-mpc执行引擎 mira Job mira-mpc-engine:v1.1.0 /mnt/data/mira
mira-pir MIRA-pir执行引擎 mira Job mira-pir:v1.1.0 /mnt/data/mira

9.7. 可信计算平台初始化

在创建和执行任务前,可信计算平台需要进行地址初始化。流程如下:

  1. 登录管理员页面配置链账户

  2. 地址初始化

地址初始化:在部署机上执行以下curl命令,进行可信计算平台地址初始化。如果要支持跨公网下载计算任务结果,以下IP地址需要为公网可访问地址。 其中mira部署后,默认端口使用31008

# 部署机执行地址初始化命令
curl --location 'http://192.168.0.91:31008/v1/mira/job/SetResultServerAddr' \
--header 'Content-Type: application/json' \
--data '{"address":"192.168.0.91:31008"}'

注:在计算任务结果下载时,需要使用预先注册的平台地址。平台地址注册依赖于链账户的配置,因此需要在链账户配置完成后进行平台地址注册。

9.8. 部署验证

部署完成后,可以通过前端页面创建任务-任务审批-任务执行-结果下载全流程进行验证

详细步骤请参考: 用户使用手册链接