At least three nodes in the Kubernetes cluster with 16 CPU/32 GB RAM configuration.
850 GB of Persistent Storage per execution node.
300 GB of Persistent Storage per consensus node.
Helm 3.5+ - This is the earliest version of Helm tested. Charts may work with earlier versions but it is untested.
Kubernetes 1.22+ - This is the earliest version of Kubernetes tested. Charts may work with earlier versions but it is untested.
PV provisioner support in the underlying infrastructure
Installation
Monitoring System
If you already have Prometheus installed in your cluster, you can skip this step.
Every chart we support contains the ability to enable monitoring and alerting out of the box. A combination of Prometheus + Grafana + Alertmanager is used for monitoring.
Add the prometheus-community helm repository and check that you have access to the chart:
ETH1 nodes are used by the validators to propose new ETH2 blocks. As such, running validator and beacon nodes also entail having a reliable connection to the ETH1 chain.
ETH1 nodes must be deployed first. Currently, GoEthereum, Erigon, Besu, and NetherMind are supported.
Before deployment, you need to generate a JSON Web Token (JWT). Authentication is used to secure the communication between the beacon node and execution client. You can generate a JWT using a command line tool, for example:
export JWT=`openssl rand -hex 32`
Depending on what client you would like to use, run one of the following commands:
An ETH2 beacon node is responsible for running a full Proof-Of-Stake blockchain, known as a beacon chain, which uses distributed consensus to agree on blocks in the network. Validators connect to the beacon nodes to receive block attestation/proposal assignments.
Historically, an execution client alone has been enough to run a full Ethereum node. However, when The Merge happens, EL clients will not be able to track the Ethereum chain on its own. Instead, it will need to be coupled to another piece of software called a “consensus client”. In this configuration, the execution client will be responsible for transaction handling, transaction gossip, state management, and the Ethereum Virtual Machine (EVM). However, EL clients will no longer be responsible for block building, block gossiping, or handling consensus logic, and these will be in the remit of the consensus client.
When deploying ETH2 nodes, make sure that your ETH1 nodes are fully synced. It's possible to choose what ETH2 client to use. Currently, Prysm, Lighthouse, and Teku are supported. Choose one or two clients to install and deploy:
Note that Nimbus is only compatible with Lighthouse validator client
Consensus charts do not have a replicaCount parameter, instead you need to specify a list of execution endpoints, a separate statefulset will be created for each endpoint
The recommended setup is to deploy two replicas of the primary ETH2 client and one replica of the stand-by ETH2 client. The validators will be evenly connected to all the primary replicas and will automatically switch to another primary replica in case the connection to their current one fails.
If happens that there is an issue with the primary client, the validators can migrate to the stand-by client and won't need to wait for it to sync the chain.
Deploy PostgreSQL
Installing and configuring PostgreSQL is beyond the scope of this guide, and we hope that operators will be able to choose and implement the correct reliable solution on their own. PostgreSQL is used to store the validators' keys in encrypted form, as well as to store the slashing history of the web3signer database.
After the database is deployed, two databases and two users must be created:
web3signer - which stores web3signer's data
web3signer_keys - which stores validator keys generated via ethstaking-cli
Sync Validators Keys to the Web3Signer Database
Once you've successfully deployed the database and your proposal got approved by the DAO (the snapshot vote got executed), sync the validator keys using the ethStaking CLI
Run the following command to sync new validator keys to the DB:
./ethstaking-cli sync-db
Please choose the network name (mainnet, goerli, harbour_mainnet, harbour_goerli, gnosis) [mainnet]: goerli
Enter your operator wallet address: 0x777...
Enter the database connection string, ex. 'postgresql://username:pass@hostname/dbname': postgresql://example:example@localhost/web3signer_keys
Enter your mnemonic separated by spaces (" "):
Syncing key pairs [------------------------------------] 1/1
Synced 1 key pairs, apply changes to the database? [Y/n]: Y
The database contains 1 validator keys.
Please upgrade the 'web3signer-validators' helm chart with 'validatorsCount' set to 1
Set 'DECRYPTION_KEY' env to '<decryption key>'
Deploy Web3Signer
Web3Signer is an open-source signing service developed under the Apache 2.0 license and written in Java.
Web3Signer is capable of signing on multiple platforms using private keys stored in an external vault, or encrypted on a disk.
The database storage and disk subsystem of the worker nodes must have sufficient margin of IOPS for normal operation.For example in AWS, it is recommended to use disks of 100G and larger, not for disk space but for better performance.
Validators
Validators are responsible for storing data, processing transactions, and adding new blocks to the blockchain. This will keep Ethereum secure for everyone and earn new ETH in the process.
Before deploying the validators make sure you have deployed Web3Signer and synchronized validator keys in the steps above.
Make sure you have the right number of validators running and restart them so that they will synchronize the latest changes from the Web3Signer.
Click on Connect to Web3 button and connect your wallet. The address must match the one used during DAO proposal generation.
Call commitOperator function.
Congratulations on becoming ethStaking Node Operator🎉. Your validators will get assignments, and you would be able to claim your operator rewards from Farms Page.