Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

feat: setting type of node #2

Merged
merged 29 commits into from
Jul 5, 2024
Merged
Show file tree
Hide file tree
Changes from 24 commits
Commits
Show all changes
29 commits
Select commit Hold shift + click to select a range
fa292f3
add arabica-11
aWN4Y25pa2EK Jun 26, 2024
91924ac
add arabica-11
aWN4Y25pa2EK Jun 26, 2024
7ee1072
add p2p-udp
aWN4Y25pa2EK Jun 26, 2024
739b18d
bump celestia-node version
aWN4Y25pa2EK Jun 26, 2024
0e8093a
add readiness probe logic based on node type
aWN4Y25pa2EK Jun 27, 2024
7f8eab2
fix arabica examples for bridge and full
aWN4Y25pa2EK Jun 27, 2024
08e5968
remove udp from PR
aWN4Y25pa2EK Jun 27, 2024
b25ea9c
remove udp from PR
aWN4Y25pa2EK Jun 27, 2024
3670c71
add change requests
aWN4Y25pa2EK Jun 27, 2024
f2c4ba8
add change requests
aWN4Y25pa2EK Jun 27, 2024
fb3f221
add change requests
aWN4Y25pa2EK Jun 27, 2024
5bd7436
add change requests
aWN4Y25pa2EK Jun 27, 2024
c3ee6e9
add change requests
aWN4Y25pa2EK Jun 27, 2024
155ac04
add logic for nodeType validations, set ClusteIP for SVCs by default
aWN4Y25pa2EK Jun 28, 2024
9304c1e
fix cluster ip for external service
aWN4Y25pa2EK Jun 28, 2024
394dd11
add svc headless examples
aWN4Y25pa2EK Jun 28, 2024
bb3cc7d
add nodeType logic for args validation
aWN4Y25pa2EK Jun 28, 2024
179ef76
add nodeSelector for DA pool
aWN4Y25pa2EK Jun 28, 2024
70d22fe
add Enabled for RPC in config.toml
aWN4Y25pa2EK Jun 28, 2024
79d6e86
add Enabled for RPC in config.toml
aWN4Y25pa2EK Jun 28, 2024
715e778
add hostPorts
aWN4Y25pa2EK Jul 2, 2024
dee948c
remove cpu limits for node
aWN4Y25pa2EK Jul 3, 2024
29de6cb
remove enabled value for rpc in config.toml
aWN4Y25pa2EK Jul 5, 2024
a5f968f
Update charts/celestia-node/templates/_helpers.tpl
tty47 Jul 5, 2024
a1b0c15
Update examples/celestia-node/arabica-bridge.yaml
tty47 Jul 5, 2024
6e74fc1
enable resources on otel-agent
aWN4Y25pa2EK Jul 5, 2024
6d2d039
enable resources on otel-agent
aWN4Y25pa2EK Jul 5, 2024
aa6fefd
Merge remote-tracking branch 'origin/task/add-arabica-2' into task/ad…
aWN4Y25pa2EK Jul 5, 2024
43c0d63
Merge branch 'main' into task/add-arabica-2
smuu Jul 5, 2024
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
1 change: 1 addition & 0 deletions .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -194,3 +194,4 @@ $RECYCLE.BIN/

# End of https://www.toptal.com/developers/gitignore/api/helm,linux,macos,windows,intellij

.idea
1 change: 1 addition & 0 deletions charts/celestia-node/templates/NOTES.txt
Original file line number Diff line number Diff line change
Expand Up @@ -29,3 +29,4 @@ In order to replicate the container startup scripts execute this command:
{{- end }}

{{- include "common.warnings.rollingTag" .Values.node.image }}
{{- include "node.validateValues" . }}
23 changes: 18 additions & 5 deletions charts/celestia-node/templates/_helpers.tpl
Original file line number Diff line number Diff line change
Expand Up @@ -30,27 +30,40 @@ Create the name of the service account to use
{{- end -}}
{{- end -}}


{{/*
Return the proper image name for the otel agent
*/}}
{{- define "node.otelAgent.image" -}}
{{- include "common.images.image" (dict "imageRoot" .Values.node.otelAgent.image "global" .Values.global) -}}
{{- end -}}

