在 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
。- 其他字段保持不变。
之后直接进行资源的应用以及创建就可以了。