Jumpstarter

operator.jumpstarter.dev/v1alpha1

Jumpstarter is the Schema for the jumpstarters API.

Spec

Field

Type

Description

spec.authentication

object

Authentication configuration for client and exporter authentication. Supports multiple authentication methods including internal tokens, Kubernetes tokens, and JWT.

spec.authentication.autoProvisioning

object

Automatic user provisioning configuration, this is useful for creating users authenticated by external identity providers in Jumpstarter.

spec.authentication.autoProvisioning.enabled

boolean

Enable auto provisioning. When disabled, users authenticated by external identity providers will not be automatically created in Jumpstarter. (default: False)

spec.authentication.internal

object

Internal authentication configuration. Built-in authenticator that issues tokens for clients and exporters. This is the simplest authentication method and is enabled by default.

spec.authentication.internal.enabled

boolean

Enable the internal authentication method. When disabled, clients cannot use internal tokens for authentication. (default: True)

spec.authentication.internal.prefix

string

Prefix to add to the subject claim of issued tokens. Helps distinguish internal tokens from other authentication methods. Example: “internal:” will result in subjects like “internal:user123” (default: internal:)

spec.authentication.internal.tokenLifetime

string

Token validity duration for issued tokens. After this duration, tokens expire and must be renewed. (default: 43800h)

spec.authentication.jwt

array

JWT authentication configuration. Enables authentication using external JWT tokens from OIDC providers. Supports multiple JWT authenticators for different identity providers. Each entry may optionally reference a CA certificate from a Kubernetes Secret or ConfigMap instead of inlining the PEM content.

spec.authentication.jwt[].certificateAuthorityConfigMap

object

CertificateAuthorityConfigMap references a Kubernetes ConfigMap containing the CA certificate PEM for the OIDC issuer. The operator reads the specified key and injects the PEM content as the certificateAuthority for this authenticator. When the ConfigMap changes, the operator reconciles and updates the ConfigMap.

spec.authentication.jwt[].certificateAuthoritySecret

object

CertificateAuthoritySecret references a Kubernetes Secret containing the CA certificate PEM for the OIDC issuer. The operator reads the specified key and injects the PEM content as the certificateAuthority for this authenticator. When the Secret changes, the operator reconciles and updates the ConfigMap. Takes precedence over CertificateAuthorityConfigMap when both are set.

spec.authentication.jwt[].claimMappings

object

claimMappings points claims of a token to be treated as user attributes.

spec.authentication.jwt[].claimValidationRules

array

claimValidationRules are rules that are applied to validate token claims to authenticate users.

spec.authentication.jwt[].issuer

object

issuer contains the basic OIDC provider connection options.

spec.authentication.jwt[].userValidationRules

array

userValidationRules are rules that are applied to final user before completing authentication. These allow invariants to be applied to incoming identities such as preventing the use of the system: prefix that is commonly used by Kubernetes components. The validation rules are logically ANDed together and must all return true for the validation to pass.

spec.authentication.k8s

object

Kubernetes authentication configuration. Enables authentication using Kubernetes service account tokens. Useful for integrating with existing Kubernetes RBAC policies.

spec.authentication.k8s.enabled

boolean

Enable Kubernetes authentication. When enabled, clients can authenticate using Kubernetes service account tokens. (default: False)

spec.baseDomain

string

Base domain used to construct FQDNs for all service endpoints. This domain will be used to generate the default hostnames for Routes, Ingresses, and certificates. Example: “example.com” will generate endpoints like “grpc.example.com”, “router.example.com”

spec.certManager

object

CertManager configuration for automatic TLS certificate management. When enabled, jumpstarter will interact with cert-manager to automatically provision and renew TLS certificates for all endpoints. Requires cert-manager to be installed in the cluster.

spec.certManager.enabled

boolean

Enable cert-manager integration for automatic TLS certificate management. When disabled, TLS certificates must be provided manually via secrets. (default: False)

spec.certManager.server

object

Server certificate configuration for controller and router endpoints. Defines how server TLS certificates are issued.

spec.certManager.server.issuerRef

object

Reference an existing cert-manager Issuer or ClusterIssuer. Use this to integrate with existing PKI infrastructure (ACME, Vault, etc.). This overrides the default selfSigned.enabled=true setting.

spec.certManager.server.selfSigned

object

Create a self-signed CA managed by the operator. The operator will create a self-signed Issuer and CA certificate, then use that CA to issue server certificates.

spec.controller

object

Controller configuration for the main Jumpstarter API and gRPC services. The controller handles gRPC and REST API requests from clients and exporters. (default: {})

