动手开发 | 如何通过k8s部署长安链
本文仅用作学习和测试环境使用,具体生产环境需用户自行开发和配置
使用 k8s来部署长安链,可以获得企业级应用所需的自动化运维、高可用性、弹性伸缩和一致性管理能力,从而让业务链能够稳定、可靠、高效地运行。
本文介绍通过k8s容器部署长安链,使每个节点运行在独立的容器。该方式利用k8s service的网络功能实现节点间通信,使用k8s pod定义和启动多个节点,快速搭建多节点区块链网络,确保环境隔离与部署一致性。
部署环境
(1)Ubuntu 20.04
(2)k8s 1.23.0
(4)Go 1.23.9
(5)chainmaker-go 2.3.7
(6)chainmaker-cyptogen 2.3.5
其中长安链的基本环境配置请参考技术文档《通过命令行体验链》。
k8s的下载配置参考官方文档:https://kubernetes.io/zh-cn/docs/setup/
操作步骤
一、使用chainmaker-go自带证书启动k8s链
注:此为自行编译docker 镜像示例,若想使用最新官网镜像,请修改镜像名称。
若docker-hun无法下载,可参考技术文档通过chainmaker自建的镜像仓库下载。
1.进入本项目中对应的目录
cd chainmaker-go/scripts/docker/2.3.7,编写长安链节点pod、service所需的yaml文件,以节点1为例:
apiVersion: v1kind: Podmetadata:name: chainmaker-node1labels:app: chainmaker-node1spec:containers:- name: chainmakerimage: chainmakerofficial/chainmaker:v2.3.7workingDir: "/chainmaker-go/bin"command:- "/bin/sh"- "-c"- "./chainmaker start -c /chainmaker-go/config/wx-org1.chainmaker.org/chainmaker.yml >> panic.log"ports:- containerPort: 11301name: p2p-org1- containerPort: 12301name: rpc-org1volumeMounts:# 每个节点挂载特定的配置目录- name: config-org1mountPath: /chainmaker-go/config/wx-org1.chainmaker.org# 每个节点有自己的数据和日志目录- name: data-org1mountPath: /chainmaker-go/data1- name: log-org1mountPath: /chainmaker-go/log1readinessProbe:tcpSocket:port: 12301initialDelaySeconds: 15periodSeconds: 5volumes:# 组织1的配置- name: config-org1hostPath:path: /chainmaker-go/scripts/docker/config/four-nodes/wx-org1.chainmaker.orgtype: Directory# 组织1的数据目录- name: data-org1hostPath:path: /chainmaker-go/scripts/docker/2.3.7/tmp/data1type: DirectoryOrCreate# 组织1的日志目录- name: log-org1hostPath:path: /chainmaker-go/scripts/docker/2.3.7/tmp/log1type: DirectoryOrCreate---apiVersion: v1kind: Servicemetadata:name: chainmaker-node1spec:selector:app: chainmaker-node1ports:- name: rpcport: 12301targetPort: 12301nodePort: 31231- name: p2pport: 11301targetPort: 11301nodePort: 31131type: NodePort
4个节点的yaml文件已给出,注意将volumes中的hostpath修改为宿主机对应文件的地址。
2.切换项目对应的目录
chainmaker-go/scripts/docker/config/four-nodes/wx-org1.chainmaker.org,通过vim命令修改chainmaker.yml的seeds dns为节点service名字。节点service名字如图所示,通过节点yaml文件获得。

示例截屏如图所示:

同时要注意,使chainmaker.yml中data文件夹与挂载的文件夹保持一致,修改为 ../data4/(原本内容)...。
示例截屏如图所示:

另外3个节点同理,将seeds dns为节点service名字,并将chainmaker.yml中storage部分的store_path均修改为../data2/(原本内容)... - ../data4/(原本内容)...
3.启动容器
通过kubectl create -f filename启动节点容器,容器正常启动
filename分别为上面创建的chainmaker-1.yaml - chainmaker-4.yaml
示例结果如图所示:

4.修改映射端口
进入项目对应的目录chainmaker-go/tools/cmc/testdata,修改sdk_config.yml 的node_addr为localhost:node1映射后端口。
如图所示:


5.测试合约功能
进入项目对应目录chainmaker-go/scripts/docker,运行sendTx.sh,测试合约功能正常。
如图所示:


6.停止并删除数据,关闭k8s容器
运行kubectl delete pod --all
kubectl delete service --all
停止并删除数据,docker容器移除。
二、使用新生成的证书启动k8s链
1. 配置证书生成节点个数
进入chainmaker-go/tools/chainmaker-cryptogen/config目录,修改crypto_config_template.yml文件中count,其为需要生成的节点个数。
如图所示。

2. 证书生成
进入chainmaker-go/scripts目录,执行prepare.sh脚本生成单链4节点集群配置,存于路径chainmaker-go/build中。
查看脚本帮助:
./prepare.sh -h
运行结果如图所示。

生成单链4节点集群的证书和配置:
./prepare.sh 4 1
本实验仅为演示,相关配置全部选择默认项,实际使用中请根据自己的需求进行配置调整。如图所示:

查看生成好的节点证书和配置:
tree -L 3 ../build/
如图所示:


3.pod配置
与任务一相同,创建各节点所需的yaml文件,注意将volumes中的hostpath修改为新生成的config。
进入chainmaker-go/build/config,修改4个node文件夹中的chainmaker.yaml,修改内容与任务一相同
4. 启动节点
进入步骤3中创建的各节点yaml文件所在文件夹,通过kubectl create -f filename启动节点容器,容器正常启动,如图所示。filename为新创建的chainmaker-1.yaml - chainmaker-4.yaml 。

5. 停止节点,关闭k8s容器
运行kubectl delete pod --all
kubectl delete service --all
6. 查看节点是否存在
查看进程:
ps -ef|grep chainmaker | grep -v grep
如图所示。

查看日志:
cat ../build/release/*/bin/panic.log
#修改为 pod 挂载的地址
cat ../build/release/*/log/system.log
cat ../build/release/*/log/system.log |grep "ERROR\|put block\|all necessary"
如图所示:

若看到all necessary peers connected则表示节点已经准备就绪。
7. 部署/调用合约验证链是否正常。
启动成功后,可进行部署/调用示例合约,以检查链功能是否正常。具体流程详见之前的“部署示例合约”实验。
AtomGit 是由开放原子开源基金会联合 CSDN 等生态伙伴共同推出的新一代开源与人工智能协作平台。平台坚持“开放、中立、公益”的理念,把代码托管、模型共享、数据集托管、智能体开发体验和算力服务整合在一起,为开发者提供从开发、训练到部署的一站式体验。
更多推荐



所有评论(0)