Skip to main content

Classes and Plans

Every ManagedService names three catalog entries that the provider defines: a class, a plan and a connectivity class. They decide what kind of service you get, what it may do, and how your workloads reach it.

Catalog entryField on ManagedServiceWhat it decides
Class (ManagedServiceClass)spec.classRef.nameThe service family and its contract: the parameter schema, which parameters can change after creation, the operations the family implements, its credential roles and its endpoint names
Plan (ManagedServicePlan)spec.planRef.nameThe provider's versioned offering for a class: engine version, instance, storage and compute bounds, allowed operations and approvals, backups, and entitlements
Connectivity class (ConnectivityClass)spec.connectivity.classRef.nameHow workloads reach the service

The class, plan, placement and connectivity of a service cannot change after creation.

Names to use

EntryName
Classpostgresql
Planpostgresql-platform-ha
Connectivity classtenant-native

tenant-native publishes the service as internal Services inside your Project's network. Workloads in the same Project connect to them directly. It allocates no public address.

You cannot list the catalog

Classes, plans and connectivity classes are cluster-scoped, and no Project role grants access to them. kubectl get managedserviceplans is refused for tenant identities. Ask your provider for the names to use. Plan names and plan contents can differ between Kube-DC installations.

What a plan decides

A plan is revisioned, and its values differ between installations. The tables below list the plan fields that decide what your service may do. Where a feature depends on a field, your plan must allow it before you can use it. Ask your provider for the current values of your plan.

Engine version

Plan fieldEffect
engineVersionThe PostgreSQL major version of the plan. If you set parameters.version, it must equal this value. Omit it to take the plan's version
allowedImagesThe exact engine images that MinorUpgrade and MajorUpgrade operations may move to

Instances

Plan fieldEffect
topology.minInstances, topology.maxInstancesThe range allowed for parameters.instances and for Scale operations
topology.defaultInstancesThe instance count when you omit parameters.instances
topology.haWhen true, the plan provides automatic failover for services with two or more instances
maxInstancesPerProjectHow many services on this plan one Project may have. 0 means no limit

Storage

Plan fieldEffect
capacity.storageThe data volume size per instance when you omit parameters.storage.size
capacity.maxStorageThe largest size allowed at creation and for ExpandStorage
capacity.storageClassThe storage class used when you omit parameters.storage.class
capacity.allowedStorageClassesOther storage classes you may select at creation. Empty means only the default

Compute

Plan fieldEffect
capacity.cpu, capacity.memoryThe CPU and memory per instance when you omit parameters.cpu or parameters.memory
capacity.computeBoundsminCPU, maxCPU, minMemory and maxMemory. When absent, the plan is fixed-size and only the default values are accepted
capacity.allocationProtocolMust be v1 for Resize and RestoreInPlace operations

Operations and approval

Plan fieldEffect
operations.allowedThe ServiceOperation types you may request. Other types are refused with reason PlanNotEntitled
operations.autoApproveAllowed types that run without approval. Any other allowed type waits in phase AwaitingApproval until the provider approves it
maintenanceThe recurring maintenance window used by operations that set execution.window: NextPlanWindow. Without a window, such operations are refused

You cannot approve your own operations. A ServiceCredentialPolicy does not bypass approval either: its scheduled rotations wait for approval when the plan does not auto-approve RotateCredentials.

Credentials

Plan fieldEffect
credentials.allowExistingUsersAllows a ServiceCredentialPolicy to manage the password of an existing SQL login that a database administrator created
credentials.allowBreakGlassAllows parameters.breakGlass.enableSuperuserAccess, which provides emergency postgres superuser access

Exposure

Internal access through tenant-native needs no exposure entitlement.

Plan fieldEffect
exposure.gatewayAllows parameters.expose.type: gateway, the PostgreSQL direct-TLS Gateway. See External Access

Ask your provider which other external access options, if any, your plan offers.

Backups

Plan fieldEffect
backup.enabledWhether the plan provides scheduled backups and continuous WAL archiving
backup.schedule, backup.retentionDaysThe schedule and retention a service inherits when it does not set its own
backup.minRetentionDays, backup.maxRetentionDaysThe range allowed for parameters.backup.retentionDays. The defaults are 1 and 365 days
backup.minScheduleIntervalMinutesThe minimum spacing allowed between scheduled backups in parameters.backup.schedule. The default is 60 minutes
backup.pitrWhether the plan advertises point-in-time recovery within the retention window
backup.objectStoreSourceWhere backups are written: a provider-managed object store (Plane), or your Project's own object storage bucket (ProjectBucketClaim)
backup.allowedCustomEndpointsThe object storage endpoints a service may use for its own backup store (parameters.backup.store). Empty means custom stores are not allowed

Other plan fields

Plan fieldEffect
allowedPlacementModesThe placement modes a service may request
allowedConnectivityClassesThe connectivity classes a service may request
allowedDeletionPoliciesThe deletionPolicy values a service may set
support.tier, support.responsibilityTextThe support tier and the provider's statement of responsibilities for the plan
disabledA disabled plan accepts no new services

How a refusal appears

When your manifest asks for something the plan does not allow, the request is recorded and then refused in status:

ResourceWhere to lookTypical reasons
ManagedServiceAccepted condition is False; status.phase is Rejected if the service has not been placed yetPlanNotEntitled, PlanQuotaExceeded, ParameterSchemaRejected
ServiceOperationstatus.phase is RejectedPlanNotEntitled, with a message such as plan <plan> does not allow <operation type>
ServiceOperationstatus.phase is AwaitingApprovalApprovalRequired: the plan requires provider approval

See Create a PostgreSQL Service for the full list.

When the catalog changes

A service keeps the class and plan revisions it was created with. When the provider changes the catalog, a running service does not move automatically: its CatalogPinned condition turns False with reason CatalogRevisionChanged, and it keeps running on its pinned revisions until the provider moves it to the new ones. Ask your provider if you need a newer plan revision for an existing service.