spec.controller.exporterOptions

object

Exporter options configuration. Controls how exporters connect and behave when communicating with the controller.

spec.controller.exporterOptions.offlineTimeout

string

Offline timeout duration for exporters. After this duration without communication, an exporter is considered offline. This drives the online/offline status field of exporters, and offline exporters won’t be considered for leases. (default: 180s)

spec.controller.grpc

object

gRPC configuration for controller endpoints. Defines how controller gRPC services are exposed and configured.

spec.controller.grpc.endpoints

array

List of gRPC endpoints to expose. Each endpoint can use different networking methods (Route, Ingress, NodePort, or LoadBalancer) based on your cluster setup. Example: Use Route for OpenShift, Ingress for standard Kubernetes.

spec.controller.grpc.keepalive

object

Keepalive configuration for gRPC connections. Controls connection health checks and idle connection management. Helps maintain stable connections in load-balanced environments.

spec.controller.grpc.tls

object

TLS configuration for secure gRPC communication. Requires a Kubernetes secret containing the TLS certificate and private key. If spec.certManager.enabled is true, this secret will be automatically managed and configured by cert-manager.

spec.controller.image

string

Container image for the controller pods in ‘registry/repository/image:tag’ format. If not specified, defaults to the latest stable version of the Jumpstarter controller. (default: quay.io/jumpstarter-dev/jumpstarter-controller:latest)

spec.controller.imagePullPolicy

Always | IfNotPresent | Never

Image pull policy for the controller container. Controls when the container image should be pulled from the registry. (default: IfNotPresent)

spec.controller.login

object

Login endpoint configuration for simplified CLI login. Provides authentication configuration discovery for the jmp login command. The login service runs on HTTP and expects TLS to be terminated at the Route/Ingress level.

spec.controller.login.endpoints

array

List of login endpoints to expose. Each endpoint can use different networking methods (Route, Ingress, NodePort, or LoadBalancer) based on your cluster setup. Note: Unlike gRPC endpoints, login endpoints use edge TLS termination (not passthrough).

spec.controller.login.tls

object

TLS configuration for the login endpoint. Specifies the Kubernetes secret containing the TLS certificate for edge termination. If not specified and certManager is enabled, a default secret name will be generated.

spec.controller.podAnnotations

object

Custom annotations to add to controller pod templates.

spec.controller.replicas

integer

Number of controller replicas to run. Set to 0 to suspend the controller (Deployment stays but no pods run, all other resources are preserved). Currently only 1 running replica is supported because the controller uses in-memory state for gRPC stream coordination (Dial/Listen). Values greater than 1 will be clamped to 1 with a warning. See https://github.com/jumpstarter-dev/jumpstarter/issues/1013 for the tracking issue on HA controller support. (default: 1)

spec.controller.resources

object

Resource requirements for controller pods. Defines CPU and memory requests and limits for each controller pod.

spec.controller.restApi

object

REST API configuration for HTTP-based clients. Enables non-gRPC clients to interact with Jumpstarter for listing leases, managing exporters, and creating new leases. Use this when you need HTTP/JSON access.

spec.controller.restApi.endpoints

array

List of REST API endpoints to expose. Each endpoint can use different networking methods (Route, Ingress, NodePort, or LoadBalancer) based on your cluster setup.

spec.controller.restApi.tls

object

TLS configuration for secure HTTP communication. Requires a Kubernetes secret containing the TLS certificate and private key.

spec.deprecatedLabels

object

Deprecated labels configuration for warning users about label keys that should no longer be used.

spec.deprecatedLabels.keys

object

Map of deprecated label keys to human-readable deprecation messages. When an exporter has any of these labels, clients will receive a deprecation warning with the corresponding message.

spec.exporterSets

object

ExporterSets configuration for virtual scalable exporter provisioner controllers. When provisioners are listed and enabled, the operator creates a Deployment per provisioner using the same exporter-set-controller image with a –provisioner flag.

spec.exporterSets.image

string

Image for all provisioner controller Deployments. (default: quay.io/jumpstarter-dev/jumpstarter-exporterset-controller:latest)

spec.exporterSets.imagePullPolicy

Always | IfNotPresent | Never

ImagePullPolicy for provisioner controller containers. (default: IfNotPresent)

spec.exporterSets.provisioners

array

Provisioners is the list of provisioner controllers to deploy.

spec.exporterSets.provisioners[].enabled

boolean

Enabled controls whether a Deployment is created for this provisioner. (default: True)

spec.exporterSets.provisioners[].image

string

