k8s部署fabric 2.4

news2024/11/18 23:50:53

test-network的部署现状

docker+docker-compose

  • ip+端口号:ip不可变,人工维护,不可冲突
  • 脚本化:程度低,部分流程需要登陆到容器中执行
  • 日志收集:无
  • 监控告警:无
  • 容器管理:无
  • 部署流程:复杂,脚本+手工命令行
  • 服务调用:自定义gateway,无法排除异常节点
  • 分布式能力:无,单机部署

为什么需要k8s

鱿物链的现状基本上可以通过k8s相应的组件得到解决。

鱿物链现状

k8s

备注

ip+端口号

service

部署流程脚本化

通过定义yaml实现脚本化

服务调用

ingress

日志收集

sidecar部署日志收集器,sls

监控

prometheus/kmonitor

容器生命周期管理

deployment

分布式能力

天然支持分布式

k8s搭建fabric测试网络

该项目将 Hyperledger fabric网络重新建立为云原生应用程序。关于kubernetes可以参考:

入门 | Kubernetes

fabric-sample地址

GitHub - hyperledger/fabric-samples: Samples for Hyperledger Fabric

目标:

  • 提供一个简单的一键式活动来运行 Fabric 测试网络。
  • 提供在 Kubernetes 上部署生产型网络的参考指南。
  • 为开发链码、网关和区块链应用程序提供云就绪平台。
  • 为 Fabric CA 操作和部署指南提供 Kube 补充。
  • 支持向Chaincode as a Service的过渡。
  • 支持从内部、Docker 守护进程到外部链码构建器的转换。
  • 在任何 Kube 上运行。

先决条件:

  • kubectl
  • jq
  • envsubst(brew install gettext在 OSX 上)
  • K8s环境:
    • KIND + Docker

$ go version
go version go1.17 darwin/arm64

$ go install sigs.k8s.io/kind@v0.17.0

$ kubectl version
Client Version: version.Info{Major:"1", Minor:"25", GitVersion:"v1.25.2", GitCommit:"5835544ca568b757a8ecae5c153f317e5736700e", GitTreeState:"clean", BuildDate:"2022-09-21T14:33:49Z", GoVersion:"go1.19.1", Compiler:"gc", Platform:"darwin/arm64"}
Kustomize Version: v4.5.7
Server Version: version.Info{Major:"1", Minor:"25", GitVersion:"v1.25.3", GitCommit:"434bfd82814af038ad94d62ebe59b133fcb50506", GitTreeState:"clean", BuildDate:"2022-10-25T19:38:29Z", GoVersion:"go1.19.2", Compiler:"gc", Platform:"linux/arm64"}

快速开始

KIND创建一个 K8S 集群

./network kind 

核心功能:

  • kind创建k8s集群:
    • kind create cluster --name kind --config=。。。
  • 镜像仓库:
    • 可以使用私有镜像仓库:docker run --detach --restart always --name kind-registry --publish 127.0.0.1:5000:5000 registry:2
    • 也可以使用集团的镜像仓库:docker login --username=xxx
    • 配置docker网络:docker network connect kind kind-registry

k8s集群初始化

./network cluster init
核心功能:
  • 部署ingress-nginx
  • 部署证书平台:cert-manager

启动网络

./network up 

核心功能:

  • 创建fabric测试网络,其中包括3个组织的ca节点,peer节点和order节点,具体见下面的网络架构。其本质就是为每个组织的order或peer节点创建对应的deployment;
  • 普通用户账号注册:fabric-ca-client register
  • 普通用户账号登记: fabric-ca-client enroll
  • 生产msp文件:/fabric-samples/test-network-k8s/build/enrollments/org2/users/org2admin/msp

fabric网络架构:

组织

ca

peer

order

channel

org0

org0-ca

-

org0-order1

org0-order2

org0-order3

mychannel

org1

org1-ca

org1-peer1

org1-peer2

-

mychannel

org2

org2-ca

org2-peer1

org2-peer2

-

mychannel

创建通道

./network channel create 
核心功能:
  • admin用户账号注册并生成签名文件,msp文件:fabric-ca-client register/enroll
  • configtxgen创建genesis block
  • 组件加入channel
    • order组织:osnadmin channel join
    • peer组织:peer channel join

备注:新版fabric取消了系统通道,order节点直接通过osnadmin新建channel并加入

备注:新版fabric取消了系统通道,order节点直接通过osnadmin新建channel并加入

部署基本资产转移智能合约

./network chaincode deploy asset-transfer-basic ../asset-transfer-basic/chaincode-java
核心功能:
  • 构建chaincode镜像;编译java 代码;
  • 打包chaincode;
  • 部署chaincode服务;
  • chaincode install,approveformyorg,commit

