1. 项目概述当以太坊遇见Kubernetes如果你和我一样在区块链基础设施领域摸爬滚打多年从早期手动编译客户端、配置systemd服务到后来用Docker Compose编排节点每一步都伴随着大量的重复劳动和运维痛点。当节点数量从几个增长到几十个当需要管理多个测试网甚至主网节点时传统的部署方式很快就显得力不从心。这正是我最初接触到ethpandaops/ethereum-helm-charts这个项目时的背景。简单来说这是一个为以太坊生态量身定制的Helm Charts集合它把以太坊的执行层客户端如Geth、Nethermind、共识层客户端如Lighthouse、Prysm以及海量的周边工具如区块浏览器、监控器、负载均衡器都打包成了标准的Kubernetes应用包。这不仅仅是一个“部署工具”。在过去的几年里我亲眼见证了以太坊从PoW转向PoS从单客户端到多客户端并行的复杂性爆炸。手动管理这些组件的配置同步、版本升级、高可用和资源隔离几乎成了不可能完成的任务。而这个项目本质上提供了一套基于Kubernetes和Helm的“基础设施即代码”解决方案。它让你能用声明式的方式描述一整套复杂的以太坊节点栈——从创世区块的生成到客户端的同步、验证器的签名服务再到外部的监控和负载均衡——然后一键部署到一个健壮的、可伸缩的容器编排平台上。它适合谁呢我认为有三类人最需要它一是像我这样的区块链基础设施工程师或DevOps我们需要为团队或客户快速搭建稳定、可观测的测试网或专用网络二是项目开发者他们需要一个可复现的本地或云端开发环境来测试智能合约或协议升级三是研究人员和教育者他们需要一种简单的方式来部署多客户端环境以研究网络行为或进行教学演示。无论你是想快速拉起一个单节点的本地开发链还是构建一个支撑数百个验证器的高可用生产级信标链集群这个项目都提供了坚实的基石。2. 核心设计思路为什么是Helm Kubernetes在深入具体图表之前我们必须先理解这个项目背后的设计哲学。为什么选择Helm和Kubernetes作为载体这并非偶然而是针对以太坊节点运维的核心痛点所做出的精准技术选型。2.1 解决传统部署的四大顽疾回想一下手动部署一个以太坊全节点的典型步骤下载客户端二进制文件、创建数据目录、编写复杂的启动命令包含JWT密钥路径、网络ID、同步模式等数十个参数、配置防火墙、设置进程守护如systemd或supervisor。这只是一个节点。如果要部署一个完整的栈执行客户端共识客户端验证器监控复杂度是指数级上升的。更别提升级版本时需要小心翼翼地停止服务、备份数据、更新二进制、重启期间还要担心分叉或数据损坏。Helm的出现首先解决了配置管理的混乱问题。Helm被称为“Kubernetes的包管理器”它允许我们将一个应用的所有Kubernetes资源Deployment, Service, ConfigMap, Secret, PersistentVolumeClaim等打包成一个可版本化的“Chart”。在以太坊的语境下一个Geth节点的Chart里就预定义了容器镜像、命令行参数、存储卷声明、服务暴露方式等。用户只需通过一个values.yaml文件就能覆盖所有默认配置比如指定网络mainnet, goerli、同步模式snap, full、资源限制等。这实现了配置的代码化、版本化和复用。而Kubernetes则解决了生命周期管理和弹性伸缩的问题。以太坊节点是有状态的数据动辄数TB。Kubernetes的StatefulSet和PersistentVolume机制可以优雅地管理这种有状态应用确保Pod即容器实例重新调度后仍然能挂载到原有的数据卷上。此外Kubernetes的健康检查Liveness Readiness Probes可以自动监控客户端RPC端口的健康状态并在故障时重启容器这比任何自定义的监控脚本都要可靠得多。对于负载均衡器如dshackle或API服务如ethstats我们可以轻松使用Horizontal Pod Autoscaler根据CPU/内存或自定义指标如RPC请求延迟进行自动扩缩容这是传统虚拟机部署难以实现的。2.2 模块化与组合性设计ethereum-helm-charts项目最精妙的设计之一是其高度的模块化。它没有提供一个臃肿的“一体式”Chart来部署整个以太坊节点而是将每个组件都拆分成独立的Chart。例如geth、lighthouse、web3signer都是独立的。这种设计带来了巨大的灵活性。你可以像搭积木一样组合它们。项目提供了一个名为ethereum-node的“伞形Chart”Umbrella Chart来证明这一点。这个Chart本身并不包含具体的部署逻辑而是通过Helm的依赖机制dependencies:将geth、lighthouse、validator等子Chart组合在一起并统一管理它们的配置值。这意味着你可以通过一个统一的values.yaml文件配置整个节点栈的所有参数然后一键部署。但同时你也可以选择只部署其中的一部分比如只部署一个执行层客户端给测试用或者单独部署一个blockscout区块浏览器来查询链上数据。注意这种模块化设计也要求使用者对以太坊的架构有基本理解。你需要清楚执行层、共识层、验证器各自的作用以及它们之间如何通信例如通过JWT密钥进行认证。项目文档通常假设你具备这些知识。2.3 面向多客户端与生态工具以太坊向PoS过渡后客户端多样性变得至关重要。该项目从一开始就支持所有主流的执行层和共识层客户端这不仅仅是“政治正确”而是有实际的运维价值。你可以利用这些Chart轻松搭建一个多客户端测试网观察不同客户端在相同网络条件下的表现或者验证协议升级的兼容性。更重要的是它包含了远超核心客户端的庞大工具集。从监控告警ethereum-metrics-exporter、区块浏览blockscout,blobscan、到负载均衡dshackle,dugtrio、再到开发工具ganache和测试网设施faucet,genesis-generator。这反映了一个成熟的运维思路核心服务只是基础围绕它的可观测性、可靠性、可开发性工具链同样重要。这些Chart将社区中优秀的工具标准化、容器化极大地降低了集成成本。3. 从零开始实战部署一个多客户端测试网节点理论说得再多不如亲手操作一遍。下面我将以部署一个Goerli测试网的完整节点使用Nethermind Teku组合并附带基础监控为例拆解整个实操过程。我假设你已有一个正在运行的Kubernetes集群可以是本地的minikube、k3s也可以是云厂商的EKS、GKE并且已安装好kubectl和helm。3.1 环境准备与Chart仓库添加首先我们需要将ethereum-helm-charts的仓库添加到本地helm中。这一步是后续所有操作的基础。helm repo add ethereum-helm-charts https://ethpandaops.github.io/ethereum-helm-charts helm repo update执行helm repo update是为了获取仓库中最新的Chart列表和版本信息。完成后你可以用helm search repo ethereum-helm-charts查看所有可用的Chart会发现琳琅满目的列表就是我们之前提到的那些组件。接下来为我们的部署创建一个独立的Kubernetes命名空间。这是一个好习惯可以将资源隔离便于管理。kubectl create namespace ethereum-goerli3.2 深入解析核心Chart的Values配置直接使用helm install而不自定义配置会使用Chart的默认值但这通常不适合生产或测试环境。我们需要深刻理解并定制values.yaml。让我们以部署nethermind执行层客户端为例看看关键配置项。我们可以先拉取Chart的默认values文件进行研究helm show values ethereum-helm-charts/nethermind nethermind-values.yaml打开这个文件你会看到大量可配置项。以下是我在部署Goerli测试网时通常会修改的核心部分# nethermind-values.yaml 关键部分 image: repository: nethermind/nethermind tag: 1.25.0 # 指定一个稳定版本而非latest # 以太坊网络配置 network: goerli syncMode: Fast # 快速同步模式节省时间和磁盘空间 # 资源限制 - 根据你的节点规模调整 resources: requests: memory: 8Gi cpu: 2 limits: memory: 16Gi cpu: 4 # 持久化存储 - 这是最重要的部分之一 persistence: enabled: true size: 1Ti # Goerli链数据约数百GB预留1TB比较安全 storageClass: fast-ssd # 指定一个快速的SSD存储类IO性能对节点同步至关重要 # RPC服务暴露 service: type: ClusterIP # 通常只在集群内暴露 port: 8545 # 如果需要从集群外访问可以考虑使用NodePort或通过Ingress控制器 # 启用指标导出供Prometheus抓取 metrics: enabled: true port: 6060为什么这么配置指定镜像标签避免使用latest确保部署版本的一致性便于回滚和问题追踪。资源限制Nethermind在同步时对内存和CPU消耗较高。不设置限制可能导致Pod被OOMKill。这里的请求requests是调度依据限制limits是运行上限。存储类storageClass必须与你Kubernetes集群中配置的存储类匹配。对于区块链节点高IOPS和低延迟的SSD存储能极大提升同步速度。你需要提前在集群中创建好对应的存储类例如在AWS EKS上使用gp3。同步模式对于测试网“Fast”同步或Nethermind的“Snap”同步是最实用的选择它通过下载状态快照来大幅减少同步时间。同理我们需要为Teku共识层客户端准备配置。一个关键点是执行层和共识层客户端之间的JWT认证。它们需要通过一个共享的JWT密钥文件进行安全通信。在Helm Chart中这通常通过一个Secret来管理。首先生成一个JWT密钥openssl rand -hex 32 | tr -d \n jwt.hex在Kubernetes中创建Secretkubectl create secret generic ethereum-jwt-secret --from-filejwt.hexjwt.hex --namespaceethereum-goerli然后在Teku的values文件teku-values.yaml中需要配置指向这个Secret以及执行层RPC地址# teku-values.yaml 关键部分 eth1: enabled: true endpoint: http://nethermind:8545 # 注意这里使用K8s Service名进行通信 jwtSecret: secretName: ethereum-jwt-secret secretKey: jwt.hex network: goerli # Teku也需要连接执行层进行验证 eeEndpoint: http://nethermind:8551 # 引擎API端口用于执行层和共识层通信 persistence: enabled: true size: 500Gi # 共识层数据相对较小 resources: requests: memory: 4Gi cpu: 1实操心得在配置eth1.endpoint时我强烈建议使用Kubernetes Service的名称如http://nethermind:8545而不是外部IP。这利用了K8s内置的DNS服务发现使得Pod之间可以通过稳定的网络标识进行通信即使Pod的IP地址发生变化也不受影响。这是容器化部署相比传统部署的一大优势。3.3 分步安装与验证配置好values文件后我们就可以开始安装了。建议先安装执行层客户端等待其RPC服务就绪后再安装共识层客户端因为后者依赖于前者。步骤一部署Nethermindhelm install nethermind ethereum-helm-charts/nethermind \ -f nethermind-values.yaml \ --namespace ethereum-goerli使用kubectl get pods -n ethereum-goerli -w观察Pod状态直到它变为Running。然后可以查看日志确认同步状态kubectl logs -f deployment/nethermind -n ethereum-goerli步骤二部署Teku等待Nethermind的RPC端口8545完全就绪。你可以通过端口转发临时测试kubectl port-forward svc/nethermind 8545:8545 -n ethereum-goerli然后在另一个终端用curl或castfoundry工具发送一个简单RPC请求如eth_blockNumber。确认执行层正常后部署Tekuhelm install teku ethereum-helm-charts/teku \ -f teku-values.yaml \ --namespace ethereum-goerli步骤三验证部署部署完成后检查所有Pod是否健康kubectl get all -n ethereum-goerli你应该能看到nethermind和teku的Deployment、Pod和Service。更深入的验证是检查客户端之间的通信。可以查看Teku的日志看它是否成功连接到了Nethermind的引擎API8551端口kubectl logs -f deployment/teku -n ethereum-goerli | grep -i engine\|execution如果看到类似“Connected to execution engine”或“Execution client online”的日志说明两层客户端已成功握手。3.4 进阶使用Umbrella Chart一键部署如果你觉得分别管理两个Chart的配置太麻烦或者想要部署更复杂的组合比如加上验证器那么ethereum-node这个伞形Chart就是为你准备的。首先获取它的values文件helm show values ethereum-helm-charts/ethereum-node ethereum-node-values.yaml这个values文件的结构非常清晰它包含了所有子Chart如geth,lighthouse,web3signer的配置节。你需要做的就是启用你想要的组件并填写各自的配置。例如要部署我们刚才的NethermindTeku组合# ethereum-node-values.yaml 部分配置 global: network: goerli jwtSecretName: ethereum-jwt-secret # 引用全局的JWT Secret executionClient: # 选择使用哪个执行层客户端Chart client: nethermind nethermind: enabled: true persistence: size: 1Ti resources: requests: memory: 8Gi cpu: 2 consensusClient: client: teku teku: enabled: true persistence: size: 500Gi resources: requests: memory: 4Gi cpu: 1 # 你还可以在这里启用验证器、监控导出器等 validator: enabled: false # 暂时不启用 metricsExporter: enabled: true # 启用指标导出器然后只需要一条命令就能部署整个栈helm install goerli-node ethereum-helm-charts/ethereum-node \ -f ethereum-node-values.yaml \ --namespace ethereum-goerliHelm会处理所有子Chart的依赖关系和安装顺序。这种方式的优势在于配置的集中化管理特别适合管理多个环境如开发、预生产、生产你可以为每个环境维护一个values文件。4. 运维实战监控、升级与故障排查部署成功只是第一步让节点稳定、高效地运行起来才是真正的挑战。这部分分享一些我在实际运维中积累的经验和技巧。4.1 可观测性让节点状态一目了然“黑盒”运行的节点是危险的。ethereum-helm-charts项目中的许多工具Chart正是为了解决可观测性问题。最基础也最重要的是启用客户端的指标导出。几乎所有执行层和共识层客户端Chart都内置了metrics.enabled选项。启用后客户端会暴露一个Prometheus格式的指标端点通常是/metrics。你需要部署一个Prometheus服务器来抓取这些指标。你可以使用prometheus-community的Helm Chart来轻松部署。更进阶的是使用项目提供的专用导出器例如ethereum-metrics-exporter。这个导出器的作用是它通过调用以太坊客户端的JSON-RPC API如eth_syncing,net_peerCount和Beacon API将业务层面的状态如同步状态、区块高度、对等点数量转化为Prometheus指标。这比客户端原生指标更直观。部署示例# 首先为导出器准备一个values文件配置它要监控的客户端端点 # exporter-values.yaml targets: execution: - url: http://nethermind:8545 name: goerli-nethermind consensus: - url: http://teku:5052 name: goerli-teku helm install eth-exporter ethereum-helm-charts/ethereum-metrics-exporter \ -f exporter-values.yaml \ --namespace ethereum-goerli部署完成后结合Grafana你可以搭建一个完整的监控看板实时查看区块高度、同步状态、内存/CPU使用率、对等点连接数、出块延迟等关键信息。这能让你在用户发现问题之前就提前感知到节点的异常。4.2 版本升级平滑无感的艺术区块链客户端更新频繁修复漏洞和性能优化是常态。使用Helm进行升级比手动操作要安全得多。标准升级流程备份values文件这是你的自定义配置务必保存好。更新Chart仓库helm repo update获取最新Chart版本。检查更新内容helm search repo ethereum-helm-charts/nethermind -l查看可用版本。更重要的是查看Chart的变更日志通常在其GitHub仓库的Release Notes中了解新版本是否涉及不兼容的配置变更。修改values文件如果需要将镜像标签image.tag更新到目标版本。执行升级helm upgrade nethermind ethereum-helm-charts/nethermind \ -f nethermind-values.yaml \ --namespace ethereum-goerli \ --version 新Chart版本 # 可选指定Chart版本Helm会计算当前发布版本和期望状态之间的差异并仅应用必要的更改。对于有状态应用Kubernetes会执行滚动更新默认情况下会先启动一个新版本的Pod等待其就绪后再终止旧Pod从而实现零停机或极短停机时间的升级。重要注意事项在升级客户端软件版本尤其是共识层客户端时务必确认该版本与你当前运行的网络如Goerli兼容。有时硬分叉升级需要客户端版本同步切换。最好先在测试环境验证升级流程。对于主网节点建议遵循客户端团队的官方升级公告。4.3 常见问题与排查实录即使有完善的工具在实际运行中依然会遇到各种问题。下面是我遇到的一些典型问题及排查思路。问题一Pod启动失败状态为CrashLoopBackOff这是最常见的问题。首先查看Pod日志kubectl logs -f pod/pod-name -n ethereum-goerli --previous # --previous 查看前一个容器的日志如果当前容器没启动起来错误信息包含Permission denied或Read-only file system原因通常是持久化存储卷PVC的权限问题或者Pod的安全上下文Security Context配置过于严格。排查检查StorageClass的配置确保支持ReadWriteMany或ReadWriteOnce根据Pod数量。检查Chart的values中securityContext和persistence下的accessModes是否匹配。可以尝试在values中暂时放宽安全上下文如设置runAsUser: 0以root运行进行测试但生产环境不推荐。错误信息包含connection refused或failed to connect to ...原因依赖服务未就绪。例如Teku启动时无法连接到Nethermind的引擎API8551端口。排查确认Nethermind的Pod是否已Running且就绪探针通过kubectl describe pod nethermind-xxx。确认Nethermind的服务Service是否存在且端口正确kubectl get svc nethermind。在Teku的Pod内执行网络诊断kubectl exec -it pod/teku-xxx -- sh然后尝试curl -v http://nethermind:8551。这能帮你确定是网络策略NetworkPolicy问题、服务发现问题还是客户端配置的地址/端口错误。问题二节点同步缓慢或卡住检查资源使用率kubectl top pod -n ethereum-goerli。如果CPU或内存使用率持续接近或达到限制limits节点性能会严重下降。需要调整resources.limits。检查存储IO区块链同步是IO密集型操作。如果使用的是云上低速硬盘同步会非常慢。查看Pod所在节点的磁盘IO监控或考虑使用本地SSD或高性能云盘。检查对等点数量通过RPC调用net_peerCount执行层或查看客户端日志。如果对等点很少例如少于10个节点可能无法获取足够的区块数据。确保节点的P2P端口如Geth的30303Teku的9000已正确暴露并且Kubernetes的NodePort或LoadBalancer服务配置正确允许外部流量进入。对于云环境还需要检查安全组/防火墙规则。查看客户端特定日志不同客户端在同步卡住时可能有不同的日志提示。例如Nethermind可能会提示“Waiting for peers...”而Geth的“Snap sync”可能会卡在某个区块。问题三RPC服务间歇性超时或无响应检查Pod重启次数kubectl get pods查看RESTARTS列。如果重启次数很多说明容器可能因为OOM内存不足或健康检查失败而被Kubernetes不断重启。需要调高内存限制或优化客户端配置。检查就绪探针Readiness ProbeHelm Chart通常为RPC服务配置了就绪探针。如果探针检查失败例如RPC端口响应慢或返回错误Pod会被标记为“未就绪”并从Service的负载均衡池中移除。这可能导致外部调用间歇性失败。可以适当调大探针的initialDelaySeconds和timeoutSeconds。考虑引入负载均衡器对于高可用的生产环境单个节点可能成为瓶颈。这正是dshackle执行层和dugtrio共识层这类Chart的用武之地。它们可以作为RPC的负载均衡器和故障转移层将请求分发到后端多个客户端实例提升整体可用性和吞吐量。5. 生态工具链集成超越核心节点部署并稳定运行核心客户端只是基础。一个成熟的以太坊基础设施离不开周边工具链的支持。ethereum-helm-charts的强大之处在于它将这些工具也标准化了让你能轻松构建一个功能完备的“区块链即服务”平台。5.1 区块浏览器让数据可视化对于开发和测试网一个本地的区块浏览器至关重要。项目提供了blockscout针对执行层和beaconchain-explorer或dora针对共识层的Chart。以部署blockscout为例它需要连接到一个执行层节点如我们部署的Nethermind和一个数据库通常是PostgreSQL。它的values配置会相对复杂需要设置数据库连接字符串、RPC端点等。# blockscout-values.yaml 示例片段 env: DATABASE_URL: postgresql://user:passwordpostgresql-service:5432/blockscout ETHEREUM_JSONRPC_HTTP_URL: http://nethermind:8545 ETHEREUM_JSONRPC_WS_URL: ws://nethermind:8546 # 如果需要WebSocket SECRET_KEY_BASE: your-very-long-secret-key-here # 必须生成一个强密钥 # Blockscout本身也需要数据库通常需要额外部署一个PostgreSQL Chart postgresql: enabled: true auth: username: user password: password database: blockscout部署后你可以通过Ingress或NodePort服务访问Blockscout的Web界面直观地查看交易、合约、地址详情这对于调试智能合约和追踪测试网活动来说是不可或缺的。5.2 负载均衡与高可用dshackle与dugtrio在生产环境中直接暴露单个客户端的RPC端点是有风险的单点故障、负载压力。dshackle和dugtrio这两个Chart分别用于对执行层和共识层的RPC API进行负载均衡和故障转移。它们的配置思路类似你定义一个后端客户端列表负载均衡器会健康检查这些后端并将请求分发到健康的节点上。这不仅能提升可用性还能通过水平扩展后端节点来提升整体RPC吞吐量。# dshackle-values.yaml 示例 config: upstreams: - name: nethermind-primary url: http://nethermind-0:8545 timeout: 10s - name: nethermind-secondary url: http://nethermind-1:8545 timeout: 10s # 可以配置多种路由和限流规则部署dshackle后你的应用只需要连接dshackle的服务地址它会在后端的多个Nethermind实例间做智能路由。当一个后端节点同步落后或宕机时请求会被自动路由到健康的节点。5.3 测试网专属工具水龙头与创世生成器如果你正在运营一个私有测试网那么genesis-generator和testnet-faucet这两个Chart会非常有用。genesis-generator可以帮你生成定制化的执行层和共识层创世文件。你可以在values中配置预充值地址、链ID、共识机制参数等。部署后它会将生成的创世文件通过HTTP服务暴露出来其他客户端Chart可以通过配置genesisFileURL直接引用这个URL确保整个网络使用统一的创世块。testnet-faucet则是一个Web水龙头服务允许用户通过简单的界面领取测试网代币。你需要配置一个用于发放代币的私钥通常通过Kubernetes Secret管理和RPC节点地址。这对于开发者体验至关重要。6. 生产环境考量与安全实践将基于此项目部署的节点用于生产环境需要额外的严谨性。以下是一些关键的安全和运维实践。6.1 密钥与敏感信息管理绝对不要将私钥、JWT密钥、密码等硬编码在values.yaml文件或Docker镜像中。Kubernetes提供了Secret对象来安全地存储和管理敏感信息。对于验证器签名密钥使用web3signerChart。它将私钥存储在安全的硬件或软件后端如Hashicorp Vault、AWS Secrets Manager验证器客户端只与web3signer通信私钥永不暴露在客户端Pod中。对于配置文件中的密码在values文件中使用Kubernetes Secret的引用。例如database: password: secretKeyRef: name: my-db-secret key: password对于JWT密钥如前所述通过kubectl create secret创建并在客户端Chart中引用。6.2 网络策略与访问控制默认情况下Kubernetes集群内的Pod可以相互通信。你应该使用NetworkPolicy来实施最小权限原则的网络访问控制。例如创建一个NetworkPolicy只允许Teku的Pod访问Nethermind的引擎API端口8551而拒绝其他不必要的访问。apiVersion: networking.k8s.io/v1 kind: NetworkPolicy metadata: name: allow-teku-to-nethermind namespace: ethereum-goerli spec: podSelector: matchLabels: app.kubernetes.io/name: nethermind policyTypes: - Ingress ingress: - from: - podSelector: matchLabels: app.kubernetes.io/name: teku ports: - protocol: TCP port: 8551 - protocol: TCP port: 8545 # 如果需要RPC6.3 备份与灾难恢复区块链节点的数据目录是核心资产。虽然PersistentVolume (PV) 通常由云提供商提供快照功能但你仍需制定明确的备份策略。定期快照利用云平台如AWS EBS Snapshot, GCP Persistent Disk Snapshot或Kubernetes CSI驱动提供的快照功能定期对数据卷进行快照。备份创世文件和JWT密钥这些是启动网络的关键。将它们安全地存储在版本控制系统如Git的私有仓库中或专用的密钥管理服务里。制定恢复流程文档化恢复步骤。例如在新集群中先创建同规格的PV并从快照恢复数据然后使用相同的Helm Chart和values文件特别是persistence.existingClaim配置进行部署指向恢复的PVC。6.4 资源规划与成本优化运行以太坊全节点尤其是主网节点对资源要求很高。在云上这直接转化为成本。存储主网执行层数据已超过1TB且持续增长。必须使用高性能SSD。可以考虑使用可扩展的块存储并定期评估是否需要扩容。内存与CPU同步期间资源消耗巨大。同步完成后日常运行所需资源会下降。你可以考虑为Deployment配置不同的resources用于同步期和稳定期或者使用Vertical Pod Autoscaler (VPA) 自动调整资源请求但VPA对StatefulSet的支持需谨慎。归档节点 vs 全节点如果你不需要完整的归档数据所有历史状态可以运行修剪pruned的全节点这能节省大量磁盘空间。在客户端的values配置中可以启用相应的修剪选项如Geth的gcmode为archive/full。在我个人的使用经验中ethereum-helm-charts项目极大地提升了部署和管理以太坊基础设施的效率和可靠性。它将最佳实践封装成了可复用的模板让团队能够以一致、可审计的方式管理复杂的区块链节点栈。当然它也有学习曲线要求使用者对Kubernetes、Helm和以太坊协议都有一定的理解。但一旦掌握你就会发现用声明式文件来管理一个动态变化的区块链网络是一种多么优雅和强大的方式。最后一个小建议是多关注项目的GitHub仓库和版本更新社区非常活跃新的客户端版本和工具Chart会不断加入持续优化你的运维体验。