Validator on Ethereum 2.0 – Installing and running an Eth1 node | Kubernetes Use case

LeoFinance
6 days ago
(edited)
2 Min Read
433 Words

As a Validator on Ethereum 2.0 which is a migration from Ethereum 1.0, you need to run both an Eth2 client (validator) and an Eth1 client (node). The Eth1 client (node) is used to monitor the 32 ETH validator deposits. Whether your are choosing to install your Eth1 on premises or in cloud, there sure is a variety of such tools at your disposal.

leofinance_eth1.jpg

There are 4 commonly used Eth1 clients that you can select and install. While it is possible to use a third-party service like Infura, it is recommended to run your own client and ensure the network stays as decentralised as possible. You can easily access these on the Eth2 Launch Pad.
image.png

There is a diversity of others with different implementation languages and features that you can explore as well. The full list is available on the Ethereum Wikipedia.
image.png

As we've advised on the above while you can run a node in the cloud, the best option is to install and run it locally. For this you can use Kubernetes, a container orchestration platform that's keeping docker containers running and makes running and upgrading software like Ethereum painless. you just need to update the version in the yaml file and apply it. Let's see the steps for running an Eth1 client (node) using Kubernetes.

kubectl apply -f geth.yaml

//contests of contents of geth.yaml

apiVersion: apps/v1
kind: StatefulSet
metadata:
  name: geth-mainnet-full
spec:
  serviceName: geth-mainnet-full
  replicas: 1
  selector:
    matchLabels:
      app: geth-mainnet-full
  template:
    metadata:
      labels:
        app: geth-mainnet-full
    spec:
      containers:
        - name: geth-mainnet-full
          image: ethereum/client-go:v1.9.23
          args:
            [
              "--http",
              "--http.addr=0.0.0.0",
              "--http.vhosts=geth-mainnet-full",
              "--http.api=eth,net,web3,txpool",
              "--ws",
              "--ws.addr=0.0.0.0",
              "--datadir=/data",
            ]
          env:
          ports:
            - containerPort: 8545
              name: gethrpc
            - containerPort: 30303
              name: gethdiscovery
          volumeMounts:
            - name: data
              mountPath: "/data"
          resources:
            limits:
              memory: 12000Mi
            requests:
              memory: 10000Mi
  volumeClaimTemplates:
    - metadata:
        name: data
      spec:
        accessModes: ["ReadWriteOnce"]
        storageClassName: do-block-storage
        resources:
          requests:
            storage: 1000Gi

//View geth logs in Kubernetes

kubectl get pods

//Validate client is running

kubectl logs $NAME_OF_POD

//Upgrade Eth1 version (replace values in yaml from 1.9.23 to new version than run to apply it)

kubectl apply -f geth.yaml

//In case you need to reboot it

kubectl rollout restart statefulset geth-mainnet-full

//In case you need to ssh in

kubectl exec -it geth-mainnet-full-0 -- sh

//In case you need to proxy in from laptop or local machine

kubectl port-forward statefulset/geth-mainnet-full 8545:8545

Hopefully this helps and give you the details to put things in motion to run an Eth1 client (node) and as well use Kubernetes for a dockerized Eth container.

Posted Using LeoFinance Beta