Skip to content

Custom Resource Definitions (CRDs) API Reference

This page provides a detailed reference for the available Custom Resource Definitions (CRDs) in Cosmopilot. Each CRD defines the specifications and configuration options for managing Cosmos-based blockchain nodes in Kubernetes.

Custom Resources

Sub Resources

ChainNode

ChainNode is the Schema for the chainnodes API.

FieldDescriptionSchemeRequired
metadatametav1.ObjectMetafalse
specChainNodeSpecfalse
statusChainNodeStatusfalse

Back to Custom Resources

ChainNodeList

ChainNodeList contains a list of ChainNode.

FieldDescriptionSchemeRequired
metadatametav1.ListMetafalse
items[]ChainNodetrue

Back to Custom Resources

ChainNodeSpec

ChainNodeSpec defines the desired state of ChainNode.

FieldDescriptionSchemeRequired
genesisIndicates where this node will get the genesis from. Can be omitted when .spec.validator.init is specified.*GenesisConfigtrue
appSpecifies image, version and binary name of the chain application to run. It also allows to schedule upgrades, or setting/updating the image for an on-chain upgrade.AppSpectrue
configAllows setting specific configurations for this node.*Configfalse
persistenceConfigures PVC for persisting data. Automated data snapshots can also be configured in this section.*Persistencefalse
validatorIndicates this node is going to be a validator and allows configuring it.*ValidatorConfigfalse
autoDiscoverPeersEnsures peers with same chain ID are connected with each other. Enabled by default.*boolfalse
stateSyncRestoreConfigures this node to find a state-sync snapshot on the network and restore from it. This is disabled by default.*boolfalse
peersAdditional persistent peers that should be added to this node.[]Peerfalse
exposeAllows exposing P2P traffic to public.*ExposeConfigfalse
resourcesCompute Resources required by the app container.corev1.ResourceRequirementsfalse
nodeSelectorSelector which must be true for the pod to fit on a node. Selector which must match a node's labels for the pod to be scheduled on that node.map[string]stringfalse
affinityIf specified, the pod's scheduling constraints.*corev1.Affinityfalse
ignoreGroupOnDisruptionChecksWhether ChainNodeSet group label should be ignored on pod disruption checks. This is useful to ensure no downtime globally or per global ingress, instead of just per group. Defaults to false.*boolfalse
vpaVertical Pod Autoscaling configuration for this node.*VerticalAutoscalingConfigfalse
overrideVersionOverrideVersion will force this node to use the specified version. NOTE: when this is set, cosmopilot will not upgrade the node, nor will set the version based on upgrade history.*stringfalse
ingressIndicates if an ingress should be created to access API endpoints of this node and configures it.*IngressConfigfalse

Back to Custom Resources

ChainNodeStatus

ChainNodeStatus defines the observed state of ChainNode

FieldDescriptionSchemeRequired
phaseIndicates the current phase for this ChainNode.ChainNodePhasefalse
conditionsConditions to track state of the ChainNode.[]metav1.Conditionfalse
nodeIDIndicates this node's ID.stringfalse
ipInternal IP address of this node.stringfalse
publicAddressPublic address for P2P when enabled.stringfalse
chainIDIndicates the chain ID.stringfalse
pvcSizeCurrent size of the data PVC for this node.stringfalse
dataUsageUsage percentage of data volume.stringfalse
validatorIndicates if this node is a validator.booltrue
accountAddressAccount address of this validator. Omitted when not a validator.stringfalse
validatorAddressValidator address is the valoper address of this validator. Omitted when not a validator.stringfalse
jailedIndicates if this validator is jailed. Always false if not a validator node.boolfalse
appVersionApplication version currently deployed.stringfalse
latestHeightLast height read on the node by cosmopilot.int64false
seedModeIndicates if this node is running with seed mode enabled.boolfalse
upgradesAll scheduled/completed upgrades performed by cosmopilot on this ChainNode.[]Upgradefalse
pubKeyPublic key of the validator.stringfalse
validatorStatusIndicates the current status of validator if this node is one.ValidatorStatusfalse

Back to Custom Resources

ValidatorConfig

ValidatorConfig contains the configuration for running a node as validator.

FieldDescriptionSchemeRequired
privateKeySecretIndicates the secret containing the private key to be used by this validator. Defaults to <chainnode>-priv-key. Will be created if it does not exist.*stringfalse
infoContains information details about this validator.*ValidatorInfofalse
initSpecifies configs and initialization commands for creating a new genesis.*GenesisInitConfigfalse
tmKMSTmKMS configuration for signing commits for this validator. When configured, .spec.validator.privateKeySecret will not be mounted on the validator node.*TmKMSfalse
createValidatorIndicates that cosmopilot should run create-validator tx to make this node a validator.*CreateValidatorConfigfalse

Back to Custom Resources

ChainNodeSet

ChainNodeSet is the Schema for the chainnodesets API.

FieldDescriptionSchemeRequired
metadatametav1.ObjectMetafalse
specChainNodeSetSpecfalse
statusChainNodeSetStatusfalse

Back to Custom Resources

ChainNodeSetList

