Hyperledger Fabric 目前支持两种共识机制,上篇讲到了 Solo 共识的部署,适用于开发环境。这篇讲一下 Kafka 共识。
Kafka 共识原理
准备工作
在部署之前清除上篇所有的数据。
1 | python3 transform/delete.py |
配置文件
crypto-config.yaml
修改 OrdererType Solo 为 kafka
1 | Profiles: |
枪手
Hyperledger Fabric 目前支持两种共识机制,上篇讲到了 Solo 共识的部署,适用于开发环境。这篇讲一下 Kafka 共识。
在部署之前清除上篇所有的数据。
1 | # python3 transform/delete.py |
修改 OrdererType Solo 为 kafka
1 | Profiles: |
在上一篇文章中,我们介绍了在 Kubernetes 上运行 Fabric 的机制和架构。 这篇文章会详细讲解安装的具体步骤。
Fabric 是 Hyperledger 超级账本中的一个子项目,由 Linux 基金会主办。它提供了一个开发区块链应用程序的框架。在 2017 年 1 月份 Fabric v1.0 发布,人们急于使用 Fabric 构建区块链应用程序来解决他们的业务问题。然而,由于部署和管理 Fabric 体系过于复杂,遇到很多的困难。在 v1.0 发布之后,时隔一年,在今年 7 月份,Fabric v1.2 版本发布。
为了简化操作,我们需要一些工具来帮助我们更好地管理 Fabric 分布式系统。Kubernetes 看起来似乎是理想的平台。需要注意的是,Kubernetes 是 CNCF 基金会下的头牌项目,并且 Linux 基金会也是 CNCF 基金会的成员之一。
首先,Fabric 建议是运行在 Docker 容器中的。它的 chaincode(智能合约)也利用容器运行在 sandbox 中。 Fabric 系统由在多个容器中运行的组件组成。 另一方面,Kubernetes 正在成为自动化、容器化应用程序的部署、扩展和管理的事实上的标准。两者有天然的契合。
其次,Fabric 组件可以通过在 Kubernetes 上部署来实现高可用性。 Kubernetes 有一个名为 replicator 的功能,可以监控运行的 pod 并自动修复崩溃的 pod。
第三,Kubernetes 支持多租户。我们可以在同一个 Kubernetes 平台上运行多个隔离的 Fabric 实例。 这有利于区块链应用程序的开发和测试。
在以下部分中,我们介绍了在 Kubernetes 上部署 Fabric 的方法。 我们假设读者具有 Fabric,Docker 容器和Kubernetes 的基本知识。
kubectl 是 k8s 集群的命令行工具,集群安装好以后,可以在集群外部操作相关命令。
最简单的情况,在 Mac 上安装好 kubectl 工具后,可以直接 scp 集群中的 config 文件到本地,这样就有了访问和管理 k8s 集群的能力。但是,如果你有好几个集群同时需要管理,这种方式可能不是最好。
可能通过以下方式优雅的加入相关配置到 config 中。
1 | $ kubectl config set-cluster kubernetes \ |
如果遇到 x509 的错误,可以使用以下命令代替1
2
3$ kubectl config set-cluster kubernetes \
--insecure-skip-tls-verify=true \
--server=https://172.31.21.173:8443
1 | $ kubectl config set-credentials admin \ |
1 | $ kubectl config set-context kubernetes \ |
1 | $ kubectl config use-context kubernetes |
生成的内容会增加到 ~/.kube/config 中。
Docker 镜像启动命令
1 | CMD ["java", "-Dfile.encoding=utf-8", "-jar", "-agentlib:jdwp=transport=dt_socket,server=y,suspend=n,address=5005", "/opt/app.jar"] |
K8s pod
1 | apiVersion: apps/v1beta1 |
1 | # 先安装 gluster 源 |
1 | $ brew install docker-machine-driver-xhyve |
1 | $ curl -LO https://storage.googleapis.com/kubernetes-release/release/`curl -s https://storage.googleapis.com/kubernetes-release/release/stable.txt`/bin/darwin/amd64/kubectl |
1 | $ curl -Lo minikube https://storage.googleapis.com/minikube/releases/v0.24.1/minikube-darwin-amd64 && chmod +x minikube && sudo mv minikube /usr/local/bin/ |
本文所需代码在这里
先查看集群状态1
2
3
4
5$ kubectl get nodes
NAME STATUS ROLES AGE VERSION
k8s-master Ready master 15d v1.8.4
k8s-node-1 Ready <none> 15d v1.8.4
k8s-node-2 Ready <none> 15d v1.8.4
ingress 有多种方式
官方部署现在是 deployment 方式。在 deployment 自由调度过程中,由于我们需要约束 controller 调度到指定的 node 中,所以需要对 node 进行 label 标签。
1 | $ kubectl label nodes k8s-node-1 ingress=proxy |
本文的目的是通过在 Kubernetes 集群上创建并配置 Jenkins Server ,实现应用开发管理的 CI/CD 流程,并且利用 Kubernetes-Jenkins-Plugin 实现动态的按需扩展 jenkins-slave。
本文所需代码在这里
1 | $ cd master |
1 | $ cd slave |
1 | $ kubectl apply -f https://raw.githubusercontent.com/batizhao/dockerfile/master/k8s/jenkins/service-account.yml |
当前最新版本是 1.2.2
1 | $ wget http://harbor.orientsoft.cn/harbor-1.2.2/harbor-offline-installer-v1.2.2.tgz |
解压以后要把所有镜像上传到 k8s 工作节点。
1 | $ tar -vxf harbor-offline-installer-v1.2.2.tgz |