PlatformInstance reference
PlatformInstance is one isolated copy of the di-framework platform, reconciled by the platform operator.
The field tables on this page are generated from the CRD of platform release v6.0.22, platform/operator/config/crd/platform.di-framework.dev_platforminstances.yaml. The condition reasons come from the operator's source at the same tag (api/v1alpha1/platforminstance_types.go, internal/controller, internal/plan) and its README. Check the CRD of your installed release when it differs.
Property | Value |
|---|---|
Group / version |
|
Kind |
|
Plural / singular / short name |
|
Scope | Namespaced |
Subresources |
|
Name | at most 63 characters ( |
Finalizer |
|
kubectl get pi prints these columns:
Column | Source |
|---|---|
Version |
|
Installed |
|
Phase |
|
Age |
|
spec
target and version are required. target and platform.storageRoot are fixed at creation: the operator would otherwise lose track of the cluster and data it made.
Field | Type | Required | Default | Validation | Description |
|---|---|---|---|---|---|
| string | yes | pattern | Exact | |
| string | yes | enum | Target kind. Only | |
| string |
| enum | What deleting the instance does. See Delete and Retain. | |
| object | see spec.platform | Platform settings the operator passes to the install. |
spec.platform
Each tenancy field is the platform's config key of the same name, passed through as JSON. One CEL rule applies to the whole object: every users[].memberships[].tenant must name an entry of tenants.
Field | Type | Default | Validation | Description |
|---|---|---|---|---|
| string |
| enum |
|
| string | operator default | immutable ( | Node path under which the platform keeps tenant data. Empty uses the operator's per-instance default, which |
| int32 |
| 0-32767 | Publishes the gateway on this NodePort. Zero keeps it ClusterIP. |
| string | pattern | Gateway's public base URL, for example | |
| array | at most 32; map list keyed by | The platform's | |
| array | at most 128; map list keyed by | The platform's | |
| object | see tenantAuth | Enables the per-tenant console and | |
| string | the recorded | max 512; pattern | The platform's |
| string | the platform's default, | enum | The platform's |
tenants
The bounds are the platform Tenant CRD's. A change on a Ready instance is applied by the install the spec change starts.
Field | Type | Required | Validation | Description |
|---|---|---|---|---|
| string | yes | max 40; pattern | 1-40 lowercase letters, digits and hyphens, starting with a letter. |
| boolean | Suspends the tenant. | ||
| string | enum | What removing the tenant does to its data. The platform's default applies when unset. | |
| int32 | 1-10 | Tenant host replicas. | |
| int32 | 1-10000 |
| |
| string | max 32; pattern | CPU quota, a quantity such as | |
| string | max 32; same pattern as | Memory quota, such as | |
| int32 | 1-1000 | Workload quota. | |
| int32 | 1-100 | Backing-service quota. | |
| int32 | 1-400 | Service-binding quota. | |
| int32 | 1-10000 | API-key quota. |
users
Field | Type | Required | Validation | Description |
|---|---|---|---|---|
| string | yes | max 40; pattern | 1-40 lowercase letters, digits and hyphens, starting with a letter. |
| boolean | Blocks the user's access. | ||
| array | yes | at most 16; map list keyed by | The tenants the user belongs to, one entry per tenant. |
| string | yes | max 40; must name an entry of | Tenant name. |
| string | yes | enum | The user's role in that tenant. |
tenantAuth
image is required. A CEL rule requires issuer, clientId and clientSecretRef together (tenantAuth needs issuer, clientId and clientSecretRef together). {tenant} in a public URL is replaced with the tenant name.
Field | Platform config | Type | Validation | Description |
|---|---|---|---|---|
|
| string | required; max 512; pattern | The tenant-auth image, pinned by digest. |
|
| string | max 2048; pattern | OIDC issuer URL, as both pods and browsers name it. |
|
| string | 1-253 characters | The console's confidential OAuth client. |
|
| string | required in the ref; 1-253 characters | Secret in the PlatformInstance's namespace holding the OAuth client secret. |
| string | required in the ref; 1-253 characters | Key in that Secret. | |
|
| string | max 512 | In-cluster |
|
| int32 | 1-65535 | Pod port behind |
|
| string | max 15 | The issuer's IPv4 when pods cannot resolve its hostname. |
|
| string | max 2048; pattern | Browser-visible console URL. |
|
| string | max 2048; pattern | Controller URL shown to users and CLIs. |
|
| string | required in | The oci-registry component, pinned by digest. Deploys each tenant's own OCI registry. |
|
| string | max 2048; pattern | Registry origin users log in to. |
|
| int64 | minimum 1 | Bounds the controller's registry front. |
|
| int64 | minimum 1 | |
|
| int64 | minimum 1 | |
|
| int64 | minimum 1 |
The client secret is never inline. On every install and repair the operator reads the referenced key and writes it, through the encrypted stack config, to the Secret platform-operator-tenant-auth (key clientSecret) in the platform namespace inside the instance; tenantAuth.oauthClient.secretName names that Secret. The value never reaches the CR, its status, events or the operator log.
status
Field | Type | Description |
|---|---|---|
| string | Coarse lifecycle state: |
| int64 | The generation the status describes. |
| string | Platform version the last successful install applied. |
| string | The instance's Kubernetes endpoint, from the install's outputs. |
| string | The gateway's public base URL, from the install's outputs ( |
| string | Secret in the PlatformInstance's namespace holding the instance's admin kubeconfig under the key |
| object | What the last successful install applied. See status.applied. |
| date-time | When the last periodic refresh and up finished. |
| object | What the operator recorded about the target cluster. See status.target. |
| array | Standard |
status.applied
Field | Type | Description |
|---|---|---|
| int64 | The |
| int32 | Number of applied tenants. Required. |
| int32 | Number of applied users. Required. |
| string | The applied |
| string | The applied tenant host image; empty means the platform's own default. With |
status.target
Field | Type | Description |
|---|---|---|
| string | UID of the vCluster's |
| string | Set while a resync is running: the UID of the |
| date-time | When the running resync restarted the vCluster control plane. |
Conditions
Type | True when |
|---|---|
| The target cluster answers with a kubeconfig. |
| The platform at |
| An install applied the spec's platform settings (tenants, users, |
| The instance is usable at |
| The admission policy that protects the vCluster's |
When an install, an uninstall or a cleanup fails, the failing condition and Ready both get the same False reason and message, and phase becomes Failed (unless the instance is being deleted).
Condition | Status | Reason | Meaning |
|---|---|---|---|
| True |
| The target cluster answers. |
| False |
| The vCluster release was just installed; the control plane comes up next. The first reason a new instance shows, with |
| False |
| The vCluster StatefulSet isn't ready. |
| False |
| vCluster's kubeconfig Secret doesn't exist yet. |
| False |
| The Secret existed and was deleted; a resync starts. |
| False |
| A missing release object is being recreated. |
| False |
| A failed or interrupted repair was rolled back to the last deployed revision. |
| False |
| A resync is running: the owner Service was replaced, or it continues one started by |
| False |
| The Secret exists but the vCluster API, named in the message, failed 3 consecutive checks; or a resync has waited more than three repair intervals. |
| False |
| Ensuring the target failed without a reason of its own (for example the vCluster Helm install failed, or a release left |
| False |
| Deleting the target failed during deletion. |
| True |
| Why the last successful install or repair ran. |
| False |
| The install or repair failed; the message names the step, version and error. |
| False |
|
|
| False |
|
|
| False |
| A custom |
| False |
| Dropping the install state failed during deletion. |
| False |
| Removing the default |
| True |
| The message names the generation, tenant and user counts and the issuer. |
| False |
| Same as on |
| True |
| The instance is ready. |
| False |
| Waiting for the target cluster. |
| False |
| A deleted instance waits for its cleanup Job or pod, named in the message, to terminate. |
| True |
| An admission policy denies deleting |
| False |
| The API server has no admission policies; a |
Operate platform instances says what to do for each failure.
Annotations
Annotation | Set by | Meaning |
|---|---|---|
| you |
|
| operator | The instance UID once its default |
| operator | Count of failed cleanup Jobs, for the retry backoff. |