ChainNodeSetList contains a list of ChainNodeSet.

FieldDescriptionSchemeRequired
metadatametav1.ListMetafalse
items[]ChainNodeSettrue

Back to Custom Resources

ChainNodeSetNodeStatus

ChainNodeSetNodeStatus contains information about a node running on this ChainNodeSet.

FieldDescriptionSchemeRequired
nameName of the node.stringtrue
publicWhether this node can be accessed publicly.booltrue
seedIndicates if this node is running in seed mode.booltrue
idID of this node.stringtrue
addressHostname or IP address to reach this node internally.stringtrue
publicAddressHostname or IP address to reach this node publicly.stringfalse
publicPortPort to reach this node publicly.intfalse
portP2P port for connecting to this node.inttrue
groupGroup to which this ChainNode belongs.stringfalse

Back to Custom Resources

ChainNodeSetSpec

ChainNodeSetSpec defines the desired state of ChainNode.

FieldDescriptionSchemeRequired
appSpecifies image, version and binary name of the chain application to run. It also allows to schedule upgrades, or setting/updating the image for an on-chain upgrade.AppSpectrue
genesisIndicates where this node will get the genesis from. Can be omitted when .spec.validator.init is specified.*GenesisConfigtrue
validatorIndicates this node set will run a validator and allows configuring it.*NodeSetValidatorConfigfalse
nodesList of groups of ChainNodes to be run.[]NodeGroupSpectrue
ingressesList of ingresses to create for this ChainNodeSet. This allows to create ingresses targeting multiple groups of nodes.[]GlobalIngressConfigfalse
cosmoseedAllows deploying seed nodes using Cosmoseed.*CosmoseedConfigfalse

Back to Custom Resources

ChainNodeSetStatus

ChainNodeSetStatus defines the observed state of ChainNodeSet.

FieldDescriptionSchemeRequired
phaseIndicates the current phase for this ChainNodeSet.ChainNodeSetPhasefalse
chainIDIndicates the chain ID.stringfalse
instancesIndicates the total number of ChainNode instances on this ChainNodeSet.intfalse
appVersionThe application version currently deployed.stringfalse
nodesNodes available on this nodeset. Excludes validator node.[]ChainNodeSetNodeStatusfalse
validatorAddressValidator address of the validator in this ChainNodeSet if one is available. Omitted when no validator is present in the ChainNodeSet.stringfalse
validatorStatusCurrent status of validator if this ChainNodeSet has one.ValidatorStatusfalse
pubKeyPublic key of the validator if this ChainNodeSet has one.stringfalse
upgradesAll scheduled/completed upgrades performed by cosmopilot on ChainNodes of this CHainNodeSet.[]Upgradefalse
latestHeightLast height read on the nodes by cosmopilot.int64false
seedsStatus of seed nodes (cosmoseed)[]SeedStatusfalse

Back to Custom Resources

CosmoseedConfig

FieldDescriptionSchemeRequired
enabledWhether to enable deployment of Cosmoseed. If false or unset, no seed node instances will be created.*boolfalse
instancesNumber of seed node instances to deploy. Defaults to 1.*intfalse
exposeConfiguration for exposing the P2P endpoint (e.g., via LoadBalancer or NodePort).*ExposeConfigfalse
resourcesCompute Resources to be applied on the cosmoseed container.corev1.ResourceRequirementsfalse
allowNonRoutableUsed to enforce strict routability rules for peer addresses. Set to false to only accept publicly routable IPs (recommended for public networks). Set to true to allow local/private IPs (e.g., in testnets or dev environments). Defaults to false.*boolfalse
maxInboundPeersMaximum number of inbound P2P connections. Defaults to 2000.*intfalse
maxOutboundPeersMaximum number of outbound P2P connections. Defaults to 20.*intfalse
peerQueueSizeSize of the internal peer queue used by dial workers in the PEX reactor. This queue holds peers to be dialed; dial workers consume from it. If the queue is full, new discovered peers may be discarded. Use together with DialWorkers to control peer discovery throughput. Defaults to 1000.*intfalse
dialWorkersNumber of concurrent dialer workers used for outbound peer discovery. Each worker fetches peers from the queue (PeerQueueSize) and attempts to dial them. Higher values increase parallelism, but may increase CPU/network load. Defaults to 20.*intfalse
maxPacketMsgPayloadSizeMaximum size (in bytes) of packet message payloads over P2P. Defaults to 1024.*intfalse
additionalSeedsAdditional seed nodes to append to the node’s default seed list. Comma-separated list in the format nodeID@ip:port.*stringfalse
logLevelLog level of cosmoseed. Defaults to info.*stringfalse
ingressIngress configuration for cosmoseed nodes.*CosmoseedIngressConfigfalse

Back to Custom Resources

CosmoseedIngressConfig

FieldDescriptionSchemeRequired
hostHost in which cosmoseed nodes will be exposed.stringtrue
annotationsAnnotations to be appended to the ingress.map[string]stringfalse
disableTLSWhether to disable TLS on ingress resource.boolfalse
tlsSecretNameName of the secret containing TLS certificate.*stringfalse
ingressClassIngressClass specifies the ingress class to be used on ingresses*stringfalse

