把Kubernetes跟区块链这两个东西放在一起说, 讲白了意思就是使用K8s里面那套调度去管理的逻辑去掌管链上面的节点。你在链上面运行一个验证者、侧车这样的组件, 然后在底层把它封装成容器形式, 让K8s负责把这些程序拉起来, 一旦出现挂掉的情况就重新再拉一遍, 同时还需要控制规模的扩大或者缩小。

听着这种说法确实挺美好的, 但是真正动手去做的时候到处都是陷阱, 光是网络这块内容中的问题就能让你卡住很长时间, 大概三天的样子都是有可能的。

想在kubetnetes上跑区块链节点?网络存储扩缩容,这三块一个都省不了

真正让人最感到头疼的, 往往并不是部署这个操作本身, 而是背后涉及到的网络问题。

这是因为区块链节点之间需要进行点对点通信, 然后要经过服务端的网关卡控这一道工序, 导致所有的端口全都必须被开放, 而相关的NetworkPolicy规则写得像是天书一样让人看不懂, 只要修改其中的一行内容, 就会导致链路立即中断。

后来我就直接用了Calico的BGP模式,这样做的话, PodIP就直接暴露出来了。你就别再走NodePort那套方案了, 因为这样延迟会低点, 用起来也很省心。

另外还有一件事涉及持久化存储方面的内容, 链里面的state那个目录千万不能弄丢, 使用PV挂载到本地硬盘就可以了, 千万不要去使用云盘, 因为云盘的IO性能根本承受不住实际的压力, 说白了Kubernetes关注的是服务能不能活下去, 而区块链技术关注的是数据计算结果准不准确, 这是两件完全不同的事情, 所以请不要把这两者混为一谈进行思考。