{{/*
Validate the node.settings.nodeType value against the first argument in node.args.
*/}}
{{- define "node.validateValues.nodeType" -}}
{{- if not (hasKey .Values.node.settings "nodeType") -}}
Node type is not set. Must be one of 'bridge', 'full', or 'light'.
{{- else if and (ne .Values.node.settings.nodeType "bridge") (ne .Values.node.settings.nodeType "full") (ne .Values.node.settings.nodeType "light") -}}
Invalid node type: {{ .Values.node.settings.nodeType }}. Must be one of 'bridge', 'full', or 'light'.
{{- else if not (hasKey .Values.node "args") -}}
Node args are not set.
{{- else if not (eq .Values.node.settings.nodeType (first .Values.node.args)) -}}
The nodeType value ({{ .Values.node.settings.nodeType }}) does not match the first argument in args ({{ first .Values.node.args }}).
{{- end -}}
{{- end -}}

# TODO: add validations for values
# Remember to add the validation message to NOTES.txt at the end ({{- include "node.validateValues" . }})
{{/*
Compile all warnings into a single message.
Compile all warnings into a single message and fail the deployment if there are any.
*/}}
{{- define "node.validateValues" -}}
{{- $messages := list -}}
{{- $messages := append $messages (include "node.validateValues.foo" .) -}}
{{- $messages := append $messages (include "node.validateValues.bar" .) -}}
{{- $messages := append $messages (include "node.validateValues.nodeType" .) -}}
{{- $messages := without $messages "" -}}
{{- $message := join "\n" $messages -}}

