前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >用Helm Chart在Kubernetes上部署Fabric | 赠书活动

用Helm Chart在Kubernetes上部署Fabric | 赠书活动

作者头像
Henry Zhang
发布2019-04-12 16:42:36
1.4K0
发布2019-04-12 16:42:36
举报
文章被收录于专栏:亨利笔记

题图摄于犹他州 Bryce Canyon

本文介绍 Fabric 的 Helm Chart 部署方式,可按需灵活配置 solo/Kafka 共识算法以及组织和节点的数目。文后有赠送区块链书籍活动,欢迎参与。

我们之前的文章介绍了如何在 Kubernetes 上部署 Fabric ,在社区里面流传较广,很多朋友按照我们文章中的原理实现了 Kubernetes 运维 Fabric 的能力。

随着技术的发展,Kubernetes 上的应用不少都采用 Helm Chart 的形式部署,有逐渐成为标准的趋势。Helm 的优点是自动化程度高,一条 Helm 命令能够替代多条 kubectl 命令。

本文介绍 Fabric 的 Helm Chart 部署方式,可按需灵活配置 solo/Kafka 共识算法以及组织和节点的数目。建议读者先查看先前的文章,了解 Fabric 部署在 Kubernetes 上的步骤。文后有 PDF 版下载方式。

Helm简介

Helm 是一个 Kubernetes 的包管理工具,用来简化 Kubernetes 应用的部署和管理。Helm 有三个重要概念:

Chart:定义了一种可以被部署在 Kubernetes 上的软件包格式。一个Chart包含了描述 Kubernetes 相关资源的一组文件。

Config:用来存储软件的配置信息,同 Chart 一起用来创建 Release 。

Release:是 Chart 的一个运行实例。

Helm 由两个重要的功能组件构成:Helm Client 和 Tiller Server 。

Helm Client 是一个给终端用户使用的命令行工具,主要被用来:开发本地Chart、管理 Chart 仓库和 Tiller Server 进行交互。

Tiller Server 被安装在 Kubernetes 集群中,它一方面接受 Helm Client 发来的请求,另一方面和 Kubernetes API Server 进行交互,包括响应 Helm Client 请求、组合 Chart 和 Config 创建 Release、将 Chart 安装到 Kubernetes 中并持续追踪状态、升级、卸载已安装的 Chart。

使用Helm部署Fabric

1. 安装 Helm

具体步骤请参考官方文档:

https://docs.helm.sh/using_helm/#installing-helm

2. 准备NFS server

在我们的部署方案中需要 NFS sever 来存储 Fabric 所需要的配置信息,所以需要提前准备一个可用的 NFS server ,关于 NFS server 在部署中的作用请参考我们另一篇文章:用Kubernetes部署超级账本Fabric的区块链即服务

3. 生成Fabric所需的证书文件

在 Fabric 的代码库 ( https://github.com/hyperledger/fabric ) 中提供了“cryptogen”工具,通过该工具可以快速、批量地生成证书文件,以供用户、节点等 Fabric 网络中的实体使用。

一般情况下,用户可以在一个 yaml 文件中定义证书的组织结构,例如组织的个数,组织的名称和域名等,然后使用 “cryptogen” 工具读取该配置文件即可生成相应的证书文件。

一个配置文件样例 cluster-config.yaml 如下:

其中 OrdererOrgs 和 PeerOrgs 关键字用于区分组织( organization )的类型,两种组织的内部结构如下:

OrdererOrgs 中定义 orderer 组织的信息,Name 字段定义了组织的名称, Domain 字段定义了组织的域名。同时,通过 template 字段可批量生成 orderer 节点。上述的例子中定义了一个名字为 Orderer ,域名为 example.com 的组织,并且它指定 template 中 count 的数值为1,则在该组织下只有一个 orderer ,其 id 为 orderer0。

PeerOrgs 中定义 peer 组织的信息,上述的例子定义了两个组织,分别为 Org1 和 Org2 ,对应的域名为 org1.example.com 、 org2.example.com ,与 orderer 类似,每个组织生成了一个 peer,虽然 Org1 中 peer0 和 Org2 中 peer0 的 ID 重复,但是它们不属于同一个组织,因此通过域名很容易就能区分出来。

更多配置信息请读者参考源码中的关于 cryptogen 的描述。

4.下载Chart

通过 git clone 下载chart:

https://github.com/LordGoodman/fabric-chart

https://github.com/hainingzhang/articles

下载后,进入fabric -chart/ 目录。

5. 配置 Chart 的 values.yaml

1)通过 consensusType 配置所需要的共识算法:solo 或者 Kafka。Helm程序安装时根据这个参数安装不同的共识算法。

