Skip to main content

PlatformInstance

A stardelt platform instance.

Spec​

FieldTypeRequiredDefaultDescriptionConstraints
spec.baseDomainstring (nullable)NoPublic DNS name the platform is served under, for example data.example.com: Nova answers on the name itself and every other application on a subdomain (id, trino, superset...).min 3, max 253; pattern ^[a-z0-9]([a-z0-9-]*[a-z0-9])?(\.[a-z0-9]([a-z0-9-]*[a-z0-9])?)+$
spec.dryRunbooleanNotruePlan only (no cluster changes) until explicitly disabled. Safe default.
spec.identityobjectNo{"adminGroup":"stardelt-admins","mode":"none","provider":"oidc"}How users sign in; see [IdentitySpec].
spec.identity.adminGroupstringNostardelt-adminsMembers of this group are platform administrators.
spec.identity.apiAudiencestring (nullable)Noexternal only: the audience the engine and the catalog accept.min 1, max 256; pattern ^\S+$
spec.identity.clientsobject (map of object)Noexternal only: the app registrations the customer made, one entry per client.
spec.identity.clients{}.clientIdstringYesmin 1, max 256; pattern ^\S+$
spec.identity.clients{}.clientSecretRefobject (nullable)NoRequired for every client except the public lakekeeper one. Never the value itself.
spec.identity.clients{}.clientSecretRef.keystringNoclient-secretmin 1, max 253
spec.identity.clients{}.clientSecretRef.namestringYesmin 1, max 253; pattern ^[a-z0-9]([-a-z0-9.]*[a-z0-9])?$
spec.identity.groupClaimstring (nullable)NoName of the token claim that carries group (or role) names. Defaults to roles for entra and groups otherwise.
spec.identity.issuerUrlstring (nullable)NoOIDC issuer URL, https:// only. Required for external; for platform it is derived from baseDomain and must be left out.
spec.identity.modestringNononeWhere users sign in. Two modes besides none: an identity provider the organization already runs (external, for example Entra or Okta), or one the platform runs itself (platform, Keycloak). An organization often runs the platform several times against one external provider; each instance then has its own app registrations and group mapping.none, platform, external
spec.identity.providerstringNooidcexternal only: which kind of provider this instance talks to.oidc, entra
spec.ingressobjectNo{"enabled":false,"tls":{"enabled":false,"secretNameTemplate":"{host}-tls"}}How the applications are reached from outside the cluster; see [IngressSettings].
spec.ingress.classNamestring (nullable)NoIngressClass name, for example nginx or traefik. Absent: the cluster default.min 1, max 253
spec.ingress.enabledbooleanNofalseCreate an Ingress for Nova (on baseDomain itself); the identity provider on id. with identity.mode: platform; Airflow on airflow. with the pipelines pillar; JupyterHub on jupyter. with notebooks.
spec.ingress.tlsobjectNo{"enabled":false,"secretNameTemplate":"{host}-tls"}TLS through cert-manager.
spec.ingress.tls.enabledbooleanNofalseRequires cert-manager. Leave off when TLS ends elsewhere (a cloud load balancer, an edge proxy).
spec.ingress.tls.issuerstring (nullable)NoName of a cert-manager ClusterIssuer; written as the cert-manager.io/cluster-issuer annotation of every Ingress.min 1, max 253
spec.ingress.tls.secretNameTemplatestringNo{host}-tlsName of the Secret that holds the certificate; {host} becomes the host name with the dots turned into dashes.min 1, max 253
spec.namespacestringNostardeltNamespace the platform's own components are installed into.
spec.pillarsobjectNo{"batch":false,"dashboards":false,"lakehouse":true,"ml":false,"notebooks":false,"pipelines":false,"streaming":false}Which pillars a platform instance enables.
spec.pillars.batchbooleanNofalse
spec.pillars.dashboardsbooleanNofalseBI dashboards (Superset). Off by default: it brings a metadata database, Redis and three long-running pods. People sign in through the platform IdP, with the local administrator kept as break-glass; each group sees the dashboards its catalog role allows.
spec.pillars.lakehousebooleanNotrue
spec.pillars.mlbooleanNofalse
spec.pillars.notebooksbooleanNofalseMulti-user notebooks (JupyterHub). Off by default: a notebook stack is heavy, and a cluster that only serves queries should not carry it.
spec.pillars.pipelinesbooleanNofalseScheduled pipelines and jobs (Airflow, run as KubernetesExecutor). Off by default: it brings a metadata database and four long-running pods, and a cluster that only serves queries does not need them. Nova's Pipelines page and stardelt bundle run need it.
spec.pillars.streamingbooleanNofalse
spec.profilestringNodemoDeployment size / capability profile.demo, full, airgap
spec.secretsobjectNo{"mode":"none"}Where the credentials of Connection objects come from; see [SecretsSpec].
spec.secrets.externalobject (nullable)NoThe enterprise's store; required for external, refused for the other modes.
spec.secrets.external.providerobjectYesThe provider block of the ClusterSecretStore (vault, aws, azurekv, …), passed to External Secrets verbatim. Exactly one provider key; credentials are referenced by Secret name inside the block, never inline.
spec.secrets.groupsarray of stringNoOwner groups that get their own store entry in secrets.mode: platform: each one may read only its own path. Mirrors the platform's STORE_GROUPS.max 20
spec.secrets.modestringNononeWhich secret store the platform uses for user credentials.none, platform, external
spec.setobject (map of object (map of string))No--set overrides per component: set.<component>.<helm.key>: "value". Highest precedence — Helm applies --set after any values document.
spec.valuesobject (map of object)NoFree-form Helm values per component, e.g. values.trino.worker.resources. Deep-merged over the golden defaults, so one key can be pinned without restating the rest.
spec.valuesFromobject (map of object)NoExternal values documents per component, read from a ConfigMap or Secret key.
spec.valuesFrom{}.configMapRefobject (nullable)NoRead the values document from this ConfigMap key.
spec.valuesFrom{}.configMapRef.keystringYesKey holding the YAML values document.
spec.valuesFrom{}.configMapRef.namestringYesName of the ConfigMap or Secret.
spec.valuesFrom{}.configMapRef.namespacestring (nullable)NoNamespace of the referenced object. Defaults to the resource's own namespace; required for cluster-scoped resources (PlatformInstance).
spec.valuesFrom{}.secretRefobject (nullable)NoRead the values document from this Secret key (decoded, then parsed as YAML).
spec.valuesFrom{}.secretRef.keystringYesKey holding the YAML values document.
spec.valuesFrom{}.secretRef.namestringYesName of the ConfigMap or Secret.
spec.valuesFrom{}.secretRef.namespacestring (nullable)NoNamespace of the referenced object. Defaults to the resource's own namespace; required for cluster-scoped resources (PlatformInstance).

