Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
25 commits
Select commit Hold shift + click to select a range
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion .github/workflows/test-ethereum-node.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -14,7 +14,7 @@ jobs:
fail-fast: false
matrix:
consensus: [teku, prysm, lighthouse, nimbus, lodestar]
execution: [geth, nethermind, erigon, besu, ethereumjs]
execution: [geth, nethermind, erigon, besu, ethereumjs, reth]
network: [sepolia, mainnet]
steps:
- name: Checkout
Expand Down
1 change: 1 addition & 0 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -46,6 +46,7 @@ Execution layer clients
- [`ethereumjs`](charts/ethereumjs)
- [`geth`](charts/geth)
- [`nethermind`](charts/nethermind)
- ['reth'](charts/reth)

Consensus layer clients

Expand Down
17 changes: 10 additions & 7 deletions charts/ethereum-node/Chart.lock
Original file line number Diff line number Diff line change
Expand Up @@ -4,16 +4,19 @@ dependencies:
version: 1.0.2
- name: erigon
repository: file://../erigon
version: 1.0.2
version: 1.0.3
- name: ethereumjs
repository: file://../ethereumjs
version: 0.0.1
- name: geth
repository: file://../geth
version: 1.0.2
version: 1.0.3
- name: nethermind
repository: file://../nethermind
version: 1.0.2
version: 1.0.3
- name: reth
repository: file://../reth
version: 0.0.1
- name: lighthouse
repository: file://../lighthouse
version: 1.0.2
Expand All @@ -25,15 +28,15 @@ dependencies:
version: 1.0.2
- name: nimbus
repository: file://../nimbus
version: 1.0.2
version: 1.0.3
- name: lodestar
repository: file://../lodestar
version: 1.0.2
version: 1.0.3
- name: ethereum-metrics-exporter
repository: file://../ethereum-metrics-exporter
version: 0.1.3
- name: xatu-sentry
repository: file://../xatu-sentry
version: 0.0.6
digest: sha256:1ace42c8a9868c6ca5d83823c8758264684c730663f024ec6c8325752dc99c34
generated: "2023-05-01T14:37:42.892842+02:00"
digest: sha256:4ded3507f762751a56fc62d8cc16e0951277f74686bd662218ac8184cc00c6fc
generated: "2023-05-03T14:24:19.101996674Z"
17 changes: 11 additions & 6 deletions charts/ethereum-node/Chart.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -8,7 +8,7 @@ icon: https://avatars.githubusercontent.com/u/6250754?s=200&v=4
sources:
- https://github.com/ethpandaops/ethereum-helm-charts
type: application
version: 0.0.2
version: 0.0.3
maintainers:
- name: skylenet
email: rafael@skyle.net
Expand All @@ -20,7 +20,7 @@ dependencies:
repository: "file://../besu"
condition: besu.enabled
- name: erigon
version: "1.0.2"
version: "1.0.3"
#repository: "https://ethpandaops.github.io/ethereum-helm-charts"
repository: "file://../erigon"
condition: erigon.enabled
Expand All @@ -30,15 +30,20 @@ dependencies:
repository: "file://../ethereumjs"
condition: ethereumjs.enabled
- name: geth
version: "1.0.2"
version: "1.0.3"
#repository: "https://ethpandaops.github.io/ethereum-helm-charts"
repository: "file://../geth"
condition: geth.enabled
- name: nethermind
version: "1.0.2"
version: "1.0.3"
#repository: "https://ethpandaops.github.io/ethereum-helm-charts"
repository: "file://../nethermind"
condition: nethermind.enabled
- name: reth
version: "0.0.1"
#repository: "https://ethpandaops.github.io/ethereum-helm-charts"
repository: "file://../reth"
condition: reth.enabled

- name: lighthouse
version: "1.0.2"
Expand All @@ -56,12 +61,12 @@ dependencies:
repository: "file://../prysm"
condition: prysm.enabled
- name: nimbus
version: "1.0.2"
version: "1.0.3"
#repository: "https://ethpandaops.github.io/ethereum-helm-charts"
repository: "file://../nimbus"
condition: nimbus.enabled
- name: lodestar
version: "1.0.2"
version: "1.0.3"
#repository: "https://ethpandaops.github.io/ethereum-helm-charts"
repository: "file://../lodestar"
condition: lodestar.enabled
Expand Down
13 changes: 7 additions & 6 deletions charts/ethereum-node/README.md
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@

# ethereum-node