Back to Custom Resources

GlobalIngressConfig

GlobalIngressConfig specifies configurations for ingress to expose API endpoints of several groups of nodes.

FieldDescriptionSchemeRequired
nameThe name of this ingressstringtrue
groupsGroups of nodes to which this ingress will point to.[]stringtrue
enableRPCEnable RPC endpoint.boolfalse
enableGRPCEnable gRPC endpoint.boolfalse
enableLCDEnable LCD endpoint.boolfalse
enableEvmRPCEnable EVM RPC endpoint.boolfalse
enableEvmRpcWSEnable EVM RPC Websocket endpoint.boolfalse
hostHost in which endpoints will be exposed. Endpoints are exposed on corresponding subdomain of this host. An example host nodes.example.com will have endpoints exposed at rpc.nodes.example.com, grpc.nodes.example.com and lcd.nodes.example.com.stringtrue
annotationsAnnotations to be set on ingress resource.map[string]stringfalse
disableTLSWhether to disable TLS on ingress resource.boolfalse
tlsSecretNameName of the secret containing TLS certificate.*stringfalse
grpcAnnotationsGrpcAnnotations to be set on grpc ingress resource. Defaults to nginx annotation nginx.ingress.kubernetes.io/backend-protocol: GRPC if nginx ingress class is used.map[string]stringfalse
ingressClassIngressClass specifies the ingress class to be used on ingresses*stringfalse
useInternalServicesUseInternalServices configures Ingress to route traffic directly to the node services, bypassing Cosmoguard and any readiness checks. This is only recommended for debugging or for private/internal traffic (e.g., when accessing the cluster over a VPN).*boolfalse
servicesOnlyServicesOnly indicates that only global services should be created. No ingress resources will be created. Useful for usage with custom controllers that have their own CRDs.*boolfalse

Back to Custom Resources

IndividualIngressConfig

FieldDescriptionSchemeRequired
hoststringtrue

Back to Custom Resources

IngressConfig

IngressConfig specifies configurations for ingress to expose API endpoints.

FieldDescriptionSchemeRequired
enableRPCEnable RPC endpoint.boolfalse
enableGRPCEnable gRPC endpoint.boolfalse
enableLCDEnable LCD endpoint.boolfalse
enableEvmRPCEnable EVM RPC endpoint.boolfalse
enableEvmRpcWSEnable EVM RPC Websocket endpoint.boolfalse
hostHost in which endpoints will be exposed. Endpoints are exposed on corresponding subdomain of this host. An example host nodes.example.com will have endpoints exposed at rpc.nodes.example.com, grpc.nodes.example.com and lcd.nodes.example.com.stringtrue
annotationsAnnotations to be appended to the ingress.map[string]stringfalse
disableTLSWhether to disable TLS on ingress resource.boolfalse
tlsSecretNameName of the secret containing TLS certificate.*stringfalse
grpcAnnotationsGrpcAnnotations to be set on grpc ingress resource. Defaults to nginx annotation nginx.ingress.kubernetes.io/backend-protocol: GRPC if nginx ingress class is used.map[string]stringfalse
ingressClassIngressClass specifies the ingress class to be used on ingresses*stringfalse
useInternalServicesUseInternalServices configures Ingress to route traffic directly to the node services, bypassing Cosmoguard and any readiness checks. This is only recommended for debugging or for private/internal traffic (e.g., when accessing the cluster over a VPN).*boolfalse

Back to Custom Resources

NodeGroupSpec

NodeGroupSpec sets chainnode configurations for a group.

FieldDescriptionSchemeRequired
nameName of this group.stringtrue
instancesNumber of ChainNode instances to run on this group.*intfalse
configSpecific configurations for these nodes.*Configfalse
persistenceConfigures PVC for persisting data. Automated data snapshots can also be configured in this section.*Persistencefalse
peersAdditional persistent peers that should be added to these nodes.[]Peerfalse
exposeAllows exposing P2P traffic to public.*ExposeConfigfalse
ingressIngress defines configuration for exposing API endpoints through a single shared Ingress, which routes traffic to the group Service backing all nodes in this set. This results in load-balanced access across all nodes (e.g., round-robin). See IngressConfig for detailed endpoint and TLS settings.*IngressConfigfalse
individualIngressesIndividualIngresses defines configuration for exposing API endpoints through separate Ingress resources per node in the set. Each Ingress routes traffic directly to its corresponding node's Service (i.e., no load balancing across nodes).\n\nThe same IngressConfig is reused for all nodes, but the host field will be prefixed with the node index to generate unique subdomains. For example, if host = \"fullnodes.cosmopilot.local\", then node ingress domains will be:\n - 0.fullnodes.cosmopilot.local\n - 1.fullnodes.cosmopilot.local\n - etc.\n\nThis mode allows targeting specific nodes individually.*IngressConfigfalse
resourcesCompute Resources required by the app container.corev1.ResourceRequirementsfalse
nodeSelectorSelector which must be true for the pod to fit on a node. Selector which must match a node's labels for the pod to be scheduled on that node.map[string]stringfalse
affinityIf specified, the pod's scheduling constraints.*corev1.Affinityfalse
stateSyncRestoreConfigures these nodes to find state-sync snapshots on the network and restore from it. This is disabled by default.*boolfalse
inheritValidatorGasPriceWhether these nodes should inherit gas price from validator (if there is not configured on this ChainNodeSet) Defaults to true.*boolfalse
ignoreGroupOnDisruptionChecksWhether ChainNodeSet group label should be ignored on pod disruption checks. This is useful to ensure no downtime globally or per global ingress, instead of just per group. Defaults to false.*boolfalse
vpaVertical Pod Autoscaling configuration for this node.*VerticalAutoscalingConfigfalse
pdbPod Disruption Budget configuration for this group.*PdbConfigfalse
snapshotNodeIndexIndex of the node in the group to take volume snapshots from (if enabled). Defaults to 0.*intfalse
overrideVersionOverrideVersion will force this group to use the specified version. NOTE: when this is set, cosmopilot will not upgrade the nodes, nor will set the version based on upgrade history. For unsetting this, you will have to do it here and individually per ChainNode*stringfalse

