部署指南

部署一条CITA-Cloud链,除了准备好k8s集群外,还需要实现进行持久化存储和网络的设置。

持久化存储

链的节点是有状态的服务,需要挂载持久化存储来保存数据。

为了方便对接不同的存储服务,我们使用了k8sPV/PVC对存储进行了抽象。

建议由运维人员配置StorageClass,对PV/PVC进行动态绑定。

例如快速入门中就使用了minikube自带的名为standardStorageClass

$ helm install local-pvc cita-cloud/cita-cloud-pvc --set scName=standard

用户需要根据自己的环境以及所使用的存储服务来设置scName参数。

local-pvc为创建的PVC的名字,用户也可以随意设置。

网络

网络方面,需要节点之间可以通过网络相互连接。

集群内部可以通过k8sSVC来暴露节点的网络端口。

如果是跨集群的情况,则需要使用LoaderBalancer服务对外暴露节点的网络端口。

如使用公有云环境,请咨询当前使用的云服务商。

部署模式

部署模式可分为单集群和多集群。

单集群

链的所有节点都在同一个k8s集群中。

我们提供了一个Chart工程来实现该部署模式。在此之前需先执行快速入门-运行CITA-Cloud中的添加Charts仓库创建PVC

$ helm install test-chain cita-cloud/cita-cloud-local-cluster --set config.superAdmin=0xae069e1925a1dad2a1f4c7034d87258dfd9b6532 --set pvcName=local-pvc
  • test-chain为要创建的链的名字。

  • pvcName参数指定了PVC的名字。

  • superAdmin要修改为自己的管理员地址。

  • CITA-Cloud的各个微服务都有多种实现,用户可以通过xxx.imageNamexxx.imageTag参数来选择要使用的实现。

  • 更多参数参见链接

  • 部署上采用statefulset,链的每个节点对应一个pod

  • 网络使用了headless service,使得节点直接可以相互访问。

多集群

链的节点分布在多个k8s集群中。

步骤如下:

  1. 规划节点所属的k8s集群。

  2. 提前设置好节点网络端口对外的ip和端口。

  3. 提前设置好各k8s集群节点的pvc。

  4. 集中生成配置。

  5. 将生成好的节点文件夹,分别下发到所属的k8s集群。

  6. 在各个k8s集群中分别运行节点。

第2步对外暴露节点网络端口。

如果使用porterLB,可以使用如下命令创建eip

$ helm install cita-cloud-eip cita-cloud/cita-cloud-eip
  • cita-cloud-eipeip的名字。

  • 更多参数参见链接

然后使用如下命令创建SVC

$ helm install test-chain-0-lb cita-cloud/cita-cloud-porter-lb
  • test-chain-0-lbSVC的名字。

  • 更多参数参见链接

第4步生成配置。

可以使用Chart工程:

$ helm install init-multi cita-cloud/cita-cloud-config --set config.action.type=initMulti --set config.chainName=test-chain --set config.action.initMulti.superAdmin=8f81961f263f45f88230375623394c9301c033e7 --set config.action.initMulti.kmsPasswordList="123456\,123456\,123456" --set config.action.initMulti.nodeList="192.168.10.123:40000:node0\,192.168.10.134:40000:node1\,192.168.10.135:40000:node2" --set pvcName=local-pvc

更多参数参见链接

也可以直接使用cita-cloud-config

第6步在各个k8s运行节点。

可以使用Chart工程:

$ helm install test-chain-node0 cita-cloud/cita-cloud-multi-cluster-node --set config.chainName=test-chain --set config.domain=node0
  • chainName要与第4步保持一致, domain必须是第4步中其中一个节点的domain。

  • CITA-Cloud的各个微服务都有多种实现,用户可以通过xxx.imageNamexxx.imageTag参数来选择要使用的实现。

  • 更多参数参见链接

针对阿里云场景,可以使用cita_cloud_operatorCITA-Cloud的各个微服务都有多种实现,用户可以通过service-config.toml配置文件来选择要使用的实现。