You are reading documentation for bouine v0.4.x — not the latest version. View latest →

The Helm chart deploys bouine as a StatefulSet with headless Service for gossip peer discovery. Source: deploy/helm/bouine/.

Install

helm repo add bouine https://charts.bouine.org
helm repo update

helm install bouine bouine/bouine \
  --namespace bouine --create-namespace \
  --set "config.upstream_pools[0].name=app" \
  --set "config.upstream_pools[0].targets[0]=app.default.svc:8080" \
  --set "config.routes[0].pool=app"

To install from a local checkout, replace bouine/bouine with the chart directory deploy/helm/bouine.

Preconfigured value files

The chart ships with several value profiles for common deployment patterns:

FileProfileUse case
values-dev.yamlDevelopmentMinimal resources, single replica, no warm tier
values-ha.yamlHigh availability5 replicas, PDB, topology spread, larger resources
values-production.yamlProductionHardened security, autoscaling, service monitors, SLO alerts

Use them with -f:

helm install bouine bouine/bouine \
  -n bouine --create-namespace \
  -f values-production.yaml \
  --set "config.upstream_pools[0].name=app" \
  --set "config.upstream_pools[0].targets[0]=app.default.svc:8080"

All values

Image

KeyDefaultDescription
image.repositorybouinecache/bouineContainer image repository (Docker Hub)
image.tag"" (appVersion)Image tag; defaults to chart’s appVersion
image.pullPolicyIfNotPresentImage pull policy
image.pullSecrets[]List of Kubernetes Secret names for pulling from private registries
nameOverride""Override chart name
fullnameOverride""Override fully qualified name

Replicas

KeyDefaultDescription
replicaCount3Number of StatefulSet replicas

bouine config

Rendered into a ConfigMap and mounted at /etc/bouine/config.yaml.

KeyDefaultDescription
config.listen.http":80"HTTP listener
config.listen.https":443"HTTPS listener
config.listen.admin":9000"Admin API listener
config.listen.cluster":8443"Gossip cluster port
config.tls.certs[]TLS certificate list; mount via Secret
config.storage.hot_max_bytes2GiBRAM cache size
config.storage.warm_dir/var/lib/bouineWarm-tier mmap directory
config.storage.warm_max_bytes20GiBWarm-tier size limit
config.cluster.join[]Seed addresses (auto-populated from headless Service DNS)
config.cluster.hop_limit2Max peer-fetch hops (strong mode)
config.upstream_pools[]Upstream pool definitions
config.routes[]Route definitions

Service

KeyDefaultDescription
service.typeClusterIPKubernetes Service type
service.httpPort80HTTP port
service.httpsPort443HTTPS port
service.adminPort9000Admin port
headlessService.clusterPort8443Gossip peer discovery port

Resources

KeyDefaultDescription
resources.requests.cpu1000mCPU request
resources.requests.memory2GiMemory request
resources.limits.cpu4CPU limit
resources.limits.memory8GiMemory limit

Go runtime tuning

KeyDefaultDescription
goMemLimit"" (auto)GOMEMLIMIT — auto-computed as 75% of resources.limits.memory
goGC100GOGC — Go GC target percentage

Pod configuration

KeyDefaultDescription
terminationGracePeriodSeconds40Grace period for shutdown sequencer
podDisruptionBudget.enabledtrueEnable PDB
podDisruptionBudget.minAvailable2Minimum available pods during disruption
topologySpreadConstraintsZone anti-affinitySpreads pods across availability zones

Security context

KeyDefaultDescription
podSecurityContext.runAsNonRoottrueRun as non-root
podSecurityContext.runAsUser65534UID (nobody)
containerSecurityContext.readOnlyRootFilesystemtrueRead-only root FS
containerSecurityContext.allowPrivilegeEscalationfalseNo privilege escalation

Probes

KeyDefaultDescription
startupProbe.httpGet.path/readyzStartup probe endpoint
startupProbe.periodSeconds10Startup check interval
startupProbe.failureThreshold180Max failures (30 min timeout)
readinessProbe.httpGet.path/readyzReadiness endpoint
readinessProbe.periodSeconds5Readiness check interval
livenessProbe.httpGet.path/healthzLiveness endpoint
livenessProbe.periodSeconds10Liveness check interval

Autoscaling

KeyDefaultDescription
autoscaling.enabledfalseEnable HorizontalPodAutoscaler
autoscaling.minReplicas3Minimum pod count
autoscaling.maxReplicas6Maximum pod count
autoscaling.targetCPUUtilizationPercentage70CPU target for scale-up

Warm volume

KeyDefaultDescription
warmVolume.enabledtrueCreate a PVC for the warm tier
warmVolume.size50GiPVC size
warmVolume.storageClass""Storage class (default = cluster default)

Observability

KeyDefaultDescription
serviceMonitor.enabledfalseCreate a Prometheus ServiceMonitor
serviceMonitor.interval15sScrape interval
serviceMonitor.labels{}Extra labels for ServiceMonitor
networkPolicy.enabledfalseCreate NetworkPolicy to isolate admin port
podMonitor.enabledfalseCreate a Prometheus PodMonitor
prometheusRule.enabledfalseCreate PrometheusRule with SLO alert thresholds
ingress.enabledfalseCreate an Ingress resource
updateStrategy.maxUnavailable1Max unavailable pods during rolling update
minReadySeconds30Minimum time a pod must be ready before next update

Cloudflare CDN propagation

KeyDefaultDescription
cloudflare.apiTokenSecretName""Name of the Secret containing CF_API_TOKEN
cloudflare.apiTokenSecretKeyCF_API_TOKENKey inside the Secret

See Cloudflare CDN propagation for config-level settings (config.cloudflare.*).

Extra environment variables

KeyDefaultDescription
extraEnv[]Additional env vars for the bouine container

Example — inject admin token from a Secret:

extraEnv:
  - name: BOUINE_ADMIN_TOKEN
    valueFrom:
      secretKeyRef:
        name: bouine-admin-token
        key: token

Service account

KeyDefaultDescription
serviceAccount.createtrueCreate a dedicated service account for the bouine pods
serviceAccount.automountfalseAuto-mount the service account token. Enable for IRSA / workload identity (AWS EKS, GCP workload identity).
serviceAccount.annotations{}Annotations to add to the service account (e.g. eks.amazonaws.com/role-arn)
serviceAccount.name""Name of an existing service account to use when create is false

Extra volumes

KeyDefaultDescription
extraVolumes[]Additional volumes for the bouine pod (e.g. TLS secrets, custom CA bundles, static files)
extraVolumeMounts[]Additional volume mounts for the bouine container

Example — mount TLS certs from a Secret:

extraVolumes:
  - name: tls-certs
    secret:
      secretName: bouine-tls
extraVolumeMounts:
  - name: tls-certs
    mountPath: /etc/bouine/tls
    readOnly: true