Back to Custom Resources

NodeSetValidatorConfig

NodeSetValidatorConfig contains validator configurations.

FieldDescriptionSchemeRequired
privateKeySecretSecret containing the private key to be used by this validator. Defaults to <chainnode>-priv-key. Will be created if it does not exist.*stringfalse
infoContains information details about the validator.*ValidatorInfofalse
initSpecifies configs and initialization commands for creating a new genesis.*GenesisInitConfigfalse
configAllows setting specific configurations for the validator.*Configfalse
persistenceConfigures PVC for persisting data. Automated data snapshots can also be configured in this section.*Persistencefalse
resourcesCompute Resources required by the app container.corev1.ResourceRequirementsfalse
nodeSelectorSelector which must be true for the pod to fit on a node. Selector which must match a node's labels for the pod to be scheduled on that node.map[string]stringfalse
affinityIf specified, the pod's scheduling constraints.*corev1.Affinityfalse
tmKMSTmKMS configuration for signing commits for this validator. When configured, .spec.validator.privateKeySecret will not be mounted on the validator node.*TmKMSfalse
stateSyncRestoreConfigures this node to find a state-sync snapshot on the network and restore from it. This is disabled by default.*boolfalse
createValidatorIndicates cosmopilot should run create-validator tx to make this node a validator.*CreateValidatorConfigfalse
vpaVertical Pod Autoscaling configuration for this node.*VerticalAutoscalingConfigfalse
pdbPod Disruption Budget configuration for the validator pod. This is mainly useful in testnets where multiple validators might run in the same namespace. In production mainnet environments, where typically only one validator runs per namespace, this is rarely needed.*PdbConfigfalse
overrideVersionOverrideVersion will force validator to use the specified version. NOTE: when this is set, cosmopilot will not upgrade the node, nor will set the version based on upgrade history. For unsetting this, you will have to do it here and on the ChainNode itself.*stringfalse
ingressIndicates if an ingress should be created to access API endpoints of validator node and configures it.*IngressConfigfalse

Back to Custom Resources

PdbConfig

FieldDescriptionSchemeRequired
enabledWhether to deploy a Pod Disruption Budgetbooltrue
minAvailableMinAvailable indicates minAvailable field set in PDB. Defaults to the number of instances in the group minus 1, i.e. it allows only a single disruption.*intfalse

Back to Custom Resources

SeedStatus

FieldDescriptionSchemeRequired
namestringtrue
idstringtrue
publicAddressstringfalse

Back to Custom Resources

AccountAssets

AccountAssets represents the assets associated with an account.

FieldDescriptionSchemeRequired
addressAddress of the account.stringtrue
assetsAssets assigned to this account.[]stringtrue

Back to Custom Resources

AppSpec

AppSpec specifies the source image, version and binary name of the app to run. Also allows specifying upgrades for the app and enabling automatic check of upgrade proposals on chain.

FieldDescriptionSchemeRequired
imageContainer image to be used.stringtrue
versionImage tag to be used. Once there are completed or skipped upgrades this will be ignored. For a new node that will be state-synced, this will be the version used during state-sync. Only after that, the cosmopilot will switch to the version of last upgrade. Defaults to latest.*stringfalse
imagePullPolicyIndicates the desired pull policy when creating nodes. Defaults to Always if version is latest and IfNotPresent otherwise.corev1.PullPolicyfalse
appBinary name of the application to be run.stringtrue
sdkVersionSdkVersion specifies the version of cosmos-sdk used by this app. Valid options are: - "v0.47" (default) - "v0.45"*SdkVersionfalse
checkGovUpgradesWhether cosmopilot should query gov proposals to find and schedule upgrades. Defaults to true.*boolfalse
upgradesList of upgrades to schedule for this node.[]UpgradeSpecfalse

Back to Custom Resources

ChainNodeAssets

ChainNodeAssets represents the assets associated with an account from another ChainNode.

FieldDescriptionSchemeRequired
chainNodeName of the ChainNode.stringtrue
assetsAssets assigned to this account.[]stringtrue

Back to Custom Resources

