Posts

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

avatar of @behiver
25
@behiver
·
·
0 views
·
2 min read

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.

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.

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.

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