Status​

FieldTypeRequiredDefaultDescriptionConstraints
status.componentsarray of objectNo[]
status.components[].appliedHashstring (nullable)NoFingerprint (args + values) of the release that was applied last time a hash was recorded; lets the next reconcile skip an unchanged component.
status.components[].messagestring (nullable)No
status.components[].namestringYes
status.components[].readybooleanYes
status.conditionsarray of objectNo[]
status.conditions[].lastTransitionTimestring (nullable)No
status.conditions[].messagestring (nullable)No
status.conditions[].observedGenerationinteger (nullable)Noformat int64
status.conditions[].reasonstring (nullable)No
status.conditions[].statusstringYes
status.conditions[].typestringYes
status.observedGenerationinteger (nullable)Noformat int64
status.phasestringNo""

Validation rules​

  • identity.mode external needs identity.issuerUrl, an https:// URL
  • identity.mode platform derives the issuer from baseDomain; leave identity.issuerUrl out
  • identity needs baseDomain (the application hosts and redirect addresses are built from it)
  • ingress needs baseDomain (the hosts are built from it)
  • secrets.mode external needs secrets.external.provider (the ClusterSecretStore provider block)
  • secrets.external is only allowed with secrets.mode external
  • secrets.groups entries are lower-case letters, digits and dashes (at most 40 characters)
  • secrets.groups is only allowed with secrets.mode platform
  • platform mode creates its own clients: leave provider, apiAudience and clients out
  • external mode needs issuerUrl
  • external mode needs apiAudience
  • external mode needs a nova client
  • client names are nova, trino, lakekeeper, superset, airflow, jupyterhub and trino-group-sync
  • every client except lakekeeper needs a clientSecretRef
  • ingress.tls.enabled needs ingress.tls.issuer, the name of a cert-manager ClusterIssuer