Config

Config allows setting specific configurations for a node, including overriding configs in app.toml and config.toml.

FieldDescriptionSchemeRequired
overrideAllows overriding configs on .toml configuration files.*map[string]runtime.RawExtensionfalse
sidecarsAllows configuring additional containers to run alongside the node.[]SidecarSpecfalse
imagePullSecretsOptional list of references to secrets in the same namespace to use for pulling any of the images used by this node.[]corev1.LocalObjectReferencefalse
blockThresholdThe time to wait for a block before considering node unhealthy. Defaults to 15s.*stringfalse
reconcilePeriodPeriod at which a reconcile loop will happen for this ChainNode. Defaults to 15s.*stringfalse
stateSyncAllows configuring this node to perform state-sync snapshots.*StateSyncConfigfalse
seedModeConfigures this node to run on seed mode. Defaults to false.*boolfalse
envList of environment variables to set in the app container.[]corev1.EnvVarfalse
safeToEvictSafeToEvict sets cluster-autoscaler.kubernetes.io/safe-to-evict annotation to the given value. It allows/disallows cluster-autoscaler to evict this node's pod.*boolfalse
cosmoGuardDeploys CosmoGuard to protect API endpoints of the node.*CosmoGuardConfigfalse
nodeUtilsLogLevelLog level for node-utils container. Defaults to info.*stringfalse
startupTimeThe time after which a node will be restarted if it does not start properly. Defaults to 1h.*stringfalse
ignoreSyncingMarks the node as ready even when it is catching up. This is useful when a chain is halted, but you still need the node to be ready for querying existing data. Defaults to false.*boolfalse
nodeUtilsResourcesCompute Resources for node-utils container.*corev1.ResourceRequirementsfalse
persistAddressBookWhether to persist address book file in data directory. Defaults to false.*boolfalse
terminationGracePeriodSecondsOptional duration in seconds the pod needs to terminate gracefully.*int64false
evmEnabledWhether EVM is enabled on this node. Will add evm-rpc port to services. Defaults to false.*boolfalse
runFlagsList of flags to be appended to app container when starting the node.[]stringfalse
volumesAdditional volumes to be created and mounted on this node.[]VolumeSpecfalse
dashedConfigTomlWhether field naming in config.toml should use dashes instead of underscores. Defaults to false.*boolfalse
haltHeightThe block height at which the node should stop. Cosmopilot will not attempt to restart the node beyond this height.*int64false

Back to Custom Resources

CosmoGuardConfig

CosmoGuardConfig allows configuring CosmoGuard rules.

FieldDescriptionSchemeRequired
enableWhether to enable CosmoGuard on this node.booltrue
configConfigMap which CosmoGuard configuration for this node.*corev1.ConfigMapKeySelectortrue
restartPodOnFailureWhether the node's pod should be restarted when CosmoGuard fails.*boolfalse
resourcesCompute Resources for CosmoGuard container.*corev1.ResourceRequirementsfalse

Back to Custom Resources

CreateValidatorConfig

CreateValidatorConfig holds configuration for cosmopilot to submit a create-validator transaction.

FieldDescriptionSchemeRequired
accountMnemonicSecretName of the secret containing the mnemonic of the account to be used by this validator. Defaults to <chainnode>-account. Will be created if it does not exist.*stringfalse
accountHDPathHD path of accounts. Defaults to m/44'/118'/0'/0/0.*stringfalse
accountPrefixPrefix for accounts. Defaults to nibi.*stringfalse
valPrefixPrefix for validator operator accounts. Defaults to nibivaloper.*stringfalse
commissionMaxChangeRateMaximum commission change rate percentage (per day). Defaults to 0.1.*stringfalse
commissionMaxRateMaximum commission rate percentage. Defaults to 0.1.*stringfalse
commissionRateInitial commission rate percentage. Defaults to 0.1.*stringfalse
minSelfDelegationMinimum self delegation required on the validator. Defaults to 1.*stringfalse
stakeAmountAmount to be staked by this validator.stringtrue
gasPricesGas prices in decimal format to determine the transaction fee.stringtrue

Back to Custom Resources

ExportTarballConfig

ExportTarballConfig holds config options for tarball upload.

FieldDescriptionSchemeRequired
suffixSuffix to add to archive name. The name of the tarball will be <chain-id>-<timestamp>-<suffix>.*stringfalse
deleteOnExpireWhether to delete the tarball when the snapshot expires. Default is false.*boolfalse
gcsConfiguration to upload tarballs to a GCS bucket.*GcsExportConfigfalse

Back to Custom Resources

ExposeConfig

ExposeConfig allows configuring how P2P endpoint is exposed to public.

FieldDescriptionSchemeRequired
p2pWhether to expose p2p endpoint for this node. Defaults to false.*boolfalse
p2pServiceTypeP2pServiceType indicates how P2P port will be exposed. Valid values are: - LoadBalancer - NodePort (default)*corev1.ServiceTypefalse
annotationsAnnotations to be appended to the p2p service.map[string]stringfalse

Back to Custom Resources

FromNodeRPCConfig

FromNodeRPCConfig holds configuration to retrieve genesis from an existing node using RPC endpoint.

