Skip to main content

Classes and plans

As a Project member, use this reference to choose a service class, plan, and connectivity class. Your provider publishes these catalog entries. They define the service, its allowed operations, and how applications reach it.

Each ManagedService selects these entries:

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​

Class and plan names come from the provider catalog. The following names are examples from the standard catalog; installations that publish the standard shared plans use <family>-development and <family>-production, which the console shows as the Dev and Production tiers.

FamilyClassStandard plans
PostgreSQLpostgresqlpostgresql-development, postgresql-production
MySQLmysqlmysql-development, mysql-production
MariaDBmariadbmariadb-development, mariadb-production
ClickHouseclickhouseclickhouse-development, clickhouse-production
Valkeyvalkey (single node), valkey-ha (Sentinel)valkey-development, valkey-production
Kafkakafkakafka-development, kafka-production

The standard shared plans use tenant-native. It 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.

The console's creation sheet lists the published plans of a class under Advanced · pick a published plan, and its or get the YAML for GitOps link shows the names it selected.

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 following tables 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 engine version of the plan (a PostgreSQL major, or a release line such as MySQL 8.4). If you set spec.engineVersion, 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 spec.topology.instances and for Scale operations
topology.defaultInstancesThe instance count when you omit spec.topology.instances
topology.minShards, topology.maxShards, topology.defaultShards, topology.minReplicasPerShard, topology.maxReplicasPerShard, topology.defaultReplicasPerShardThe shard shape of a sharded family (ClickHouse), used with spec.topology.shards and spec.topology.replicasPerShard instead of instances. A plan declares exactly one of the two shapes
topology.haDeclares a high-availability topology. The family defines member, quorum, and failover requirements
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 spec.storage.size
capacity.maxStorageThe largest size allowed at creation and for ExpandStorage
capacity.storageClassThe storage class used when you omit spec.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 spec.compute.cpu or spec.compute.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.enabledEnables the family's backup mechanism. Continuous WAL archiving applies to PostgreSQL, not every family
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 Common refusals 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.