Image overrides the global exporterSets.image for this provisioner.

spec.exporterSets.provisioners[].name

string

Name is the provisioner identifier (e.g. “qemu.jumpstarter.dev”). Must be a DNS-subdomain-safe value: lowercase alphanumeric characters, ‘-’ or ‘.’, starting and ending with an alphanumeric character.

spec.exporterSets.provisioners[].replicas

integer

Replicas for this provisioner controller Deployment. Set to 0 to suspend the provisioner (Deployment stays but no pods run). (default: 1)

spec.exporterSets.provisioners[].resources

object

Resources overrides the global exporterSets.resources for this provisioner.

spec.exporterSets.resources

object

Resources for provisioner controller pods.

spec.hiddenLabels

object

Hidden labels configuration for hiding specific label keys from exporter listings. (default: {})

spec.hiddenLabels.keys

array

List of exact label keys to hide from ListExporters/GetExporter responses. Clients can pass show_hidden_labels=true to see all labels. Hidden labels remain usable in label selectors. Defaults to the ExporterSet identity labels, which every pool member carries. Setting this field replaces the default list rather than adding to it; set it to [] to show every label. (default: ['exporterset.jumpstarter.dev/name', 'exporterset.jumpstarter.dev/class', 'exporterset.jumpstarter.dev/provisioner'])

spec.leasePolicy

object

Lease policy configuration for controlling lease behavior. (default: {})

spec.leasePolicy.maxTags

integer

Maximum number of user-defined tags allowed per lease. (default: 10)

spec.routers

object

Router configuration for the Jumpstarter router service. Routers handle gRPC traffic routing and load balancing. (default: {})

spec.routers.grpc

object

gRPC configuration for router endpoints. Defines how router gRPC services are exposed and configured.

spec.routers.grpc.endpoints

array

List of gRPC endpoints to expose. Each endpoint can use different networking methods (Route, Ingress, NodePort, or LoadBalancer) based on your cluster setup. Example: Use Route for OpenShift, Ingress for standard Kubernetes.

spec.routers.grpc.keepalive

object

Keepalive configuration for gRPC connections. Controls connection health checks and idle connection management. Helps maintain stable connections in load-balanced environments.

spec.routers.grpc.tls

object

TLS configuration for secure gRPC communication. Requires a Kubernetes secret containing the TLS certificate and private key. If spec.certManager.enabled is true, this secret will be automatically managed and configured by cert-manager.

spec.routers.image

string

Container image for the router pods in ‘registry/repository/image:tag’ format. If not specified, defaults to the latest stable version of the Jumpstarter router. (default: quay.io/jumpstarter-dev/jumpstarter-controller:latest)

spec.routers.imagePullPolicy

Always | IfNotPresent | Never

Image pull policy for the router container. Controls when the container image should be pulled from the registry. (default: IfNotPresent)

spec.routers.podAnnotations

object

Custom annotations to add to router pod templates.

spec.routers.replicas

integer

Number of router replicas to run. Set to 0 to suspend all routers (existing Deployments are scaled to 0 pods, Services and certificates are preserved so the configuration can be restored without reconfiguration). Note: when replicas is 0, router entries are also removed from the controller ConfigMap, so the running controller will see no router endpoints. Any Dial/Listen attempt will fail until routers are resumed (replicas > 0) and the ConfigMap is reconciled again. Minimum recommended value is 3 for high availability. (default: 3)

spec.routers.resources

object

Resource requirements for router pods. Defines CPU and memory requests and limits for each router pod.

spec.routers.topologySpreadConstraints

array

Topology spread constraints for router pod distribution. Ensures router pods are distributed evenly across nodes and zones. Useful for high availability and fault tolerance.

spec.telemetry

object

Telemetry configuration for the optional telemetry service. When enabled, the operator deploys a jumpstarter-telemetry service that receives structured log entries from exporters via gRPC. The controller advertises the telemetry endpoint to exporters so they can push logs without cluster credentials.

spec.telemetry.backpressure

object

Backpressure configures the Loki log push ring buffer.

spec.telemetry.backpressure.queueDepth

integer

Ring buffer depth for Loki log push. On overflow, dropped entries are replaced by a single drop-marker LogEntry. (default: 10000)

spec.telemetry.enabled

boolean

Enable the telemetry service deployment. When enabled, the operator deploys a jumpstarter-telemetry pod and a ClusterIP Service, and configures the controller to advertise the endpoint to exporters. (default: False)

spec.telemetry.grpc

object

gRPC configuration for the telemetry service. Use this to configure TLS when not using cert-manager.