{{- if $message -}}
{{- printf "\nVALUES VALIDATION:\n%s" $message -}}
{{- fail (printf "\nVALUES VALIDATION:\n%s" $message) -}}
{{- end -}}
{{- end -}}
11 changes: 10 additions & 1 deletion charts/celestia-node/templates/statefulset.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -188,10 +188,13 @@ spec:
ports:
- name: p2p
containerPort: {{ .Values.node.containerPorts.p2p }}
hostPort: {{ .Values.node.containerPorts.p2p }}
- name: rest
containerPort: {{ .Values.node.containerPorts.rest }}
hostPort: {{ .Values.node.containerPorts.rest }}
- name: rpc
containerPort: {{ .Values.node.containerPorts.rpc }}
hostPort: {{ .Values.node.containerPorts.rpc }}
- name: profiling
containerPort: {{ .Values.node.containerPorts.profiling }}
- name: prometheus
Expand All @@ -207,16 +210,22 @@ spec:
{{- if .Values.node.customReadinessProbe }}
readinessProbe: {{- include "common.tplvalues.render" (dict "value" .Values.node.customReadinessProbe "context" $) | nindent 12 }}
{{- else if .Values.node.readinessProbe.enabled }}
readinessProbe: {{- include "common.tplvalues.render" (dict "value" (omit .Values.node.readinessProbe "enabled") "context" $) | nindent 12 }}
{{- if or (eq .Values.node.settings.nodeType "bridge") (eq .Values.node.settings.nodeType "full") (eq .Values.node.settings.nodeType "light") }}
readinessProbe:
exec:
command:
- sh
- '-c'
- >
AUTH_TOKEN=$(celestia bridge auth read --node.store=/home/celestia 2>/dev/null);
{{- if eq .Values.node.settings.nodeType "bridge" }}
curl --max-time 0.5 -s -X POST -H "Content-type: application/json" -H "Accept: application/json" -H "Authorization: Bearer $AUTH_TOKEN" -d '{"id":1,"jsonrpc":"2.0","method":"header.SyncWait","params":[]}' "http://localhost:26658";
{{- else if or (eq .Values.node.settings.nodeType "full") (eq .Values.node.settings.nodeType "light") }}
curl --max-time 0.5 -s -X POST -H "Content-type: application/json" -H "Accept: application/json" -H "Authorization: Bearer $AUTH_TOKEN" -d '{"id":1,"jsonrpc":"2.0","method":"das.WaitCatchUp","params":[]}' "http://localhost:26658";
{{- end }}
if [ "$?" -eq 0 ]; then exit 0; else echo "Catching up"; exit 1; fi
{{- end }}
{{- end }}
{{- if .Values.node.customStartupProbe }}
startupProbe: {{- include "common.tplvalues.render" (dict "value" .Values.node.customStartupProbe "context" $) | nindent 12 }}
{{- else if .Values.node.startupProbe.enabled }}
Expand Down
25 changes: 19 additions & 6 deletions charts/celestia-node/values.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -108,6 +108,12 @@ node:
pullSecrets: []
## @param node.settings Settings for the celestia-node
settings:
## Select from: bridge, full, light
## Valid values:
## - bridge
## - full
## - light:
nodeType: bridge
## @param node.settings.home Home directory for the celestia-node
##
# -- home directory for the celestia-node, defaults to /home/celestia
Expand Down Expand Up @@ -368,7 +374,7 @@ node:
##
readinessProbe:
# -- enable readiness probe on node containers, false by default
enabled: false
enabled: true
# -- initial delay seconds for readinessProbe, 0 by default
initialDelaySeconds: 0
# -- period seconds for readinessProbe, 10 by default
Expand Down Expand Up @@ -436,7 +442,7 @@ node:
# -- limits for the node
limits:
# -- cpu limits for the node, 2 by default
cpu: 6
#cpu: 6
# -- memory limits for the node, 8Gi by default
memory: 16Gi
## Configure Pods Security Context
Expand Down Expand Up @@ -723,9 +729,9 @@ service:
prometheus: 8890
## @param service.internal.clusterIP node internal service Cluster IP
## e.g.:
## clusterIP: None
## clusterIP: None # We use headless mode by default for stateful workloads.
##
clusterIP: ""
clusterIP: "None"
## @param service.internal.annotations Additional custom annotations for node internal service
##
annotations: {}
Expand All @@ -749,8 +755,8 @@ service:
enabled: true
## @param service.external.type node external service type
##
# -- external service type, LoadBalancer by default
type: LoadBalancer
# -- external service type, ClusterIP by default
type: ClusterIP
## @param service.external.ports.p2p Node external service P2P port
## @param service.external.ports.rest Node external service REST port
## @param service.external.ports.rpc Node external service RPC port
Expand Down Expand Up @@ -787,6 +793,13 @@ service:
## ref: https://kubernetes.io/docs/concepts/services-networking/service/#type-loadbalancer
##
loadBalancerIP: ""
## @param service.internal.clusterIP node internal service Cluster IP
## e.g.:
## clusterIP: None # We use headless mode by default for stateful workloads.
##
clusterIP: "None"
## @param service.internal.annotations Additional custom annotations for node internal service
##
## @param service.external.loadBalancerSourceRanges node external service Load Balancer sources
## ref: https://kubernetes.io/docs/tasks/access-application-cluster/configure-cloud-provider-firewall/#restrict-access-for-loadbalancer-service
## e.g:
Expand Down
78 changes: 78 additions & 0 deletions examples/celestia-node/arabica-bridge.yaml
Original file line number Diff line number Diff line change
@@ -0,0 +1,78 @@
commonLabels: &commonLabels
chain_id: arabica-11
environment: arabica
network: da
type: &nodeType bridge # check
secretName: &secretName keys-da-bridge-1 # check
pool: &pool pool-da-0 # check pool instance type to validate requests & limits
service:
external:
annotations:
external-dns.alpha.kubernetes.io/endpoints-type: "NodeExternalIP"
external-dns.alpha.kubernetes.io/hostname: "hc-bridge.celestia-arabica-11.com"
external-dns.alpha.kubernetes.io/ttl: "60"
persistence:
size: 750Gi
dataSource:
apiGroup: snapshot.storage.k8s.io
kind: VolumeSnapshot
name: da-latest
node:
nodeSelector:
k8s.scaleway.com/pool-name: *pool
persistentVolumeClaimRetentionPolicy:
whenDeleted: Delete
whenScaled: Retain
otelAgent:
enabled: true
grafanaOtelSecret:
name: grafana-otel-token
resources:
requests:
cpu: 2
memory: 4Gi
limits:
#cpu: 4 # not required since this pod should run on it's own dedicated node
memory: 10Gi
livenessProbe:
enabled: true
periodSeconds: 10
failureThreshold: 3
readinessProbe:
enabled: true
periodSeconds: 10
failureThreshold: 30
startupProbe:
enabled: true
periodSeconds: 10
failureThreshold: 60
args:
- *nodeType
- start
- --p2p.network=arabica-11
- --node.store=$(CELESTIA_HOME)
- --metrics
- --metrics.tls=false
- --p2p.metrics
settings:
nodeType: *nodeType
address: "eyJhbGciOiJQQkVTMi1IUzI1NitBMTI4S1ciLCJjcmVhdGVkIjoiMjAyNC0wMS0wMiAxMjo1NzoyMC4yNjk1Mjg2NTQgKzAwMDAgVVRDIG09KzAuMDQwNDkyNDk0IiwiZW5jIjoiQTI1NkdDTSIsInAyYyI6ODE5MiwicDJzIjoibHBUb0pLUkFvS3NPbmRhaCJ9.SFen5RaM_7JverpZQN6VxtJ06XePE5VKjyzMyIPgqURSge-XbiLHqA.vZ4fuVFbrLODe8RM.EGKwO3uGEifnPanziF-AD4i6q_92IetSVAEz-7Grg75AJyFLV3Flt4CmfLxrJ2JHWJEKUQBNyIU81u7pd01iNzEECDy9b0jO3DYZ_5PRET8zrVPv6SKKZ_U7MLWmAe_eUajipnbqZ6NzG8UcG4qAt278ttZB1KQsKqocKlE39fSvo3iaZEzOKxS0N3tU1Xw2C3w6HgHJFk0QiP36NIHuKoP_4QJkeAomhJX-cNOYwvTd8qTFTk2-1TzLJ5DasLXsVXTUSUzCzYQhEfL8F0qFoGvuY1dWRD5BESw2Gg2oLH1w957Xd2UhRbo5ORz9POR7goEv9AZ_rWrjSV8HozUmgFwDQyM89M7oiNedEfGQoDjypzcUBcVkZLEMIdrFRpshjcpNEzy6-PZ9rSxouKb7wemG_sueX3V3gIPCTfFr6hB8_b2mV-kKeIXQRS5pJz_wXxeFHFKOHDjt3L8n5eqh.fy-zygX7rjTUqgX02sZKKg"
node_id: "92a499fc2ce7cabd2de89416aa0d0d07838f625d"
secret:
name: *secretName
config:
configtoml:
Core:
IP: consensus-validator
RPC:
Enabled: true
Address: 0.0.0.0
Gateway:
Enabled: true
Address: 0.0.0.0
Node:
StartupTimeout: 2m
diagnosticMode:
enabled: false
networkPolicy:
enabled: false
tty47 marked this conversation as resolved.
Show resolved Hide resolved
75 changes: 75 additions & 0 deletions examples/celestia-node/arabica-full.yaml
Original file line number Diff line number Diff line change
@@ -0,0 +1,75 @@
commonLabels:
chain_id: arabica-11
environment: arabica
network: da
type: &nodeType full # check
pool: &pool pool-da-0 # check
service:
external:
annotations:
external-dns.alpha.kubernetes.io/endpoints-type: "NodeExternalIP"
external-dns.alpha.kubernetes.io/hostname: "hc-da-full-1.celestia-arabica-11.com"
external-dns.alpha.kubernetes.io/ttl: "60"
persistence:
size: 1000Gi
dataSource:
apiGroup: snapshot.storage.k8s.io
kind: VolumeSnapshot
name: da-latest
node:
nodeSelector:
k8s.scaleway.com/pool-name: *pool
persistentVolumeClaimRetentionPolicy:
whenDeleted: Delete
whenScaled: Retain
otelAgent:
enabled: true
grafanaOtelSecret:
name: grafana-otel-token
resources:
requests:
cpu: 3
memory: 15Gi
limits:
cpu: 6
memory: 24Gi
livenessProbe:
enabled: true
periodSeconds: 10
failureThreshold: 3
readinessProbe:
enabled: true
periodSeconds: 10
failureThreshold: 30
startupProbe:
enabled: true
periodSeconds: 10
failureThreshold: 60
args:
- *nodeType # check
- start
- --p2p.network=arabica-11
- --node.store=$(CELESTIA_HOME)
- --metrics
- --metrics.tls=false
- --p2p.metrics
settings:
nodeType: full # check
address: "eyJhbGciOiJQQkVTMi1IUzI1NitBMTI4S1ciLCJjcmVhdGVkIjoiMjAyNC0wMS0wMiAxMjo1NzoyMC4yNjk1Mjg2NTQgKzAwMDAgVVRDIG09KzAuMDQwNDkyNDk0IiwiZW5jIjoiQTI1NkdDTSIsInAyYyI6ODE5MiwicDJzIjoibHBUb0pLUkFvS3NPbmRhaCJ9.SFen5RaM_7JverpZQN6VxtJ06XePE5VKjyzMyIPgqURSge-XbiLHqA.vZ4fuVFbrLODe8RM.EGKwO3uGEifnPanziF-AD4i6q_92IetSVAEz-7Grg75AJyFLV3Flt4CmfLxrJ2JHWJEKUQBNyIU81u7pd01iNzEECDy9b0jO3DYZ_5PRET8zrVPv6SKKZ_U7MLWmAe_eUajipnbqZ6NzG8UcG4qAt278ttZB1KQsKqocKlE39fSvo3iaZEzOKxS0N3tU1Xw2C3w6HgHJFk0QiP36NIHuKoP_4QJkeAomhJX-cNOYwvTd8qTFTk2-1TzLJ5DasLXsVXTUSUzCzYQhEfL8F0qFoGvuY1dWRD5BESw2Gg2oLH1w957Xd2UhRbo5ORz9POR7goEv9AZ_rWrjSV8HozUmgFwDQyM89M7oiNedEfGQoDjypzcUBcVkZLEMIdrFRpshjcpNEzy6-PZ9rSxouKb7wemG_sueX3V3gIPCTfFr6hB8_b2mV-kKeIXQRS5pJz_wXxeFHFKOHDjt3L8n5eqh.fy-zygX7rjTUqgX02sZKKg"
node_id: "92a499fc2ce7cabd2de89416aa0d0d07838f625d"
secret:
name: keys-da-bridge-1
config:
configtoml:
Core:
IP: consensus-validator
RPC:
Enabled: true
Address: 0.0.0.0
Gateway:
Enabled: true
Address: 0.0.0.0
Node:
StartupTimeout: 2m
diagnosticMode:
enabled: false
72 changes: 72 additions & 0 deletions examples/celestia-node/arabica-light.yaml
Original file line number Diff line number Diff line change
@@ -0,0 +1,72 @@
commonLabels: &commonLabels
chain_id: arabica-11
environment: arabica
network: da
type: &nodeType light # check
secretName: &secretName keys-da-bridge-1 # check
pool: &pool pool-da-0 # check
service:
external:
annotations:
external-dns.alpha.kubernetes.io/endpoints-type: "NodeExternalIP"
external-dns.alpha.kubernetes.io/hostname: "hc-da-light-1.celestia-arabica-11.com"
external-dns.alpha.kubernetes.io/ttl: "60"
persistence:
size: 10Gi
node:
nodeSelector:
k8s.scaleway.com/pool-name: *pool
persistentVolumeClaimRetentionPolicy:
whenDeleted: Delete
whenScaled: Retain
otelAgent:
enabled: true
grafanaOtelSecret:
name: grafana-otel-token
resources:
requests:
cpu: 3
memory: 15Gi
limits:
cpu: 6
memory: 24Gi
livenessProbe:
enabled: true
periodSeconds: 10
failureThreshold: 3
readinessProbe:
enabled: true
periodSeconds: 10
failureThreshold: 30
startupProbe:
enabled: true
periodSeconds: 10
failureThreshold: 60
args:
- *nodeType
- start
- --p2p.network=arabica-11
- --node.store=$(CELESTIA_HOME)
- --metrics
- --metrics.tls=false
- --p2p.metrics
settings:
nodeType: *nodeType
address: "eyJhbGciOiJQQkVTMi1IUzI1NitBMTI4S1ciLCJjcmVhdGVkIjoiMjAyNC0wMS0wMiAxMjo1NzoyMC4yNjk1Mjg2NTQgKzAwMDAgVVRDIG09KzAuMDQwNDkyNDk0IiwiZW5jIjoiQTI1NkdDTSIsInAyYyI6ODE5MiwicDJzIjoibHBUb0pLUkFvS3NPbmRhaCJ9.SFen5RaM_7JverpZQN6VxtJ06XePE5VKjyzMyIPgqURSge-XbiLHqA.vZ4fuVFbrLODe8RM.EGKwO3uGEifnPanziF-AD4i6q_92IetSVAEz-7Grg75AJyFLV3Flt4CmfLxrJ2JHWJEKUQBNyIU81u7pd01iNzEECDy9b0jO3DYZ_5PRET8zrVPv6SKKZ_U7MLWmAe_eUajipnbqZ6NzG8UcG4qAt278ttZB1KQsKqocKlE39fSvo3iaZEzOKxS0N3tU1Xw2C3w6HgHJFk0QiP36NIHuKoP_4QJkeAomhJX-cNOYwvTd8qTFTk2-1TzLJ5DasLXsVXTUSUzCzYQhEfL8F0qFoGvuY1dWRD5BESw2Gg2oLH1w957Xd2UhRbo5ORz9POR7goEv9AZ_rWrjSV8HozUmgFwDQyM89M7oiNedEfGQoDjypzcUBcVkZLEMIdrFRpshjcpNEzy6-PZ9rSxouKb7wemG_sueX3V3gIPCTfFr6hB8_b2mV-kKeIXQRS5pJz_wXxeFHFKOHDjt3L8n5eqh.fy-zygX7rjTUqgX02sZKKg"
node_id: "92a499fc2ce7cabd2de89416aa0d0d07838f625d"
secret:
name: *secretName
config:
configtoml:
Core:
IP: consensus-validator
RPC:
Enabled: true
Address: 0.0.0.0
Gateway:
Enabled: true
Address: 0.0.0.0
Node:
StartupTimeout: 2m
diagnosticMode:
enabled: false