This file defines a Custom Resource for bot modules in the eevee.bot/v1 API. It shows how to configure a bot module with settings such as:

  • Number of instances to run
  • Container image to use
  • Image pull policy
  • Metrics configuration
  • IPC configuration reference
  • Module name
  • Persistent volume configuration
  • Volume mount path
  • Arbitrary module configuration
  • Enable/disable toggle
  • Secret injection for environment variables
  • Operator API token mounting

The botmodule CRD allows you to define and deploy individual bot modules that communicate through the eevee.bot messaging system.

  ---
apiVersion: eevee.bot/v1
kind: BotModule
metadata:
  name: my-module
  namespace: my-eevee-bot
spec:
  enabled: true
  size: 1
  image: ghcr.io/eeveebot/module:latest
  pullPolicy: Always
  metrics: false
  metricsPort: 9000
  ipcConfig: my-eevee-bot
  moduleName: my-module
  persistentVolumeClaim:
    accessModes:
    - ReadWriteOnce
    resources:
      requests:
        storage: 1Gi
  volumeMountPath: /data
  mountOperatorApiToken: false
  envSecret:
    name: my-module-secrets
  moduleConfig: |
    # Arbitrary configuration passed to the module
    setting1: value1
    setting2: value2
  

Specification

Properties

size (integer)

Size defines the number of botmodule instances Default: 1

image (string)

Image defines the container image to use Default: “ghcr.io/eeveebot/module:latest”

pullPolicy (string)

PullPolicy defines the image pull policy to use Default: “Always”

metrics (boolean)

Metrics defines whether to enable metrics or not Default: false

metricsPort (integer)

MetricsPort defines the port to expose metrics on Default: 9000

ipcConfig (string)

IPC configuration name

moduleName (string)

ModuleName defines the name of the module

persistentVolumeClaim (object)

PersistentVolumeClaim defines the PVC configuration for the module

volumeMountPath (string)

VolumeMountPath defines where to mount the PVC in the container Default: “/data”

moduleConfig (string)

ModuleConfig is a passthrough field for arbitrary YAML configuration that will be passed directly to the module as a multi-line string

mountOperatorApiToken (boolean)

MountOperatorApiToken defines whether to mount the operator API token Default: false

enabled (boolean)

Enabled defines whether the botmodule is enabled or disabled Default: true

envSecret (object)

EnvSecret defines optional secrets to be injected as environment variables

resources (object)

Resources defines standard Kubernetes resource requests and limits for the container (CPU, memory, etc.). Accepts a standard Kubernetes V1ResourceRequirements object. If not specified, the container runs with default limits.

livenessProbe (object, optional)

LivenessProbe defines a custom liveness probe for the module pod. Accepts a standard Kubernetes V1Probe object (httpGet, tcpSocket, exec, etc.). If not specified, the operator provides a default HTTP GET probe against /health on the module’s metricsPort.

readinessProbe (object, optional)

ReadinessProbe defines a custom readiness probe for the module pod. Accepts a standard Kubernetes V1Probe object. If not specified, the operator provides a default HTTP GET probe against /health on the module’s metricsPort.

startupProbe (object, optional)

StartupProbe defines a custom startup probe for the module pod. Accepts a standard Kubernetes V1Probe object. If not specified, no startup probe is set (modules typically start quickly).

backupSchedule (object, optional)

Reference to a BackupSchedule resource in the same namespace. When set, the operator wires up backup CronJobs targeting this module’s PVC.

FieldDescription
nameName of the BackupSchedule resource

bootstrapFromBackup (object, optional)

When set, the operator restores the latest backup from S3 into this module’s PVC before starting the deployment for the first time. Subsequent reconciliations ignore this field (no re-restore). The operator tracks bootstrapped state via the eevee.bot/bootstrapped annotation on the PVC itself.

FieldDescription
s3Store.nameName of the S3Store resource containing the backup
imageContainer image to use for the restore job (default: ghcr.io/eeveebot/backupJob:latest)
imagePullPolicyImage pull policy for the restore job container. One of Always, IfNotPresent, Never (default: IfNotPresent)

Status

The operator updates the status subresource on every reconciliation to reflect the current state of the module.

FieldDescription
conditionsStandard Kubernetes condition objects (type, status, reason, message, lastTransitionTime). The Ready condition reflects whether the deployment is healthy. The Bootstrapped condition tracks bootstrapFromBackup progress.

Condition reasons

ReasonConditionDescription
PendingReadyReconciliation in progress
WaitingForBackupBootstrappedbootstrapFromBackup is set but no backups were found in S3
BootstrappingBootstrappedA restore Job is running to bootstrap the PVC from a backup
BootstrapRestoreFailedBootstrappedThe bootstrap restore Job failed or timed out
DisabledReadyspec.enabled is false — the deployment has been removed
CreatingReadyThe deployment was just created and may not be ready yet
UpdatingReadyThe deployment is rolling out a new spec
ReadyReadyThe deployment is healthy — all replicas are available
UnavailableReadyThe deployment is degraded — some replicas are unavailable
  apiVersion: eevee.bot/v1
kind: BotModule
metadata:
  name: my-module
status:
  conditions:
    - type: Ready
      status: "True"
      reason: Ready
      message: "Deployment ready (1/1 replicas available)"
      lastTransitionTime: "2026-05-09T02:00:00Z"