spec.telemetry.grpc.tls

object

TLS configuration for secure gRPC communication with the telemetry service. When spec.certManager.enabled is true, this is ignored and certificates are automatically managed by cert-manager. When spec.certManager.enabled is false, you can provide your own TLS secret here.

spec.telemetry.image

string

Container image for the telemetry pod in ‘registry/repository/image:tag’ format. (default: quay.io/jumpstarter-dev/jumpstarter-telemetry:latest)

spec.telemetry.imagePullPolicy

Always | IfNotPresent | Never

Image pull policy for the telemetry container. (default: IfNotPresent)

spec.telemetry.logging

object

Logging configuration for the telemetry log ingestion path.

spec.telemetry.logging.filter

object

Filter controls which log entries are forwarded to the telemetry service.

spec.telemetry.loki

object

Loki configures optional HTTP push of ingested logs to a Loki-compatible endpoint. When url is empty, telemetry runs metrics-only.

spec.telemetry.loki.secretRef

string

Secret with Loki credentials (username/password and/or token keys). Only the telemetry pod holds Loki credentials.

spec.telemetry.loki.tls

object

TLS settings for the Loki endpoint.

spec.telemetry.loki.url

string

Loki push endpoint (http:// or https://). Optional — telemetry can run metrics-only without Loki. grpc:// is reserved but not implemented yet.

spec.telemetry.metrics

object

Metrics configures reverse-scrape fan-out and Prometheus exposition.

spec.telemetry.metrics.driverTypeEnum

array

Allowed driver_type label values. Unlisted types are remapped to “other”. At most 16 entries (the default set plus site-specific categories), each at most 32 characters. (default: ['power', 'storage', 'network', 'serial', 'console', 'video', 'composite'])

spec.telemetry.metrics.exemplarKeys

array

Allowlist of keys to include in Prometheus exemplars. Unlisted keys are omitted. At most 16 keys. Each key is at most 32 characters, the same limit as Lease spec.context key names that may appear in this list. (default: ['client', 'lease_id'])

spec.telemetry.metrics.scrapeTimeout

string

Max wait for parallel exporter MetricsStream responses during a /metrics fan-out. Should be lower than the Prometheus scrape_timeout. The default is 7s. 60s bounds the fan-out wait and the HTTP write timeout that grows with this value. (default: 7s)

spec.telemetry.replicas

integer

Number of telemetry replicas to run. Multiple replicas provide HA; each exporter connects to exactly one replica via a persistent MetricsStream, so Prometheus sum-by queries across replicas yield exact totals without double-counting. Set to 0 to suspend the telemetry deployment (Deployment stays but no pods run, Service and other resources are preserved). Note: when replicas is set to 0, the controller also removes the telemetry endpoint from the controller ConfigMap, so exporters will stop forwarding metric streams immediately. Any exporter that was already streaming metrics will lose its MetricsStream target until telemetry is resumed (replicas > 0) and the ConfigMap is reconciled again. (default: 1)

spec.telemetry.resources

object

Resource requirements for the telemetry pod.

Status

Field

Type

Description

status.conditions

array

Conditions represent the latest available observations of the Jumpstarter state. Condition types include: - CertManagerAvailable: cert-manager CRDs are installed in the cluster - IssuerReady: The referenced or created issuer is ready to issue certificates - ControllerCertificateReady: Controller TLS certificate is issued and secret exists - RouterCertificatesReady: All router TLS certificates are issued and secrets exist - ControllerDeploymentReady: Controller deployment is available - RouterDeploymentsReady: All router deployments are available - Ready: Overall system ready (aggregates all other conditions)

status.conditions[].lastTransitionTime

string

lastTransitionTime is the last time the condition transitioned from one status to another. This should be when the underlying condition changed. If that is not known, then using the time when the API field changed is acceptable.

status.conditions[].message

string

message is a human readable message indicating details about the transition. This may be an empty string.

status.conditions[].observedGeneration

integer

observedGeneration represents the .metadata.generation that the condition was set based upon. For instance, if .metadata.generation is currently 12, but the .status.conditions[x].observedGeneration is 9, the condition is out of date with respect to the current state of the instance.

status.conditions[].reason

string

reason contains a programmatic identifier indicating the reason for the condition’s last transition. Producers of specific condition types may define expected values and meanings for this field, and whether the values are considered a guaranteed API. The value should be a CamelCase string. This field may not be empty.

status.conditions[].status

True | False | Unknown

status of the condition, one of True, False, Unknown.

status.conditions[].type

string

type of condition in CamelCase or in foo.example.com/CamelCase.