2)修改组织定义。由于在上面第3步中生成的 “crypto-config/” 目录有层级结构,该目录的子目录会根据对应的配置文件命名,因此需要在 values.yaml 中配置相同的信息,以确保 Fabric 节点能够正确找到其证书文件。最简单的方法就是把上述 cluster-config.yaml 的内容复制到 values.yaml 。

3)配置NFS server信息,以便在 Kubernetes 环境中读取 Fabric 的配置文件。

配置好的 values.yaml 的内容如下:

在第3步中生成的证书文件生成后会存放在目录 “crypto-config/” 中,为了部署在Kubernetes 中的 Fabric 节点能够正常获取到证书信息,用户还需要把该目录拷贝至 NFS server 上,这样节点就能通过 “persistent volume” 的方式访问它所需的证书文件。

假设 NFS server 中共享的目录为 /opt/share ,目录 crypto-config 在 NFS 上存放的路径为:

/opt/share/<clusterName>/resources/crypto-config

其中 clusterName 用于区分不同 Fabric 集群,根据第5步的 values.yaml 文件,这里的 clusterName 为 mycluster 。

7. 部署 Chart 到 Kubernetes 中

上述准备完成后,执行以下命令将 Fabric 部署到 Kubernetes 集群中:

$ helm install .

部署Fabric后的架构图如下:

8. 安装原理

Fabric Chart在设计时可根据 values.yaml 的参数,动态生成部署模板。在实际部署 Fabric 的节点之前,Helm 首先会根据 values.yaml 渲染模版文件,生成部署文件。然后把部署文件推送给Tiller,最后 Tiller 调用 Kuebrnetes 的 API 完成部署。下面以 Peer 节点的模板文件 (fabric-chart/templates/peer.yaml) 为例,简单讲解模板渲染的工作流程。

1.

{{- range $peerOrg := $root.Values.peerOrgs}}

在模版的定义中,每个Org都对应着 Kubernetes 中的一个 namespace,而该Org下的每个 Peer 节点都对应着 namespace 下的一个 Pod,因此渲染时最先做的事情是遍历所有 Org。

2.

{{- $namespace := printf "%s-%s" $orgName $clusterName }}

{{- $scope := dict "name" $namespace }}

{{- template "namespace" $scope }}

在遍历 Org 的每一次迭代中,为 Org 渲染相应的 namespace,其命名方式为“org.name-clusterName”。

3.

{{- $name := printf "%s-shared" $namespace }}

{{- $scope := dict "name" $name "nfsServer" $root.Values.nfs.ip "nfsPath" $nfsPath "pvcNamespace" $namespace "pvcName" $sharedPVCName }}

{{- template "persistentVolume" $scope }}

同样是在迭代中,渲染 persistent volume 和 persistent volume claim 以供在该namespace 下的 Pod 使用。

4.

{{- range $index := until ($peerOrg.template.count | int) }}

{{- $name := printf "peer%d" $index }}

# the deployment of peer

{{- $scope := dict "name" $name "namespace" $namespace "orgName" $orgName "orgDomainName" $orgDomainName "pvc" $sharedPVCName }}

{{- template "peer.deployment" $scope }}

# the service of peer

{{- $name := printf "peer%d" $index }}

{{- $scope := dict "name" $name "namespace" $namespace }}

{{- template "peer.service" $scope }}

最后根据 peer 所在 Org 的信息渲染 Peer 节点的部署文件。Peer 节点的部署文件由若干个 Kubernetes 资源组成,这些资源涵盖了 deployment 、 service 、ingress 等类型。

模板文件中还定义了 Orderer 、CA 和 CLI 等 Fabric 组件的部署,但由于文章篇幅有限便不在这一一列举,具体请读者参考 fabric-chart/templates 下的模板文件。

感谢我司同事胡辉和尹文开对本文的贡献。

公众号后台回复:Helm,可下载本文 PDF 版本。

相关信息:

用 Kubernetes 部署 Fabric(含 Explorer )的工具,请从 VMware Fling 网站下载:

https://labs.vmware.com/flings/blockchain-on-kubernetes

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2018-08-12,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 亨利笔记 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
相关产品与服务
容器服务
腾讯云容器服务(Tencent Kubernetes Engine, TKE)基于原生 kubernetes 提供以容器为核心的、高度可扩展的高性能容器管理服务,覆盖 Serverless、边缘计算、分布式云等多种业务部署场景,业内首创单个集群兼容多种计算节点的容器资源管理模式。同时产品作为云原生 Finops 领先布道者,主导开源项目Crane,全面助力客户实现资源优化、成本控制。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档