社区所有版块导航
Python
python开源   Django   Python   DjangoApp   pycharm  
DATA
docker   Elasticsearch  
aigc
aigc   chatgpt  
WEB开发
linux   MongoDB   Redis   DATABASE   NGINX   其他Web框架   web工具   zookeeper   tornado   NoSql   Bootstrap   js   peewee   Git   bottle   IE   MQ   Jquery  
机器学习
机器学习算法  
Python88.com
反馈   公告   社区推广  
产品
短视频  
印度
印度  
Py学习  »  区块链

使用Helm在Kubernetes上部署区块链

Docker • 7 年前 • 570 次点击  


“三点钟区块链”无疑成为了大家春节期间焦虑的根源,而“区块链”注定是2018年被持续讨论、关注的行业性热点话题。今天主要来谈一谈如何使用Helm在Kubernetes上部署区块链。

背景


Webjet[1]是一家在线旅行社,负责管理澳大利亚和新西兰每天数以千计的旅行预订。在过去的一年中,微软和Webjet通过利用区块链技术合作,帮助Webjet解决酒店预订处理和管理方面的低效问题。你可以从相关新闻报道来了解更多关于我们合作的相关信息。有关更多技术细节,请看下面视频。



随着Webjet继续增加其区块链部署,他们开始碰到其基础架构即服务(IaaS)体系结构的一些缺陷。为此,我们最近与Webjet合作将其部署迁移到Kubernetes。在本文中,我们将分享从IaaS迁移到Kubernetes的经验教训,解释我们如何使用Helm将私有Ethereum[2]网络部署到Kubernetes,并展示如何使用Helm部署自己的私有以太网网络。

通往Kubernetes的道路


由于基于各种指标的自动缩放的虚拟机缩放集(VMSS)功能[3],Webjet选择将他们的私有以太网网络托管在一系列VMSS上,每个VMSS都运行由Docker Compose编排的Docker容器。GitHub[4]上提供了一个通用版本的Webjet Azure ARM部署。然而,在Webjet将其转化为生产的过程中,基于IaaS架构的一些缺陷(如下两个)变得更加明显。

难以扩展

Docker Compose支持为容器运行多个副本 ;但是,为了在副本之间实现负载平衡,需要管理容器主机端口映射。

在节点级别,由于VMSS的自动缩放功能可扩展整个节点,因此VMSS可以针对同类工作负载进行最佳工作。在机器上运行几种不同的服务时,扩展/缩小VMSS会影响该机器上的所有正在运行的服务。另外,架构可以分成几个Docker Compose文件,并由此分成几个VMSS,但这需要大量的预先计划来确保硬件需求和成本的适当平衡。

升级容易出错

升级服务意味着SSH-ing进入虚拟机,先运行docker - compose stop,再下载新的Docker Compose manifest,随后运行docker - compose up即可。像SaltStack这样的配置管理工具可以用来实现这个过程的自动化,但是这个过程本身是灵活可自定义的,并且很可能出现错误。

由于上述原因,Webjet团队决定通过AKS[5]利用Kubernetes来帮助自动化应用程序的部署、扩展和编排。借助Kubernetes,Webjet可以扩展/缩小某些应用程序,并利用Kubernetes原生支持滚动升级的特点来升级服务。

构建


在将现有的Docker Compose manifest迁移到Kubernetes之后,我们落地了以下架构:


上图显示了映射到Kubernetes构建的私有以太坊网络的体系结构。蓝色代表Kubernetes Services,红色代表Kubernetes Deployments,而绿色和黄色分别代表Kubernetes Secrets和ConfigMaps。

每当Webjet需要部署新的以太坊网络时,都需要对YAML定义进行一系列配置更新。这些更改包括以太坊成因文件,应用程序密码和Geth私钥。Webjet最初使用shell脚本完成此任务,该脚本将搜索并替换配置值,然后使用kubectl create执行部署 。在使用Webjet进行hackfest期间,我们使用Helm来管理而不是YAML定义的模板化。

Helm是什么


Helm是Kubernetes的包管理员。该项目最初由Deis创建,并已被捐赠给云原生计算基金会(CNCF)。话说,有趣的Deis现在已成为微软的一员。通常情况下,应用程序由服务、部署、秘钥等组合而成。与单独管理这些Kubernetes资源不同,Helm提供更高级别的架构(称为图表)来管理整个应用程序。借助Helm,你可以创建、升级和回滚整个应用程序,并轻松与同行和更大的社区共享应用程序/图表。

创建图表

使用Webjet,我们创建了Helm图表来部署一个私有以太网网络。要创建Helm图表,请安装Helm CLI[6],然后运行helm create以搭建新图表。要迁移现有的YAML manifests,请将manifests复制到Helm文件夹结构并添加下面列出的以下标签:图表标准标签[7]。 对于部署图表来说虽然这些标签是非必需的,但建议保持一致。下一步是对可以覆盖的配置和设置进行模板化。有关更多详细信息,请参阅图表最佳实践指南[8]。

