Hyperledger Fabric 目前支持两种共识机制,上篇讲到了 Solo 共识的部署,适用于开发环境。这篇讲一下 Kafka 共识。

Kafka 共识原理

准备工作

在部署之前清除上篇所有的数据。

1
2
# python3 transform/delete.py
# rm -rf /opt/data/{orderer,peer}

配置文件

crypto-config.yaml

修改 OrdererType Solo 为 kafka

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
Profiles:

TwoOrgsOrdererGenesis:
<<: *ChannelDefaults
Orderer:
<<: *OrdererDefaults
OrdererType: kafka
Organizations:
- *OrdererOrg
Consortiums:
SampleConsortium:
Organizations:
- *Org1
- *Org2

TwoOrgsChannel:
Consortium: SampleConsortium
Application:
<<: *ApplicationDefaults
Organizations:
- *Org1
- *Org2
Read more »

在上一篇文章中,我们介绍了在 Kubernetes 上运行 Fabric 的机制和架构。 这篇文章会详细讲解安装的具体步骤。

准备环境

CMD 客户机

  • 自己的 Mac(10.4.249.231)
  • 可以通过 kubectl 操作远程的 Kubernetes 集群
  • 安装 Python3,部署脚本是用 Python 写的

集群环境

  • CentOS7
  • Kubernetes v1.11.0
  • Docker 18.03.1-ce
  • Fabric 1.2.0

NFS

  • 给集群做共享存储,挂载证书和一些 channel 文件。
Read more »

概述

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 的基本知识。

Read more »

kubectl 是 k8s 集群的命令行工具,集群安装好以后,可以在集群外部操作相关命令。

最简单的情况,在 Mac 上安装好 kubectl 工具后,可以直接 scp 集群中的 config 文件到本地,这样就有了访问和管理 k8s 集群的能力。但是,如果你有好几个集群同时需要管理,这种方式可能不是最好。

可能通过以下方式优雅的加入相关配置到 config 中。

设置 cluster

1
2
3
4
$ kubectl config set-cluster kubernetes \
--certificate-authority=/etc/kubernetes/ssl/ca.pem \
--embed-certs=true \
--server=https://172.31.21.173:8443

如果遇到 x509 的错误,可以使用以下命令代替

1
2
3
$ kubectl config set-cluster kubernetes \
--insecure-skip-tls-verify=true \
--server=https://172.31.21.173:8443

设置 credentials

1
2
3
4
$ kubectl config set-credentials admin \
--client-certificate=/etc/kubernetes/ssl/admin.pem \
--embed-certs=true \
--client-key=/etc/kubernetes/ssl/admin-key.pem

设置 context

1
2
$ kubectl config set-context kubernetes \
--cluster=kubernetes --user=admin

设置默认 context

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
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
apiVersion: apps/v1beta1
kind: Deployment
metadata:
name: oss
spec:
replicas: 1
template:
metadata:
labels:
titans: oss
spec:
containers:
- name: titans-oss
image: 172.31.21.226/isoftone/titans-oss
imagePullPolicy: Always
ports:
- containerPort: 8008
name: "web"
- containerPort: 5005
name: "jvm-debug"
Read more »

安装 Gluster FS

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
# 先安装 gluster 源
$ yum install centos-release-gluster -y

# 安装 glusterfs 组件
$ yum install -y glusterfs glusterfs-server glusterfs-fuse glusterfs-rdma glusterfs-geo-replication glusterfs-devel

# 创建 glusterfs 目录
$ mkdir /opt/glusterd

# 修改 glusterd 目录
$ sed -i 's/var\/lib/opt/g' /etc/glusterfs/glusterd.vol

# 启动 glusterfs
$ systemctl start glusterd.service

# 设置开机启动
$ systemctl enable glusterd.service

#查看状态
$ systemctl status glusterd.service
Read more »

准备工作

安装 xhyve 驱动程序。

1
2
3
$ brew install docker-machine-driver-xhyve
$ sudo chown root:wheel $(brew --prefix)/opt/docker-machine-driver-xhyve/bin/docker-machine-driver-xhyve
$ sudo chmod u+s $(brew --prefix)/opt/docker-machine-driver-xhyve/bin/docker-machine-driver-xhyve

