Skip to content

CRD reference: overview

All 12 kinds live in the API group polaris.k8s.calific.io/v1alpha1 and are namespaced. They share the polaris kubectl category, so kubectl get polaris -A lists all of them. Every kind has a Ready condition, a Synced condition, and .status.observedGeneration. Every kind except PolarisConnection also has a polaris.k8s.calific.io/finalizer that deletes the Polaris-side object before the Kubernetes record disappears. PolarisConnection skips this because it owns no remote state of its own.

Naming

A resource's name in Polaris defaults to .metadata.name. Every kind accepts an optional spec.name to override that. This matters when the Polaris-side name needs characters a Kubernetes object name doesn't allow. Kubernetes names are RFC 1123 subdomains: lowercase alphanumerics and - only. Polaris names additionally allow _.

Hierarchy

PolarisConnection ──┬─► PolarisCatalog ──┬─► PolarisNamespace (self-nestable via parentRef) ──┬─► PolarisTable
                    │                    │                                                    ├─► PolarisView
                    │                    │                                                    └─► PolarisPolicy
                    │                    └─► PolarisCatalogRole ◄── PolarisGrant (privilege on catalog|namespace|table|view)
                    │
                    ├─► PolarisPrincipal (writes generated creds to spec.credentialsSecretRef)
                    └─► PolarisPrincipalRole

PolarisPrincipalRoleBinding: Principal ── grants ──► PrincipalRole
PolarisCatalogRoleBinding:   PrincipalRole ── inherits ──► CatalogRole

Ref types

Every *Ref field, such as connectionRef, catalogRef, namespaceRef, principalRef, principalRoleRef, catalogRoleRef, tableRef, or viewRef, has the same shape:

Field Type Required Description
name string yes Name of the referenced object.
namespace string no Defaults to the referrer's own namespace, resolved at reconcile time.

This project deliberately avoids corev1.LocalObjectReference and corev1.ObjectReference. Purpose-built *Ref structs keep each reference's cross-namespace behavior explicit and independently documented.

Kinds at a glance

Kind Short name Parent(s) Purpose
PolarisConnection pconn none Server URL and OAuth credentials. Everything else attaches here, directly or through a parent.
PolarisCatalog pcat Connection A top-level Iceberg catalog and its storage config.
PolarisNamespace pns Catalog, plus an optional parent Namespace A logical container for tables and views, nestable.
PolarisTable ptbl Namespace An Iceberg table: schema, partition spec, write format.
PolarisView pview Namespace An Iceberg view: schema plus a SQL definition.
PolarisPolicy ppol Namespace A typed policy, such as compaction, attached to a namespace.
PolarisPrincipal pprin Connection An identity. The operator writes its generated credentials to a Secret.
PolarisPrincipalRole pprole Connection A server-wide role, assignable to principals.
PolarisCatalogRole pcrole Catalog A catalog-scoped role, the attachment point for grants.
PolarisPrincipalRoleBinding pprb Principal, PrincipalRole Assigns a principal role to a principal.
PolarisCatalogRoleBinding pcrb PrincipalRole, CatalogRole Lets a principal role's holders inherit a catalog role's grants.
PolarisGrant pgrant CatalogRole, plus a target Attaches one privilege on one target to a catalog role.

Not sure where to start? The Tutorial builds all twelve in dependency order, with a working example of each.