FieldDescriptionSchemeRequired
secureDefines protocol to use. Defaults to false.boolfalse
hostnameHostname or IP address of the RPC serverstringtrue
portTCP port used for RPC queries on the RPC server. Defaults to 26657.*intfalse

Back to Custom Resources

GcsExportConfig

GcsExportConfig holds required settings to upload to GCS.

FieldDescriptionSchemeRequired
bucketName of the bucket to upload tarballs to.stringtrue
credentialsSecretSecret with the JSON credentials to upload to bucket.*corev1.SecretKeySelectortrue
sizeLimitSize limit at which the file will be split into multiple parts. Defaults to 5TB.*stringfalse
partSizeSize of each part when size-limit is crossed. Defaults to 500GB.*stringfalse
chunkSizeSize of each chunk uploaded in parallel to GCS. Defaults to 250MB.*stringfalse
bufferSizeSize of the buffer when streaming data to GCS. Defaults to 32MB.*stringfalse
concurrentJobsNumber of concurrent upload or delete jobs. Defaults to 10.*intfalse

Back to Custom Resources

GenesisConfig

GenesisConfig specifies how genesis will be retrieved.

FieldDescriptionSchemeRequired
urlURL to download the genesis from.*stringfalse
fromNodeRPCGet the genesis from an existing node using its RPC endpoint.*FromNodeRPCConfigfalse
genesisSHASHA256 to validate the genesis.*stringfalse
configMapConfigMap specifies a configmap to load the genesis from. It can also be used to specify the name of the configmap to store the genesis when retrieving genesis using other methods.*stringfalse
useDataVolumeUseDataVolume indicates that cosmopilot should save the genesis in the same volume as node data instead of a ConfigMap. This is useful for genesis whose size is bigger than ConfigMap limit of 1MiB. Ignored when genesis source is a ConfigMap. Defaults to false.*boolfalse
chainIDThe chain-id of the network. This is only used when useDataVolume is true. If not set, cosmopilot will download the genesis and extract chain-id from it. If set, cosmopilot will not download it and use a container to download the genesis directly into the volume instead. This is useful for huge genesis that might kill cosmopilot container for using too much memory.*stringfalse

Back to Custom Resources

GenesisInitConfig

GenesisInitConfig specifies configs and initialization commands for creating a new genesis.

FieldDescriptionSchemeRequired
chainIDChainID of the chain to initialize.stringtrue
accountMnemonicSecretName of the secret containing the mnemonic of the account to be used by this validator. Defaults to <chainnode>-account. Will be created if it does not exist.*stringfalse
accountHDPathHD path of accounts. Defaults to m/44'/118'/0'/0/0.*stringfalse
accountPrefixPrefix for accounts. Defaults to nibi.*stringfalse
valPrefixPrefix for validator operator accounts. Defaults to nibivaloper.*stringfalse
commissionMaxChangeRateMaximum commission change rate percentage (per day). Defaults to 0.1.*stringfalse
commissionMaxRateMaximum commission rate percentage. Defaults to 0.1.*stringfalse
commissionRateInitial commission rate percentage. Defaults to 0.1.*stringfalse
minSelfDelegationMinimum self delegation required on the validator. Defaults to 1. NOTE: In most chains this is a required flag. However, in a few other chains (Cosmos Hub for example), this flag does not even exist anymore. In those cases, set it to an empty string and cosmopilot will skip it.*stringfalse
assetsAssets is the list of tokens and their amounts to be assigned to this validators account.[]stringtrue
stakeAmountAmount to be staked by this validator.stringtrue
accountsAccounts specify additional accounts and respective assets to be added to this chain.[]AccountAssetsfalse
chainNodeAccountsList of ChainNodes whose accounts should be included in genesis. NOTE: Cosmopilot will wait for the ChainNodes to exist and have accounts before proceeding.[]ChainNodeAssetsfalse
unbondingTimeTime required to totally unbond delegations. Defaults to 1814400s (21 days).*stringfalse
votingPeriodVoting period for this chain. Defaults to 120h.*stringfalse
additionalInitCommandsAdditional commands to run on genesis initialization. Note: App home is at /home/app and /temp is a temporary volume shared by all init containers.[]InitCommandfalse

Back to Custom Resources

InitCommand

InitCommand represents an initialization command. It may be used for running additional commands on genesis or volume initialization.

FieldDescriptionSchemeRequired
imageImage to be used to run this command. Defaults to app image.*stringfalse
commandCommand to be used. Defaults to image entrypoint.[]stringfalse
argsArgs to be passed to this command.[]stringtrue

Back to Custom Resources

Peer

Peer represents a peer.

FieldDescriptionSchemeRequired
idTendermint node ID for this node.stringtrue
addressHostname or IP address of this peer.stringtrue
portP2P port to be used. Defaults to 26656.*intfalse
unconditionalIndicates this peer is unconditional.*boolfalse
privateIndicates this peer is private.*boolfalse
seedIndicates this is a seed.*boolfalse

Back to Custom Resources

Persistence

Persistence configuration for a node.

