与 Kubernetes 一起,玩转IoTeX集群!

Kubernetes 是一个支持自动化部署、大规模可伸缩和容器化应用程序管理的开源容器编排引擎。容器化是将应用程序封装到具有自己操作环境的容器中,是完全机器虚拟化的一种轻量级替代方法。容器化经历过去几年的发展,已经日趋成熟。 科技行业对Kubernetes的使用度也越来越高。

Kubernetes极大地提高了用户运行测试和模拟的能力。它允许用户在传统的限制之外扩展他们的技术资源; 例如,用户可以在不具备101物理机器的基础上,模拟101节点的区块链集群,是实现区块链集群实用环境的理想方式。它还特别适用于模拟具有权益证明(PoS)或授权权益证明(DPoS)共识机制的区块链网络,尤其是有限数量共识机制 (例如101) 的地理分布区块产生及验证的节点。

从我们的Beta测试网“Epik”发布开始,IoTeX就使用Kubernetes来部署和优化我们测试网的基础架构。总的来说,Kubernetes已经极大地改善了我们的运营环境——在这篇文章中,我们将会分享一些关于Kubernetes的使用经验,方便您运行您自己的容器化应用程序。

在Kubernetes上建立IoTeX集群

我们首先来定义Kubernetes的两种服务 :

01

Bootnode service: 用来启动整个IoTeX集群。它是任何新IoTeX节点的入口,帮助新节点加入“点对点”网络。所有节点通过内部Pod的IP地址相互标识。

02

IoTeX服务: 从所有IoTeX节点公开JSON-RPC API。JSON-RPC连接由我们的IoTeX Explorer和命令注入工具来使用。

所有节点配置都是通过Kubernetes ConfigMap部署的,包括创世区块(genesis区块)。通过这样的设定,我们可以重新部署一个新的集群,无需等待构建一个新的docker映像。

在Kubernetes Pods中运行的应用程序默认情况下是无状态的,这意味着任何应用程序保存的数据在重新部署后都不可用。 为了解决这个问题,我们需要使用以下设置过程。在我们的场景中,每个IoTeX节点将使用相同的数据副本 (即“分布式分类账”),所以没有必要保存每个节点的数据。 因此,我们只将Kubernetes Persistent Volume加载到一个IoTeX节点上——在我们的示例中,我们将它加载到引导节点上。 我们还将永久性数据备份到对象存储空间,比如S3和Digital Ocean。除了引导节点之外的所有节点在重新部署后都不会保存数据,因此我们需要在启动前先下载备份。 我们使用Init容器来实现这一功能。 这个过程允许我们的集群从混乱中重新开始,且不用担心丢失以前的数据。

集群的监控

跟踪21个节点的状态并不是一件简单的事情,而且随着节点数量的增加,它会变得更加复杂。为了提高IoTeX集群的可观察性,我们在Kubernetes中设置了监控功能,该功能包括日志记录、度量堆栈和警报管理器。

对于日志,我们使用Fluentd + Elastic Search + Kibana + Elastic Search Curator。首先,Fluentd将每个节点的日志发送到客户端的Elastic Search。 其次,Elastic Search的主服务器将索引可通过Kibana查询的日志。最后,我们使用Elastic Search Curator来清理过期的日志。


内容参照:

对于系统指标,我们通过Prometheus + Prometheus Operator + Grafana.CoreOS Prometheus Operator提供一种简单的方式来配置运行在Kubernetes集群中的Prometheus。 我们还可以通过简单地公开一个度量服务,将IoTeX节点的Prometheus客户端与Prometheus服务器连接起来。


内容参照:


我们正在与Prometheus警报管理器一起建立警报系统,以便在出现异常指标时向我们随时待命的工程师发送警报。

使用Helm管理多重配置

在单个使用环境下,使用Yaml配置在Kubernetes上部署不同类型的应用程序是相当简单的。但是,当您有多个使用环境 (例如,测试环境、交付环境、生产环境) 和不同的节点切换/配置时 (例如,21和101超级节点),用户在管理相同应用程序的各种Kubernetes Yaml配置时会遇到更高的冗余和消耗。 我们使用Helm来解决这个问题。

Helm是Kubernetes应用程序的包管理器。它允许我们将IoTeX集群创建为带有版本和默认值的图表包。在Helm下,我们不需要管理重复的Kubernetes Yaml文件; 相反,我们只需要管理一个更小的配置子集,以便通过覆盖默认值来应对不同的环境和不同变化的需求。Helm还将启动新的IoTeX集群的命令简化成了一个单一的命令:

通过Helm,我们也可以轻松地发布图表。将来,我们将在社区发布IoTeX Helm图表,这样您就可以在几分钟内建立IoTeX集群。

即将到来的未来!

借助Kubernetes和其他操作工具的强大功能,IoTeX开发团队不仅节省了操作集群的时间,而且更快地解决了不同的问题,更新迭代的速度甚至比以前更快。我们期待在未来与您分享更多的技术观点——如果您有任何问题,请联系support@iotex.io。