使用 ethereum-package 在本地与 Kubernetes 部署以太坊 POS 节点

·

以太坊 POS(权益证明)网络进入 2025 年后,开发者迫切需要一条既轻量又可复现的测试链。ethereum-package 借助 Kurtosis 的容器编排能力,可在 5 分钟内拉齐执行层(EL)与共识层(CL)。本文将系统拆解环境准备、单节点启动、自定义配置、Shadowfork 高级玩法与常见陷阱,帮助你快速落地本地或云端开发网络。

一、动手前:环境最小门槛

关键词:Docker、Kurtosis CLI、ubuntu、macOS

部署前只需两项基础依赖,其余全部托管给 Kurtosis。

  1. 安装并启动 Docker

    # Ubuntu/Debian
    sudo apt update && sudo apt install -y docker.io
    sudo systemctl start docker && sudo systemctl enable docker
    
    # macOS 用官方 Installer 即可,完成后验证
    docker version  # 显示版本即正常
  2. 安装 Kurtosis CLI

    • macOS

      brew install kurtosis-tech/tap/kurtosis-cli
    • Ubuntu/Debian

      echo "deb [trusted=yes] https://apt.fury.io/kurtosis-tech/ /" | \
      sudo tee /etc/apt/sources.list.d/kurtosis.list
      sudo apt update && sudo apt install kurtosis-cli

      小贴士:CLI 新增了 kurtosis feedback 命令,可随时反馈 Bug。

验证安装:

kurtosis version
# 输出版本号即成功

👉 如何 3 分钟把 Kurtosis CLI 更新到最新版本,随时随地不掉链子?

二、一条命令跑通单节点测试链

关键词:单节点、Geth、Lighthouse、holesky

Kurtosis 已预设好默认参数,最快路径如下:

kurtosis run --enclave my-pos github.com/ethpandaops/ethereum-package

首次拉取镜像需耐心等待,成功后看到:

SUCCESS: Ethereum network is UP
Discovered 1 participant
EL: Geth v1.14.x
CL: Lighthouse v5.x

如果你想在同一台机器跑多条链,只需更换 enclave 名称,即可并行互不干扰。

三、自定义配置:从测试网到 Shadowfork

关键词:network_params.yaml、holesky-shadowfork、持久化、reth、teku

单节点 只能临时代码调试,真实需求往往需要:

1. 创建网络参数文件

新建 network_params.yaml

participants:
  - el_type: reth          # 面向高性能的执行层客户端
    el_image: ghcr.io/paradigmxyz/reth:latest
    cl_type: teku
    cl_image: consensys/teku:latest
network_params:
  network: "holesky-shadowfork"
  persistent: true         # Shadowfork 强制需持久卷
  electra_fork_epoch: 2    # 手动提前叉
additional_services:
  - prometheus
  - grafana
  - apache                # 便于下载创世文件

2. 一键拉起

kurtosis run --enclave holesky-shadow github.com/ethpandaops/ethereum-package \
  --args-file network_params.yaml

🕹️ Tips:文件改动无需重打镜像,Kurtosis 只会重启变更的服务,速度飞快。

👉 深度比较 Geth vs Reth 性能差距到底有多大?数据说话!

四、Kubernetes 云部署实战

关键词:TKE、EKS、GKE、存储卷、tolerations

本地测试通过后,进阶到 Kubernetes 生产环境。ethereum-package 天然兼容任何标准 K8s 集群。

1. 集群准备

2. 调度策略示例

想利用活动 GPU 节点跑 MEV-Boost?可在 network_params.yaml 内添加:

participants:
  - el_type: reth
    el_tolerations:
      - key: "nvidia.com/gpu"
        operator: Exists
global_tolerations:
  - key: node-role.kubernetes.io/control-plane
    effect: NoSchedule

部署命令:

# 确保本地 kubeconfig 已指向目标集群
kurtosis run --enclave k8s-pos github.com/ethpandaops/ethereum-package \
  --args-file network_params.yaml --production

五、监控与调试三板斧

关键词:日志、genesis、shell

需求Kurtosis 命令示例
实时日志kurtosis service logs k8s-pos el-1-reth-teku -f
下载创世数据kurtosis files download k8s-pos el-genesis-data ~/genesis
进入客户端容器kurtosis service shell k8s-pos cl-1-teku-reth

Grafana 默认账号 admin / admin,Dashboard 路径 http://<NodeIP>:3000.

六、高级功能彩蛋

1. Shadowfork + Verkle 实战

主网状态 分叉到包含 Verkle 树的未来版本:

network_params:
  network: "mainnet-shadowfork-verkle"
  electra_fork_epoch: 1
  persistent: true

同步 20 GB+ 主网状态,第一次请预留 3–4 小时;磁盘随机 IOPS 需 ≥ 5k。

2. MEV-Boost 零配置接入

mev_params:
  mode: full            # 或 mock、custom-builder
  mev_boost_image: flashbots/mev-boost:latest

启用后所有验证者自动与 Relays 通讯,无需手动注册。区块奖励对比图可在 Grafana 面板实时追踪。

3. EIP-4844 Blobscan 分析器

ethereum-package 已集成 Blobscan 浏览器。在 additional_services 增加一项:

additional_services:
  - blobscan

访问 http://localhost:3001/blob 即可查看 Blob 交易吞吐量、费用与效用曲线。

七、清理与省流指令

kurtosis enclave rm -f holesky-shadow
kurtosis clean -a        # 一键释放所有缓存镜像与网络

云计价模式下,执行完及时 enclave rm 可节省 40% 以上费用。


常见问题 FAQ

Q1:部署几次后磁盘占满怎么办?
A:默认卷使用 emptyDir,如未启用持久化 (persistent: false),每次删除 enclave 都会清掉数据。对长期跑链建议在 Kubernetes 中预配 PersistentVolume,同时在 network_params.yaml 设置 el_volume_size

Q2:能否切换为 Prysm 客户端?
A:可以,在 cl_type: prysm 并指定镜像 gcr.io/prysmaticlabs/prysm/beacon-chain:latest。注意 Prysm 需要额外的 --genesis-state 路径,即使用 ./kurtosis files download 步骤拿到 genesis.ssz

Q3:同步卡在某高度无法前进?
A:大概率是磁盘 IOPS 不足。执行 iostat -x 1 观察 await 大于 20ms 时建议更换 SSD 或提升云盘规格。若日志出现 regen error,尝试重启该服务,Kurtosis 会尝试热替换。

Q4:ethereum-package 支持其他公链吗?
A:社区已衍生 Cosmos-package、Avalanche-package 等模板。关注 ethpandaops 组织 即可获取最新仓库。

Q5:生产网络不建议用 Kurtosis?
A:严格地说,ethereum-package 定位为“开发测试”。若用于公共验证者,请使用官方 Ansible 清单或 Kubernetes Helm Charts,确保日志、备份、哨兵节点符合社区规范。

Q6:如何在 CI 环境中自动化部署?
A:在 GitHub Actions 中调用:

- name: launch testnet
  uses: addnab/docker-run-action@v3
  with:
    image: ethpandaops/ethereum-package:latest
    options: --env KURTOSIS_API_KEY=${{ secrets.KURTOSIS_API_KEY }}

并把 kurtosis run 命令写进脚本即可完成每夜构建。


结合 ethereum-package + Kurtosis,你可以在午餐前拥有 多客户端、可观测、带 MEV-Boost 的以太坊 POS 开发网络。现在就动手吧!