调用和查询链码:

./network chaincode invoke asset-transfer-basic '{"Args":["InitLedger"]}' ./network chaincode query  asset-transfer-basic '{"Args":["ReadAsset","asset1"]}'

使用REST API访问区块链:

./network rest-easy
Fabric REST样例准备就绪。

通过api接口访问区块链

等同于

$ peer chaincode invoke -n asset-transfer-basic -C mychannel -c '{"Args":["GetAllAssets"]}' --orderer org0-orderer1.localho.st:443 --connTimeout 10s --tls --cafile /Users/ljs/GoProject/src/fabric-samples/test-network-k8s/build/channel-msp/ordererOrganizations/org0/orderers/org0-orderer1/tls/signcerts/tls-cert.pem

关闭测试网络:

./network down 
删除集群:
./network unkind

核心流程总结

./network kind
./network cluster init
./network up
./network channel create
./network chaincode deploy asset-transfer-basic ../asset-transfer-basic/chaincode-java

附:服务发现机制

ingress-nginx

Ingress 公开从集群外部到集群内服务的 HTTP 和 HTTPS 路由。

TODO

  1. 调研添加组织;本质就是创建deployment和安装chaincode;
  2. k8s部署fabric,本质就是生产对应的yaml,然后通过kubectl apply -f部署对应的组件,需要预生成对应证书相关的pem文件、身份相关msp文件,以及容器镜像文件,可以达到分钟级部署;

参考

https://ata.alibaba-inc.com/articles/244471

使用kind快速搭建本地k8s集群 - 春光牛牛 - 博客园

fabric-samples/test-network-k8s at main · hyperledger/fabric-samples · GitHub

Ingress | Kubernetes

kubernetes上部署hyperledger-fabric 2.4.3 - 人艰不拆_zmc - 博客园

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/82353.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

4.1什么叫作PCB封装?它的分类一般有哪些? Cadence Allegro软件制作PCB封装的一般流程是什么?

笔者电子信息专业硕士毕业,获得过多次电子设计大赛、大学生智能车、数学建模国奖,现就职于南京某半导体芯片公司,从事硬件研发,电路设计研究。对于学电子的小伙伴,深知入门的不易,特开次博客交流分享经验&a…

Java中的5个代码性能提升技巧,学会之后立马提升近10倍性能

文章目录预先分配 HashMap 的大小优化 HashMap 的 key不使用 Enum.values() 遍历使用 Enum 代替 String 常量使用高版本 JDK这篇文章介绍几个 Java 开发中可以进行 性能优化的小技巧,虽然大多数情况下极致优化代码是没有必要的,但是作为一名技术开发者&a…

如何通过nodejs快速搭建一个服务器

在前端开发过程中,可能某些时候需要自己搭建一台服务器用于一些文件图片请求或者进行后端相关知识的学习。本文主要讲解如何通过nodejs进行一个基础服务器的搭建,包括如何将文件布置的服务器,以及基础接口的开发。后面可能会更新关于通过node…

C# SuperSocket 手把手教你入门 傻瓜教程---9(CountSpliterReceiveFilter - 固定数量分隔符协议)使用COMMAND

C# SuperSocket 手把手教你入门 傻瓜教程系列教程 C# SuperSocket 手把手教你入门 傻瓜教程---1(服务器单向接收客户端发送数据) C# SuperSocket 手把手教你入门 傻瓜教程---2(服务器和客户端双向通信) C# SuperSocket 手把手教…

【Vue 快速入门系列】Vue数据实现本地存储、自定义事件绑定、全局事件总线、$nextTick的使用

文章目录一、本地存储1.概念2.接口3.实际操作二、自定义事件绑定1.自定义事件使用过程2.绑定自定义事件的语法3.其他注意事项三、全局事件总线1.全局事件总线概念2.全局事件总线的使用方式3.原理剖析四、$nextTick小技巧一、本地存储 1.概念 可以将数据临时存储到本地浏览器&…

基于适应度-距离平衡的人工生态系统优化求解暂态稳定约束最优潮流问题附matlab代码

​✅作者简介:热爱科研的Matlab仿真开发者,修心和技术同步精进,matlab项目合作可私信。 🍎个人主页:Matlab科研工作室 🍊个人信条:格物致知。 更多Matlab仿真内容点击👇 智能优化算法…

数字时代,企业应该如何看待商业智能BI

新一代数字化相关技术的应用,使得数字化产品和服务覆盖了社会的方方面面,也让数据成为了构建现代化社会的核心元素,让人们明白数据不只是人类活动产生的附加品,还能够在应用过程中促进人类活动发展、优化和改变,真正成…

Python时间模块之datetime模块