FieldDescriptionSchemeRequired
sizeSize of the persistent volume for storing data. Can't be updated when autoResize is enabled. Defaults to 50Gi.*stringfalse
storageClassName of the storage class to use for the PVC. Uses the default class if not specified. to create persistent volumes.*stringfalse
autoResizeAutomatically resize PVC. Defaults to true.*boolfalse
autoResizeThresholdPercentage of data usage at which an auto-resize event should occur. Defaults to 80.*intfalse
autoResizeIncrementIncrement size on each auto-resize event. Defaults to 50Gi.*stringfalse
autoResizeMaxSizeSize at which auto-resize will stop incrementing PVC size. Defaults to 2Ti.*stringfalse
additionalInitCommandsAdditional commands to run on data initialization. Useful for downloading and extracting snapshots. App home is at /home/app and data dir is at /home/app/data. There is also /temp, a temporary volume shared by all init containers.[]InitCommandfalse
snapshotsWhether cosmopilot should create volume snapshots according to this config.*VolumeSnapshotsConfigfalse
restoreFromSnapshotRestore from the specified snapshot when creating the PVC for this node.*PvcSnapshotfalse
initTimeoutTime to wait for data initialization pod to be successful. Defaults to 5m.*stringfalse

Back to Custom Resources

PvcSnapshot

PvcSnapshot represents a snapshot to be used to restore a PVC.

FieldDescriptionSchemeRequired
nameName of the volume snapshot being referenced.stringtrue

Back to Custom Resources

SidecarSpec

SidecarSpec allows configuring additional containers to run alongside the node.

FieldDescriptionSchemeRequired
nameName to be assigned to the container.stringtrue
imageContainer image to be used. Defaults to app image being used by ChainNode.*stringtrue
imagePullPolicyIndicates the desired pull policy when creating nodes. Defaults to Always if version is latest and IfNotPresent otherwise.corev1.PullPolicyfalse
mountDataVolumeWhere data volume will be mounted on this container. It is not mounted if not specified.*stringfalse
mountConfigDirectory where config files from ConfigMap will be mounted on this container. They are not mounted if not specified.*stringfalse
commandCommand to be run by this container. Defaults to entrypoint defined in image.[]stringfalse
argsArgs to be passed to this container. Defaults to cmd defined in image.[]stringfalse
envEnvironment variables to be passed to this container.[]corev1.EnvVarfalse
securityContextSecurity options the container should be run with.*corev1.SecurityContextfalse
resourcesCompute Resources for the sidecar container.corev1.ResourceRequirementsfalse
restartPodOnFailureWhether the pod of this node should be restarted when this sidecar container fails. Defaults to false.*boolfalse
runBeforeNodeWhen enabled, this container turns into an init container instead of a sidecar as it will have to finish before the node container starts. Defaults to false.*boolfalse

Back to Custom Resources

StateSyncConfig

StateSyncConfig holds configurations for enabling state-sync snapshots on a node.

FieldDescriptionSchemeRequired
snapshotIntervalBlock interval at which local state sync snapshots are taken (0 to disable).inttrue
snapshotKeepRecentNumber of recent snapshots to keep and serve (0 to keep all). Defaults to 2.*intfalse

Back to Custom Resources

TmKMS

TmKMS allows configuring tmkms for signing for this validator node instead of using plaintext private key file.