安装 kubectl

1
2
3
4
5
6
7
8
$ curl -LO https://storage.googleapis.com/kubernetes-release/release/`curl -s https://storage.googleapis.com/kubernetes-release/release/stable.txt`/bin/darwin/amd64/kubectl

$ chmod +x ./kubectl
$ sudo mv ./kubectl /usr/local/bin/kubectl

$ kubectl version
Client Version: version.Info{Major:"1", Minor:"9", GitVersion:"v1.9.1", GitCommit:"3a1c9449a956b6026f075fa3134ff92f7d55f812", GitTreeState:"clean", BuildDate:"2018-01-04T11:52:23Z", GoVersion:"go1.9.2", Compiler:"gc", Platform:"darwin/amd64"}
Server Version: version.Info{Major:"1", Minor:"8", GitVersion:"v1.8.0", GitCommit:"0b9efaeb34a2fc51ff8e4d34ad9bc6375459c4a4", GitTreeState:"clean", BuildDate:"2017-11-29T22:43:34Z", GoVersion:"go1.9.1", Compiler:"gc", Platform:"linux/amd64"}

安装 Minikube

1
2
3
4
$ curl -Lo minikube https://storage.googleapis.com/minikube/releases/v0.24.1/minikube-darwin-amd64 && chmod +x minikube && sudo mv minikube /usr/local/bin/

$ minikube version
minikube version: v0.24.1
Read more »

准备

本文所需代码在这里

先查看集群状态

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 自由调度
  • daemonset 全局调度

官方部署现在是 deployment 方式。在 deployment 自由调度过程中,由于我们需要约束 controller 调度到指定的 node 中,所以需要对 node 进行 label 标签。

1
2
3
4
5
6
7
8
9
10
$ kubectl label nodes k8s-node-1 ingress=proxy
node "k8s-node-1" labeled
$ kubectl label nodes k8s-node-2 ingress=proxy
node "k8s-node-2” labeled

$ kubectl get nodes --show-labels
NAME STATUS ROLES AGE VERSION LABELS
k8s-master Ready master 15d v1.8.4 beta.kubernetes.io/arch=amd64,beta.kubernetes.io/os=linux,kubernetes.io/hostname=k8s-master,node-role.kubernetes.io/master=
k8s-node-1 Ready <none> 15d v1.8.4 beta.kubernetes.io/arch=amd64,beta.kubernetes.io/os=linux,ingress=proxy,kubernetes.io/hostname=k8s-node-1
k8s-node-2 Ready <none> 15d v1.8.4 beta.kubernetes.io/arch=amd64,beta.kubernetes.io/os=linux,ingress=proxy,kubernetes.io/hostname=k8s-node-2
Read more »

本文的目的是通过在 Kubernetes 集群上创建并配置 Jenkins Server ,实现应用开发管理的 CI/CD 流程,并且利用 Kubernetes-Jenkins-Plugin 实现动态的按需扩展 jenkins-slave。

安装

本文所需代码在这里

推送 Jenkins Master Docker 镜像到 Harbor

1
2
3
$ cd master
$ docker build -t 172.31.21.226/ideal/jenkins:lts .
$ docker push 172.31.21.226/ideal/jenkins:lts

推送 Jenkins Slave Docker 镜像到 Harbor

1
2
3
$ cd slave
$ docker build -t 172.31.21.226/ideal/jnlp-slave:latest .
$ docker push 172.31.21.226/ideal/jnlp-slave:latest

安装 Jenkins

1
2
$ kubectl apply -f https://raw.githubusercontent.com/batizhao/dockerfile/master/k8s/jenkins/service-account.yml
$ kubectl apply -f ./
Read more »

下载

当前最新版本是 1.2.2

1
$ wget http://harbor.orientsoft.cn/harbor-1.2.2/harbor-offline-installer-v1.2.2.tgz

准备 Docker 镜像

解压以后要把所有镜像上传到 k8s 工作节点。

1
2
3
4
$ tar -vxf harbor-offline-installer-v1.2.2.tgz
$ cd harbor/
$ scp harbor.v1.2.2.tar.gz k8s-node
$ docker load -i harbor.v1.2.2.tar.gz
Read more »
0%