Files
smom-dbis-138/k8s/base/validators/statefulset.yaml
defiQUG 1fb7266469 Add Oracle Aggregator and CCIP Integration
- Introduced Aggregator.sol for Chainlink-compatible oracle functionality, including round-based updates and access control.
- Added OracleWithCCIP.sol to extend Aggregator with CCIP cross-chain messaging capabilities.
- Created .gitmodules to include OpenZeppelin contracts as a submodule.
- Developed a comprehensive deployment guide in NEXT_STEPS_COMPLETE_GUIDE.md for Phase 2 and smart contract deployment.
- Implemented Vite configuration for the orchestration portal, supporting both Vue and React frameworks.
- Added server-side logic for the Multi-Cloud Orchestration Portal, including API endpoints for environment management and monitoring.
- Created scripts for resource import and usage validation across non-US regions.
- Added tests for CCIP error handling and integration to ensure robust functionality.
- Included various new files and directories for the orchestration portal and deployment scripts.
2025-12-12 14:57:48 -08:00

257 lines
6.4 KiB
YAML

apiVersion: apps/v1
kind: StatefulSet
metadata:
name: besu-validator
namespace: besu-network
labels:
app: besu
component: validator
spec:
serviceName: besu-validator
replicas: 4
selector:
matchLabels:
app: besu
component: validator
template:
metadata:
labels:
app: besu
component: validator
spec:
# Tolerate validator node taint
tolerations:
- key: role
operator: Equal
value: validator
effect: NoSchedule
# Node selector for validator pool
nodeSelector:
pool: validators
role: validator
# Anti-affinity: spread validators across zones
affinity:
podAntiAffinity:
preferredDuringSchedulingIgnoredDuringExecution:
- weight: 100
podAffinityTerm:
labelSelector:
matchExpressions:
- key: component
operator: In
values:
- validator
topologyKey: topology.kubernetes.io/zone
# Init container to prepare config
initContainers:
- name: config-init
image: busybox:1.36
command:
- sh
- -c
- |
cp /config-source/* /config-dest/
chmod -R 644 /config-dest/*
volumeMounts:
- name: config-source
mountPath: /config-source
- name: config-dest
mountPath: /config-dest
resources:
requests:
cpu: "10m"
memory: "32Mi"
limits:
cpu: "100m"
memory: "64Mi"
containers:
- name: besu
image: hyperledger/besu:23.10.0
imagePullPolicy: IfNotPresent
command:
- /opt/besu/bin/besu
- --config-file=/config/besu-config.toml
ports:
- name: p2p
containerPort: 30303
protocol: TCP
- name: p2p-udp
containerPort: 30303
protocol: UDP
- name: metrics
containerPort: 9545
protocol: TCP
env:
- name: BESU_OPTS
value: ""
- name: JAVA_OPTS
value: "-Xmx4g -Xms4g"
resources:
requests:
cpu: "2"
memory: "4Gi"
limits:
cpu: "4"
memory: "8Gi"
volumeMounts:
- name: data
mountPath: /data
- name: config
mountPath: /config
- name: keys
mountPath: /keys
readOnly: true
livenessProbe:
httpGet:
path: /metrics
port: metrics
initialDelaySeconds: 120
periodSeconds: 30
timeoutSeconds: 10
failureThreshold: 3
readinessProbe:
httpGet:
path: /metrics
port: metrics
initialDelaySeconds: 60
periodSeconds: 10
timeoutSeconds: 5
failureThreshold: 3
startupProbe:
httpGet:
path: /metrics
port: metrics
initialDelaySeconds: 30
periodSeconds: 10
timeoutSeconds: 5
failureThreshold: 30
volumes:
- name: config-source
configMap:
name: besu-validator-config
- name: keys
secret:
secretName: besu-validator-keys
volumeClaimTemplates:
- metadata:
name: data
spec:
accessModes:
- ReadWriteOnce
storageClassName: managed-premium
resources:
requests:
storage: 512Gi
---
apiVersion: v1
kind: ConfigMap
metadata:
name: besu-validator-config
namespace: besu-network
data:
besu-config.toml: |
data-path="/data/besu"
genesis-file="/config/genesis.json"
network-id=138
p2p-host="0.0.0.0"
p2p-port=30303
consensus-protocol="ibft2"
miner-enabled=false
sync-mode="FULL"
rpc-http-enabled=false
rpc-ws-enabled=false
metrics-enabled=true
metrics-port=9545
metrics-host="0.0.0.0"
logging="INFO"
permissions-nodes-config-file-enabled=true
permissions-nodes-config-file="/config/permissions-nodes.toml"
permissions-accounts-config-file-enabled=true
permissions-accounts-config-file="/config/permissions-accounts.toml"
static-nodes-file="/config/static-nodes.json"
genesis.json: |
{
"config": {
"chainId": 138,
"berlinBlock": 0,
"londonBlock": 0,
"istanbulBlock": 0,
"clique": null,
"ibft2": {
"blockperiodseconds": 2,
"epochlength": 30000,
"requesttimeoutseconds": 10
},
"ethash": {}
},
"nonce": "0x0",
"timestamp": "0x0",
"gasLimit": "0x1c9c380",
"difficulty": "0x1",
"mixHash": "0x63746963616c2062797a616e74696e65206661756c7420746f6c6572616e6365",
"coinbase": "0x0000000000000000000000000000000000000000",
"alloc": {
"0x0000000000000000000000000000000000000001": {
"balance": "0x1"
},
"0x0000000000000000000000000000000000000002": {
"balance": "0x1"
},
"0x0000000000000000000000000000000000000003": {
"balance": "0x1"
},
"0x0000000000000000000000000000000000000004": {
"balance": "0x1"
}
},
"extraData": "0x",
"number": "0x0",
"gasUsed": "0x0",
"parentHash": "0x0000000000000000000000000000000000000000000000000000000000000000"
}
permissions-accounts.toml: |
accounts-allowlist=[]
static-nodes.json: |
[]
---
apiVersion: v1
kind: Service
metadata:
name: besu-validator
namespace: besu-network
labels:
app: besu
component: validator
spec:
type: ClusterIP
clusterIP: None
ports:
- name: p2p
port: 30303
targetPort: p2p
protocol: TCP
- name: p2p-udp
port: 30303
targetPort: p2p-udp
protocol: UDP
- name: metrics
port: 9545
targetPort: metrics
protocol: TCP
selector:
app: besu
component: validator
---
apiVersion: policy/v1
kind: PodDisruptionBudget
metadata:
name: besu-validator-pdb
namespace: besu-network
spec:
minAvailable: 3
selector:
matchLabels:
app: besu
component: validator