![Version: 0.0.2](https://img.shields.io/badge/Version-0.0.2-informational?style=flat-square) ![Type: application](https://img.shields.io/badge/Type-application-informational?style=flat-square)
![Version: 0.0.3](https://img.shields.io/badge/Version-0.0.3-informational?style=flat-square) ![Type: application](https://img.shields.io/badge/Type-application-informational?style=flat-square)

This chart acts as an umbrella chart and allows to run a ethereum execution and consensus layer client. It's also able to deploy optional monitoring applications.

Expand All @@ -15,15 +15,16 @@ This chart acts as an umbrella chart and allows to run a ethereum execution and
| Repository | Name | Version |
|------------|------|---------|
| file://../besu | besu | 1.0.2 |
| file://../erigon | erigon | 1.0.2 |
| file://../erigon | erigon | 1.0.3 |
| file://../ethereum-metrics-exporter | ethereum-metrics-exporter | 0.1.3 |
| file://../ethereumjs | ethereumjs | 0.0.1 |
| file://../geth | geth | 1.0.2 |
| file://../geth | geth | 1.0.3 |
| file://../lighthouse | lighthouse | 1.0.2 |
| file://../lodestar | lodestar | 1.0.2 |
| file://../nethermind | nethermind | 1.0.2 |
| file://../nimbus | nimbus | 1.0.2 |
| file://../lodestar | lodestar | 1.0.3 |
| file://../nethermind | nethermind | 1.0.3 |
| file://../nimbus | nimbus | 1.0.3 |
| file://../prysm | prysm | 1.0.2 |
| file://../reth | reth | 0.0.1 |
| file://../teku | teku | 1.0.2 |
| file://../xatu-sentry | xatu-sentry | 0.0.6 |

Expand Down
2 changes: 2 additions & 0 deletions charts/ethereum-node/ci/clients/execution/reth.yaml
Original file line number Diff line number Diff line change
@@ -0,0 +1,2 @@
reth:
enabled: true
4 changes: 4 additions & 0 deletions charts/ethereum-node/templates/NOTES.txt
Original file line number Diff line number Diff line change
Expand Up @@ -30,6 +30,10 @@ To learn more about the release, try:
{{ $elCount = add1 $elCount -}}
{{ $elName = "nethermind" -}}
{{- end -}}
{{- if .Values.reth.enabled -}}
{{ $elCount = add1 $elCount -}}
{{ $elName = "reth" -}}
{{- end -}}

{{- $clName := "" -}}
{{- $clCount := 0 | int -}}
Expand Down
21 changes: 21 additions & 0 deletions charts/ethereum-node/values.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -19,6 +19,7 @@ global:
ethereumjs: []
geth: []
nethermind: []
reth: []
consensus:
lighthouse: []
lodestar: []
Expand All @@ -37,6 +38,8 @@ global:
- --goerli
nethermind:
- --config=goerli
reth:
- --chain=goerli
consensus:
lighthouse:
- --network=goerli
Expand All @@ -60,6 +63,8 @@ global:
- --sepolia
nethermind:
- --config=sepolia
reth:
- --chain=sepolia
consensus:
lighthouse:
- --network=sepolia
Expand Down Expand Up @@ -159,6 +164,22 @@ nethermind:
{{- end -}}
{{- end }}

reth:
enabled: false
nameOverride: execution
httpPort: 8545
extraArgs:
- >-
{{- with( index .Values.global.clientArgs.networks .Values.global.main.network ) }}
{{- range $i, $v := .execution.reth }}
{{- if (eq $i 0) }}
{{- $v }}
{{- else }}
{{ $v }}
{{- end }}
{{- end -}}
{{- end }}

########################
###
### Consensus clients
Expand Down
23 changes: 23 additions & 0 deletions charts/reth/.helmignore
Original file line number Diff line number Diff line change
@@ -0,0 +1,23 @@
# Patterns to ignore when building packages.
# This supports shell glob matching, relative path matching, and
# negation (prefixed with !). Only one pattern per line.
.DS_Store
# Common VCS dirs
.git/
.gitignore
.bzr/
.bzrignore
.hg/
.hgignore
.svn/
# Common backup files
*.swp
*.bak
*.tmp
*.orig
*~
# Various IDEs
.project
.idea/
*.tmproj
.vscode/
13 changes: 13 additions & 0 deletions charts/reth/Chart.yaml
Original file line number Diff line number Diff line change
@@ -0,0 +1,13 @@
apiVersion: v2
name: reth
description: >
Reth (short for Rust Ethereum, pronunciation) is a new Ethereum full node implementation that is focused on being user-friendly, highly modular, as well as being fast and efficient. Reth is an Execution Layer (EL) and is compatible with all Ethereum Consensus Layer (CL) implementations that support the Engine API. It is originally built and driven forward by Paradigm, and is licensed under the Apache and MIT licenses.
home: https://www.paradigm.xyz/2022/12/reth
icon: https://github.com/paradigmxyz/reth/raw/main/assets/reth.jpg
sources:
- https://github.com/paradigmxyz/reth/
type: application
version: 0.0.1
maintainers:
- name: barnabasbusa
email: busa.barnabas@gmail.com
123 changes: 123 additions & 0 deletions charts/reth/README.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,123 @@

# reth

![Version: 0.0.1](https://img.shields.io/badge/Version-0.0.1-informational?style=flat-square) ![Type: application](https://img.shields.io/badge/Type-application-informational?style=flat-square)

Reth (short for Rust Ethereum, pronunciation) is a new Ethereum full node implementation that is focused on being user-friendly, highly modular, as well as being fast and efficient. Reth is an Execution Layer (EL) and is compatible with all Ethereum Consensus Layer (CL) implementations that support the Engine API. It is originally built and driven forward by Paradigm, and is licensed under the Apache and MIT licenses.

**Homepage:** <https://www.paradigm.xyz/2022/12/reth>

## Source Code

* <https://github.com/paradigmxyz/reth/>

## Values

| Key | Type | Default | Description |
|-----|------|---------|-------------|
| affinity | object | `{}` | Affinity configuration for pods |
| annotations | object | `{}` | Annotations for the StatefulSet |
| authPort | int | `8551` | Engine Port (Auth Port) |
| containerSecurityContext | object | See `values.yaml` | The security context for containers |
| customCommand | list | `[]` | Legacy way of overwriting the default command. You may prefer to change defaultCommandTemplate instead. |
| defaultCommandTemplate | string | See `values.yaml` | Template used for the default command |
| extraArgs | list | `[]` | Extra args for the reth container |
| extraContainerPorts | list | `[]` | Additional ports for the main container |
| extraContainers | list | `[]` | Additional containers |
| extraEnv | list | `[]` | Additional env variables |
| extraPorts | list | `[]` | Additional ports. Useful when using extraContainers or extraContainerPorts |
| extraVolumeMounts | list | `[]` | Additional volume mounts |
| extraVolumes | list | `[]` | Additional volumes |
| fullnameOverride | string | `""` | Overrides the chart's computed fullname |
| httpPort | int | `8545` | HTTP Port |
| image.pullPolicy | string | `"IfNotPresent"` | reth container pull policy |
| image.repository | string | `"ethpandaops/reth"` | reth container image repository |
| image.tag | string | `"main"` | reth container image tag |
| imagePullSecrets | list | `[]` | Image pull secrets for Docker images |
| ingress.annotations | object | `{}` | Annotations for Ingress |
| ingress.enabled | bool | `false` | Ingress resource for the HTTP API |
| ingress.hosts[0].host | string | `"chart-example.local"` | |
| ingress.hosts[0].paths | list | `[]` | |
| ingress.tls | list | `[]` | Ingress TLS |
| initChownData.enabled | bool | `true` | Init container to set the correct permissions to access data directories |
| initChownData.image.pullPolicy | string | `"IfNotPresent"` | Container pull policy |
| initChownData.image.repository | string | `"busybox"` | Container repository |
| initChownData.image.tag | string | `"1.34.0"` | Container tag |
| initChownData.resources | object | `{}` | Resource requests and limits |
| initContainers | list | `[]` | Additional init containers |
| jwt | string | `"ecb22bc24e7d4061f7ed690ccd5846d7d73f5d2b9733267e12f56790398d908a"` | JWT secret is attached as a secret object. Change this value. |
| livenessProbe | object | See `values.yaml` | Liveness probe |
| nameOverride | string | `""` | Overrides the chart's name |
| nodeSelector | object | `{}` | Node selector for pods |
| p2pNodePort.enabled | bool | `false` | Expose P2P port via NodePort |
| p2pNodePort.initContainer.image.pullPolicy | string | `"IfNotPresent"` | Container pull policy |
| p2pNodePort.initContainer.image.repository | string | `"lachlanevenson/k8s-kubectl"` | Container image to fetch nodeport information |
| p2pNodePort.initContainer.image.tag | string | `"v1.21.3"` | Container tag |
| p2pNodePort.port | int | `31000` | NodePort to be used |
| p2pNodePort.portForwardContainer.image.pullPolicy | string | `"IfNotPresent"` | Container pull policy |
| p2pNodePort.portForwardContainer.image.repository | string | `"alpine/socat"` | Container image for the port forwarder |
| p2pNodePort.portForwardContainer.image.tag | string | `"latest"` | Container tag |
| persistence.accessModes | list | `["ReadWriteOnce"]` | Access mode for the volume claim template |
| persistence.annotations | object | `{}` | Annotations for volume claim template |
| persistence.enabled | bool | `false` | Uses an EmptyDir when not enabled |
| persistence.existingClaim | string | `nil` | Use an existing PVC when persistence.enabled |
| persistence.selector | object | `{}` | Selector for volume claim template |
| persistence.size | string | `"20Gi"` | Requested size for volume claim template |
| persistence.storageClassName | string | `nil` | Use a specific storage class E.g 'local-path' for local storage to achieve best performance Read more (https://github.com/rancher/local-path-provisioner) |
| podAnnotations | object | `{}` | Pod annotations |
| podDisruptionBudget | object | `{}` | Define the PodDisruptionBudget spec If not set then a PodDisruptionBudget will not be created |
| podLabels | object | `{}` | Pod labels |
| podManagementPolicy | string | `"OrderedReady"` | Pod management policy |
| priorityClassName | string | `nil` | Pod priority class |
| rbac.clusterRules | list | See `values.yaml` | Required ClusterRole rules |
| rbac.create | bool | `true` | Specifies whether RBAC resources are to be created |
| rbac.rules | list | See `values.yaml` | Required ClusterRole rules |
| readinessProbe | object | See `values.yaml` | Readiness probe |
| replicas | int | `1` | Number of replicas |
| resources | object | `{}` | Resource requests and limits |
| secretEnv | object | `{}` | Additional env variables injected via a created secret |
| securityContext | object | See `values.yaml` | The security context for pods |
| serviceAccount.annotations | object | `{}` | Annotations to add to the service account |
| serviceAccount.create | bool | `true` | Specifies whether a service account should be created |
| serviceAccount.name | string | `""` | The name of the service account to use. If not set and create is true, a name is generated using the fullname template |
| serviceMonitor.annotations | object | `{}` | Additional ServiceMonitor annotations |
| serviceMonitor.enabled | bool | `false` | If true, a ServiceMonitor CRD is created for a prometheus operator https://github.com/coreos/prometheus-operator |
| serviceMonitor.interval | string | `"1m"` | ServiceMonitor scrape interval |
| serviceMonitor.labels | object | `{}` | Additional ServiceMonitor labels |
| serviceMonitor.namespace | string | `nil` | Alternative namespace for ServiceMonitor |
| serviceMonitor.path | string | `"/debug/metrics/prometheus"` | Path to scrape |
| serviceMonitor.relabelings | list | `[]` | ServiceMonitor relabelings |
| serviceMonitor.scheme | string | `"http"` | ServiceMonitor scheme |
| serviceMonitor.scrapeTimeout | string | `"30s"` | ServiceMonitor scrape timeout |
| serviceMonitor.tlsConfig | object | `{}` | ServiceMonitor TLS configuration |
| terminationGracePeriodSeconds | int | `300` | How long to wait until the pod is forcefully terminated |
| tolerations | list | `[]` | Tolerations for pods |
| updateStrategy | object | `{"type":"RollingUpdate"}` | Update stategy for the Statefulset |
| updateStrategy.type | string | `"RollingUpdate"` | Update stategy type |
| wsAuthPort | int | `8551` | WS Engine Auth Port |
| wsPort | int | `8545` | WS Port |

# Examples

## Connecting to the goerli test network

```yaml
extraArgs:
- --network=goerli
```

## Exposing the P2P service via NodePort

This will make your node accessible via the Internet using a service of type [NodePort](https://kubernetes.io/docs/concepts/services-networking/service/#nodeport).
When using `p2pNodePort.enabled` the exposed IP address on your ENR record will be the "External IP" of the node where the pod is running.

**Limitations:** You can only run a single replica per chart deployment when using `p2pNodePort.enabled=true`.If you need N nodes, simply deploy the chart N times.
Currently reth doesn't allow you to announce a a different discovery port, which would be a requirement to run multiple replicas within the same chart.

```yaml
replicas: 1

p2pNodePort:
enabled: true
port: 31000
```
Loading