动手开发 | 如何通过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-node1  labels:    app: chainmaker-node1spec:  containers:  - name: chainmaker    image: chainmakerofficial/chainmaker:v2.3.7    workingDir: "/chainmaker-go/bin"    command:     - "/bin/sh"    - "-c"    - "./chainmaker start -c /chainmaker-go/config/wx-org1.chainmaker.org/chainmaker.yml  >> panic.log"    ports:    - containerPort: 11301      name: p2p-org1    - containerPort: 12301      name: rpc-org1    volumeMounts:    # 每个节点挂载特定的配置目录    - name: config-org1      mountPath: /chainmaker-go/config/wx-org1.chainmaker.org    # 每个节点有自己的数据和日志目录    - name: data-org1      mountPath: /chainmaker-go/data1    - name: log-org1      mountPath: /chainmaker-go/log1    readinessProbe:      tcpSocket:        port: 12301      initialDelaySeconds: 15      periodSeconds: 5  volumes:  # 组织1的配置  - name: config-org1    hostPath:      path: /chainmaker-go/scripts/docker/config/four-nodes/wx-org1.chainmaker.org      type: Directory  # 组织1的数据目录  - name: data-org1    hostPath:      path: /chainmaker-go/scripts/docker/2.3.7/tmp/data1      type: DirectoryOrCreate  # 组织1的日志目录  - name: log-org1    hostPath:      path: /chainmaker-go/scripts/docker/2.3.7/tmp/log1      type: DirectoryOrCreate---apiVersion: v1kind: Servicemetadata:  name: chainmaker-node1spec:  selector:    app: chainmaker-node1  ports:  - name: rpc    port: 12301    targetPort: 12301    nodePort: 31231  - name: p2p    port: 11301    targetPort: 11301    nodePort: 31131  type: 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. 部署 /调用合约验证链是否正常

启动成功后,可进行部署/调用示例合约,以检查链功能是否正常。具体流程详见之前的"部署示例合约"实验。

相关推荐
江湖有缘2 小时前
容器化部署|Docker搭建Blinko轻量笔记系统
笔记·docker·容器
亚空间仓鼠2 小时前
Kubernetes技术入门与实践(五):DaemonSet与StatefulSet
容器·贪心算法·kubernetes
Dontla2 小时前
kubectl命令介绍(K8s命令行客户端)
云原生·容器·kubernetes
又来敲代码了2 小时前
k8s的部署
linux·运维·云原生·容器·kubernetes
炸裂狸花猫3 小时前
开源身份认证与访问管理平台 - Keycloak(二)
docker·云原生·容器·kubernetes·开源·keycloak·sso
D4c-lovetrain3 小时前
Linux个人心得29(k8s的一些个人理解)
linux·运维·kubernetes
炸裂狸花猫3 小时前
开源身份认证与访问管理平台 - Keycloak(一)
docker·云原生·kubernetes·开源·devops
rustfs3 小时前
MinIO 国产平替,RustFS 发布 Beta 版本啦
分布式·docker·云原生·rust·开源
长安链开源社区4 小时前
长安链开发大赛决赛入围名单揭晓
web3·区块链·共识算法