目录 简介 函数介绍及运用 date:日期类 1.获取当前时间 2.日期对象的属性 3.date类中时间和时间戳的转换: 4.修改日期使用replace方法 time:时间类 time类操作 datetime:日期时间类 timedelta:时间间隔&…

【MySQL常用性能指标】

这里给大家分享一些MySQL的常用性能指标,可以对此增加一些自定义指标到数据库的监控里,如zabbix或者prometheus,来更好的检测数据库的状态。 我的MySQSL版本是5.7.19。因为是自己的测试环境,所以截图的一些指标很低,仅…

[附源码]Python计算机毕业设计SSM基于的考研信息共享平台(程序+LW)

项目运行 环境配置: Jdk1.8 Tomcat7.0 Mysql HBuilderX(Webstorm也行) Eclispe(IntelliJ IDEA,Eclispe,MyEclispe,Sts都支持)。 项目技术: SSM mybatis Maven Vue 等等组成,B/S模式 M…

linux下故障硬盘点灯操作

按照常理说,硬盘故障了,会自动亮红灯,故障消除后会自动恢复正常,这个本来是服务器自带的功能。但现实情况往往不是这样,即使硬盘故障了,现场通过外观也看不出来。 1 硬盘点灯的意义 在运维的工作中&#…

【电巢】什么是EMC测试?EMC测试又是如何分类的?

在CE认证里面针对不同产品有不同的测试标准、指令,带电产品中必须要测是的EMC指令,作为最常见的CE指令,很多客户想知道什么是EMC测试? EMC的基本定义 EDA365电子论坛 EMC是评价产品质量的一个重要指标。 1.电磁兼容EMC (Electro-Magnetic …

KVM虚拟化

概述 虚拟化是一种技术,可以利用以往局限于硬件的资源来创建有用的 IT 服务。它让您能够将物理计算机的工作能力分配给多个用户或环境,从而充分利用计算机的所有能力。 1.1 工作原理 一种叫做 Hypervisor (虚拟机监控程序)的软件…

非零基础自学计算机操作系统 第1章 操作系统概述 1.6 操作系统的界面形式 1.7 操作系统的运行机理

非零基础自学计算机操作系统 文章目录非零基础自学计算机操作系统第1章 操作系统概述1.6 操作系统的界面形式1.6.1 交互终端命令1.6.2 图形用户界面1.6.3 触屏用户界面1.6.4 作业控制语言1.6.5 系统调用命令1.7 操作系统的运行机理第1章 操作系统概述 1.6 操作系统的界面形式 …

mac回收站清空还能恢复吗?苹果电脑删除的文件怎么恢复

mac回收站清空还能恢复吗?通常,我们右键从电脑上删除的文件,都是被保存在回收站的,那么从回收站删除的文件去哪儿了呢? 当文件从回收站删除后,这些文件还保留在电脑系统上面,只是我们没有办法看…

Java性能调优System的gc垃圾回收方法

java性能调优System的gc垃圾回收方法 java性能调优System的gc垃圾回收方法示例解 一、什么是System.gc()? System.gc()是用Java,C#和许多其他流行的高级编程语言提供的API。当它被调用时,它将尽最大努力从内存中清除垃圾&#…

ABHD5 调控细胞自噬依赖的嘧啶合成介导结肠癌对5-FU 的药物敏感性改变

​ 发表期刊:Nature Communications 影响因子:12.353 发表时间:2019年 合作单位:第三军医大学附属西南医院 今天百趣代谢组学将给大家分享Nature Communications上的一篇文章:ABHD5 blunts the sensitivity of col…

这 88 道阿里高级岗面试题,刷掉了 80% 以上的 Java 程序员

2022,可谓是招聘面试最难季。不少大厂,如腾讯、字节的招聘名额明显减少,面试门槛却一再拔高,如果不用心准备,很可能就被面试官怼得哑口无言。今天不谈其它,就说说我作为面试官面试的那些事儿。 从某电商项目…

JVM监控及诊断工具之命令行篇

文章目录1. 概述2. jps:查看正在运行的Java进程3. jstat:查看JVM统计信息4. jinfo:实时查看和修改JVM配置参数5. jmap:导出内存映像文件&内存使用情况6、jhat:JDK自带堆分析工具7 jstack:打印JVM中线程…

基于微信小程序的旅游系统-计算机毕业设计

项目介绍 随着人民生活水平的提高,旅游业已经越来越大众化,而旅游业的核心是信息,不论是对旅游管理部门、对旅游企业,或是对旅游者而言,有效的获取旅游信息,都显得特别重要.自助定制游将使旅游相关信息管理工作规范化、信息化、程序化,提供旅游景点、旅游线路,旅游新闻等服务本…