借助Helm,每个图表都是可单独管理的单位。Webjet将他们的架构分成多个Helm图表,这样他们可以单独升级。例如,我们为以太坊网络(Miners、EthStats、Bootnode)制作了单独的图表,另一个用于Blockchain Watcher,一个用于部署其存储(SQL)等。在多个Helm图表中共享的工件(例如,Secrets、ConfigMaps )被标记为图表中的依赖关系requirement.yaml[9]。

部署图表

Helm是由两个部分组成:一个客户端CLI(helm)和服务器(tiller)。通过acs-engine或ACS / AKS在Azure上部署Kubernetes集群的一个优点是默认情况下,集群将预先配置Tiller。对于尚未初始化的群集,可以执行如下命令helm init。

要安装图表,你可以运行helm install,它将从官方Charts版本库中搜索并安装图表[10]。我们与Webjet一起开发的以太坊图表可以在GitHub上找到,并且一旦这个拉取请求merged[11],你就可以使用以下方法将私有以太网络安装到你的Kubernetes集群上:

helm install incubator/ethereum

在拉取请求merged之前,我已经做了图表存档:

helm install https://japoonhelmstrg.blob.core.windows.net/public/ethereum-0.1.0.tgz 
  --set geth.account.publicKey=[PUBLIC_KEY]
  --set class="blob-code-inner annotated">geth.account.privateKey=[PRIVATE_KEY]
  --set class="blob-code-inner annotated">geth.account.class="">secret=[SECRET]

请注意,geth.account.publicKey,geth.account.privateKey和geth.account.secret是必需的配置。要创建新的Geth帐户,请参阅https://github.com/ethereum/go-ethereum/wiki/Managing-your-accounts。


你现在在Kubernetes群集中运行了一个私有以太坊网络。

值得一提的是,该图表部署了一个未连接到MainNet的私有以太坊网络。

使用Webjet,他们的图表被委托给一个Git仓库,所有的部署都是通过向Chart提供一个本地文件路径来使用Helm来启动的。但是,也可以轻松配置专用Helm Charts存储库[12]来托管你的私人图表。

最后


本文解释了Webjet如何将其部署迁移到Kubernetes,并展示如何使用Helm来简化托管在Kubernetes上的应用程序的部署和管理。在Azure上使用Kubernetes大大简化了Webjet的部署过程。我们使用Helm的解决方案不需要Webjet来管理他们自己的部署脚本,并且可以利用社区提供的许多现有图表。
图表可以提交给图表注册表并与社区共享。文章中显示的以太坊图表是开源的,并且存在一个将其添加到Charts注册表的GitHub的开放请求[11]。此图部署了简化的以太坊专用网络;为了以更高可用的方式部署网络,请参考此图表[13]。

相关链接:

  1. https://www.webjet.com.au/

  2. https://www.ethereum.org/

  3. https://docs.microsoft.com/en-us/azure/virtual-machine-scale-sets/virtual-machine-scale-sets-autoscale-overview

  4. https://github.com/EthereumEx/ethereum-arm-templates/tree/master/ethereum-consortium

  5. https://azure.microsoft.com/en-us/services/container-service/

  6. https://docs.helm.sh/using_helm/#install-helm

  7. https://docs.helm.sh/chart_best_practices/#standard-labels

  8. https://docs.helm.sh/chart_best_practices/

  9. https://docs.helm.sh/developing_charts/#chart-dependencies

  10. https://github.com/kubernetes/charts/

  11. https://github.com/kubernetes/charts/pull/3220

  12. https://github.com/kubernetes/helm/blob/master/docs/chart_repository.md

  13. https://github.com/jpoon/kubernetes-ethereum-chart/tree/bootnode-registrar


原文链接:https://www.microsoft.com/developerblog/2018/02/09/using-helm-deploy-blockchain-kubernetes/


Kubernetes 实战培训


本次培训内容包括:Docker容器的原理与基本操作;容器网络与存储解析;Kubernetes的架构与设计理念详解;Kubernetes的资源对象使用说明;Kubernetes 中的开放接口CRI、CNI、CSI解析;Kubernetes监控、网络、日志管理;容器应用的开发流程详解等,点击识别下方二维码加微信好友了解具体培训内容


3月23日开始上课,最后8个名额,点击阅读原文链接即可报名。

今天看啥 - 高品质阅读平台
本文地址:http://www.jintiankansha.me/t/GO7HfzKni9
Python社区是高质量的Python/Django开发社区
本文地址:http://www.python88.com/topic/8355
 
570 次点击