Deploy IDA to a Kubernetes cluster for production use.
Prerequisites
| Tool | Version |
|---|---|
| kubectl | 1.28+ |
| Helm | 3.14+ |
| Kubernetes cluster | 1.28+ |
Quick Deploy
# Add IDA Helm repohelm repo add ida https://charts.ida.infinia.iohelm repo update# Install IDAhelm install ida ida/ida-platform \--namespace ida \--create-namespace \--values values-production.yaml
Namespace Structure
ida/ida-api (Deployment, 3 replicas)ida-resolver (Deployment, 2 replicas)ida-portal (Deployment, 2 replicas)postgres (StatefulSet, 1 replica)redis (StatefulSet, 1 replica)nats (StatefulSet, 3 replicas)ida-blockchain/adi-node-validator-0 (StatefulSet)adi-node-validator-1 (StatefulSet)adi-node-observer-0 (StatefulSet)
Manual Deployment (kubectl)
Namespace
apiVersion: v1kind: Namespacemetadata:name: ida
API Deployment
apiVersion: apps/v1kind: Deploymentmetadata:name: ida-apinamespace: idaspec:replicas: 3selector:matchLabels:app: ida-apitemplate:metadata:labels:app: ida-apispec:containers:- name: ida-apiimage: infinia/ida-api:latestports:- containerPort: 8080env:- name: DATABASE_URLvalueFrom:secretKeyRef:name: ida-secretskey: database-url- name: REDIS_URLvalue: redis://redis:6379- name: ADI_RPC_URLvalue: http://adi-node-validator-0.ida-blockchain:8545- name: NATS_URLvalue: nats://nats:4222- name: LOG_LEVELvalue: inforesources:requests:cpu: 500mmemory: 512Milimits:cpu: 2000mmemory: 2GilivenessProbe:httpGet:path: /healthport: 8080initialDelaySeconds: 10periodSeconds: 15readinessProbe:httpGet:path: /healthport: 8080initialDelaySeconds: 5periodSeconds: 5---apiVersion: v1kind: Servicemetadata:name: ida-apinamespace: idaspec:selector:app: ida-apiports:- port: 8080targetPort: 8080type: ClusterIP
Ingress
apiVersion: networking.k8s.io/v1kind: Ingressmetadata:name: ida-ingressnamespace: idaannotations:cert-manager.io/cluster-issuer: letsencrypt-prodnginx.ingress.kubernetes.io/rate-limit: "100"spec:tls:- hosts:- api.ida.infinia.io- portal.ida.infinia.iosecretName: ida-tlsrules:- host: api.ida.infinia.iohttp:paths:- path: /pathType: Prefixbackend:service:name: ida-apiport:number: 8080- host: portal.ida.infinia.iohttp:paths:- path: /pathType: Prefixbackend:service:name: ida-portalport:number: 80
Secrets
apiVersion: v1kind: Secretmetadata:name: ida-secretsnamespace: idatype: OpaquestringData:database-url: postgres://ida:password@postgres:5432/ida?sslmode=requireredis-password: redis-secretapi-signing-key: your-signing-key
Helm Chart Values
values-production.yaml
global:environment: productiondomain: ida.infinia.ioapi:replicas: 3image:repository: infinia/ida-apitag: "1.0.0"resources:requests:cpu: 500mmemory: 512Milimits:cpu: 2000mmemory: 2Giautoscaling:enabled: trueminReplicas: 3maxReplicas: 10targetCPU: 70resolver:replicas: 2image:repository: infinia/ida-resolvertag: "1.0.0"portal:replicas: 2image:repository: infinia/ida-portaltag: "1.0.0"postgres:enabled: truepersistence:size: 100GistorageClass: gp3redis:enabled: truepersistence:size: 10Ginats:enabled: truereplicas: 3blockchain:validators: 2observers: 1persistence:size: 500Gimonitoring:enabled: trueprometheus:enabled: truegrafana:enabled: trueingress:enabled: trueclassName: nginxtls: truecertManager: true
Monitoring
Prometheus ServiceMonitor
apiVersion: monitoring.coreos.com/v1kind: ServiceMonitormetadata:name: ida-apinamespace: idaspec:selector:matchLabels:app: ida-apiendpoints:- port: metricsinterval: 15spath: /metrics
Scaling
# Scale API replicaskubectl scale deployment ida-api --replicas=5 -n ida# Enable HPAkubectl autoscale deployment ida-api --min=3 --max=10 --cpu-percent=70 -n ida