在 kubernetes 集群中运行比特币节点
Table of Contents
在 kubernetes 集群中运行比特币节点
前
最近在研究矿池的架构的K8s上的迁移,在尝试在集群上运行比特币节点。
通过K8s来跑节点存在的一些收益:
- 共用Prometheus系统来监控的比特币节点状态。
- 可以和其他的服务快速的集成通过Service
- 对比专用实例独立部署的话需要更少的资源
到目前为止,节点的pod 已经运行超过 164 天,没有遇到中断问题。下图是 bitcoind pod 状态:

资源准备
B基础镜像
使用dockerhub 的基础镜像ruimarinho/bitcoin-core 时刻保持和官网的最新版本的同步更新
磁盘大小和类型
到 2020 年初,比特币数据的大小约为 333GB [1] 。
所以节点需要分配了一个 600 GB 的 EBS 卷来作为存储。
使用sc1 EBS 类型。虽然速度不是最快。但是节点完全同步之后,IO 需求就会大大减少,后面就足够使用了
硬盘空间目前是足够使用的后面还需要进行继续的扩容。但我们需要再次扩展该卷
集群节点规格
目前所有的 k8s 节点都使用m5.xlarge节点。
所以 bitcoind pod 在m5.xlarge上运行。没有专用节点
部署
SVC
bitcoind RPC服务 暴露的yaml 文件:
kind: Service
apiVersion: v1
metadata:
name: bitcoind-mainnet
spec:
selector:
app: bitcoind-mainnet
ports:
- name: rpc
port: 8332
- name: zmq
port: 28332
Deploy
bitcoind Deployment 的 yaml文件
apiVersion: apps/v1
kind: Deployment
metadata:
name: bitcoind-mainnet
spec:
replicas: 2
selector:
matchLabels:
app: bitcoind-mainnet
template:
metadata:
labels:
app: bitcoind-mainnet
spec:
hostname: bitcoind-mainnet
containers:
- name: bitcoind-mainnet
image: ruimarinho/bitcoin-core:0.18.0
args:
- -zmqpubrawtx=tcp://0.0.0.0:28332
- -zmqpubrawblock=tcp://0.0.0.0:28332
- -zmqpubhashblock=tcp://0.0.0.0:28332
- -zmqpubhashtx=tcp://0.0.0.0:28332
- -rpcport=8332
- -rpcallowip=0.0.0.0/0
- -server=1
- -rpcbind=127.0.0.1
- -rpcbind=bitcoind-mainnet
- -rpcauth=bleevin:<password>
env:
- name: BITCOIN_DATA
value: /data
imagePullPolicy: Always
volumeMounts:
- mountPath: /data
name: bitcoind
restartPolicy: Always
volumes:
- name: bitcoind
persistentVolumeClaim:
claimName: bitcoind-pvc
imagePullSecrets:
- name: docker-hub
对于其中的字段的说明:
apiVersion和kind字段将 ReplicationController 改为 Deployment。metadata部分定义了这个 Deployment 的名称。spec部分定义了这个 Deployment 的规格,包括副本数量、选择器和 Pod 模板。replicas字段指定了要启动的 Pod 副本数量。selector字段定义了选择器,用于将这个 Deployment 管理的 Pod 与其他资源(如 Service)关联起来。template字段定义了 Pod 模板,包括容器定义和标签。containers字段定义了要运行的容器,包括容器名称、镜像和端口。metadata中的name字段被移动到template的metadata中,并且不再需要指定spec.selector.matchLabels。- 其他字段保持不变。
之后直接进行资源的应用以及创建就可以了。