FieldDescriptionSchemeRequired
providerSigning provider to be used by tmkms. Currently only vault is supported.TmKmsProvidertrue
keyFormatFormat and type of key for chain. Defaults to {\"type\": \"bech32\", \"account_key_prefix\": \"nibipub\", \"consensus_key_prefix\": \"nibivalconspub\"}.*TmKmsKeyFormatfalse
validatorProtocolTendermint's protocol version to be used. Valid options are: - v0.34 (default) - v0.33 - legacy*tmkms.ProtocolVersionfalse
persistStateWhether to persist "priv_validator_state.json" file on a PVC. Defaults to true.*boolfalse
resourcesCompute Resources for tmkms container.*corev1.ResourceRequirementsfalse

Back to Custom Resources

TmKmsHashicorpProvider

TmKmsHashicorpProvider holds hashicorp provider specific configurations.

FieldDescriptionSchemeRequired
addressFull address of the Vault cluster.stringtrue
keyKey to be used by this validator.stringtrue
certificateSecretSecret containing the CA certificate of the Vault cluster.*corev1.SecretKeySelectorfalse
tokenSecretSecret containing the token to be used.*corev1.SecretKeySelectortrue
uploadGeneratedUploadGenerated indicates if the controller should upload the generated private key to vault. Defaults to false. Will be set to true if this validator is initializing a new genesis. This should not be used in production.boolfalse
autoRenewTokenWhether to automatically renew vault token. Defaults to false.boolfalse
skipCertificateVerifyWhether to skip certificate verification. Defaults to false.boolfalse

Back to Custom Resources

TmKmsKeyFormat

TmKmsKeyFormat represents key format for tmKMS.

FieldDescriptionSchemeRequired
typeKey typestringtrue
account_key_prefixAccount keys prefixesstringtrue
consensus_key_prefixConsensus keys prefixstringtrue

Back to Custom Resources

TmKmsProvider

TmKmsProvider allows configuring providers for tmKMS. Note that only one should be configured.

FieldDescriptionSchemeRequired
hashicorpHashicorp provider.*TmKmsHashicorpProviderfalse

Back to Custom Resources

Upgrade

Upgrade represents an upgrade processed by cosmopilot and added to status.

FieldDescriptionSchemeRequired
heightHeight at which the upgrade should occur.int64true
imageContainer image replacement to be used in the upgrade.stringtrue
statusUpgrade status.UpgradePhasetrue
sourceWhere cosmopilot got this upgrade from.UpgradeSourcetrue

Back to Custom Resources

UpgradeSpec

UpgradeSpec represents a manual upgrade.

FieldDescriptionSchemeRequired
heightHeight at which the upgrade should occur.int64true
imageContainer image replacement to be used in the upgrade.stringtrue
forceOnChainWhether to force this upgrade to be processed as a gov planned upgrade. Defaults to false.*boolfalse

Back to Custom Resources

ValidatorInfo

ValidatorInfo contains information about this validator.

FieldDescriptionSchemeRequired
monikerMoniker to be used by this validator. Defaults to the ChainNode name.*stringfalse
detailsDetails of this validator.*stringfalse
websiteWebsite of the validator.*stringfalse
identityIdentity signature of this validator.*stringfalse

Back to Custom Resources

VerticalAutoscalingConfig

VerticalAutoscalingConfig defines rules and thresholds for vertical autoscaling of a pod.

FieldDescriptionSchemeRequired
enabledEnables vertical autoscaling for the pod.booltrue
cpuCPU resource autoscaling configuration.*VerticalAutoscalingMetricConfigfalse
memoryMemory resource autoscaling configuration.*VerticalAutoscalingMetricConfigfalse

Back to Custom Resources

VerticalAutoscalingMetricConfig

VerticalAutoscalingMetricConfig defines autoscaling behavior for a specific resource type (CPU or memory).

FieldDescriptionSchemeRequired
sourceSource determines whether to base autoscaling decisions on requests, limits, or effective limit. Valid values are: effective-limit (default) (use limits if set; otherwise fallback to requests) requests (use the pod’s requested resource value) limits (use the pod’s resource limit value)*LimitSourcefalse
minMinimum resource value allowed during scaling (e.g. "100m" or "128Mi").resource.Quantitytrue
maxMaximum resource value allowed during scaling (e.g. "8000m" or "2Gi").resource.Quantitytrue
rulesRules define when and how scaling should occur based on sustained usage levels.[]*VerticalAutoscalingRuletrue
cooldownCooldown is the minimum duration to wait between consecutive scaling actions. Defaults to "5m".*stringfalse
limitStrategyLimitStrategy controls how resource limits should be updated after autoscaling. Valid values are: retain (default) (keep original limits) equal (match request value) max (use configured VPA Max) percentage (request × percentage) unset (remove the limits field entirely)*LimitUpdateStrategyfalse
limitPercentageLimitPercentage defines the percentage multiplier to apply when using "percentage" LimitStrategy. For example, 150 means limit = request * 1.5. Only used when LimitStrategy = "percentage". Defaults to 150 when not set.*intfalse

Back to Custom Resources

VerticalAutoscalingRule

VerticalAutoscalingRule defines a single rule for when to trigger a scaling adjustment.

FieldDescriptionSchemeRequired
directionDirection of scaling: "up" or "down".ScalingDirectiontrue
usagePercentUsagePercent is the resource usage percentage (0–100) that must be met. Usage is compared against the selected Source value.inttrue
durationDuration is the length of time the usage must remain above/below the threshold before scaling. Defaults to "5m".*stringfalse
stepPercentStepPercent defines how much to adjust the resource by, as a percentage of the current value. For example, 50 = scale by 50% of current value.inttrue

Back to Custom Resources

VolumeSnapshotsConfig

VolumeSnapshotsConfig holds the configuration of snapshotting feature.

FieldDescriptionSchemeRequired
frequencyHow often a snapshot should be created.stringtrue
retentionHow long a snapshot should be retained. Default is indefinite retention.*stringfalse
snapshotClassName of the volume snapshot class to be used. Uses the default class if not specified.*stringfalse
stopNodeWhether the node should be stopped while the snapshot is taken. Defaults to false.*boolfalse
exportTarballWhether to create a tarball of data directory in each snapshot and upload it to external storage.*ExportTarballConfigfalse
verifyWhether cosmopilot should verify the snapshot for corruption after it is ready. Defaults to false.*boolfalse
disableWhileSyncingWhether to disable snapshots while the node is syncing. Defaults to true.*boolfalse

Back to Custom Resources

VolumeSpec

FieldDescriptionSchemeRequired
nameThe name of the volume.stringtrue
sizeSize of the volume.stringtrue
pathThe path at which this volume should be mountedstringtrue
storageClassName of the storage class to use for this volume. Uses the default class if not specified.*stringfalse
deleteWithNodeWhether this volume should be deleted when node is deleted. Defaults to false.*boolfalse

Back to Custom Resources

Released under the MIT License.