You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
Copy file name to clipboardExpand all lines: concepts/provider-bootstrap.md
+4-4Lines changed: 4 additions & 4 deletions
Display the source diff
Display the rich diff
Original file line number
Diff line number
Diff line change
@@ -6,9 +6,9 @@ Platform Mesh provisions a dedicated kcp workspace for each service provider. Cr
6
6
7
7
## The provider workspace
8
8
9
-
Each provider workspace lives under `root:providers` and is identified by the `Provider` name combined with a unique identifier for that particular `Provider` object. The identifier is stable for the lifetime of the resource and prevents name collisions across tenants or after deletion and recreation.
9
+
Each provider workspace lives under `root:providers` and is identified by the `Provider` name combined with the logical cluster ID of the workspace where the `Provider` object was created. The name is deterministic: two tenants can create a `Provider` with the same name without colliding, and deleting and recreating a `Provider` in the same workspace maps back to the same provider workspace.
10
10
11
-
The workspace is the provider's exclusive domain. Platform Mesh creates it and issues credentials but does not manage the resources inside it.
11
+
The workspace is the provider's exclusive domain. Platform Mesh creates it and provisions the access credentials inside it — a ServiceAccount, its RBAC binding, and a token, from which the kubeconfig is generated — but manages nothing else there; the provider owns the contents.
12
12
13
13
## Provider
14
14
@@ -23,9 +23,9 @@ With the workspace bootstrapped, service controllers use the kubeconfig to watch
23
23
24
24
## ManagedProvider
25
25
26
-
`ManagedProvider` is a Platform Mesh runtime resource, reconciled by the platform-mesh controller. Platform admins use it as a convenience API to onboard platform-owned services: a single resource handles workspace provisioning, kubeconfig distribution, and operator deployment end-to-end.
26
+
`ManagedProvider` is a Platform Mesh runtime resource, reconciled by the Platform Mesh operator. Platform admins use it as a convenience API to onboard platform-owned services: a single resource handles workspace provisioning, kubeconfig distribution, and operator deployment end-to-end.
27
27
28
-
On the kcp side, a `ManagedProvider` creates a `Provider` in `root:providers:system` and waits for it to be ready. On the runtime side, it copies the resulting kubeconfig into Platform Mesh's runtime cluster and deploys the service operator components.
28
+
On the kcp side, a `ManagedProvider` creates a `Provider`and waits for it to be ready — by default named after the `ManagedProvider`in `root:providers:system`, or created/adopted at an explicit path via a provider reference. On the runtime side, it copies the resulting kubeconfig into Platform Mesh's runtime cluster and deploys the service operator components, declared as Helm charts delivered either directly via Flux or resolved from an OCM component.
29
29
30
30
The split between `Provider` and `ManagedProvider` reflects the split between kcp-level and runtime-level effects: a `Provider` can only affect kcp, while a `ManagedProvider` is owned and operated by the platform admin on Platform Mesh's runtime cluster.
Copy file name to clipboardExpand all lines: how-to-guides/onboard-managed-service.md
+16-5Lines changed: 16 additions & 5 deletions
Display the source diff
Display the rich diff
Original file line number
Diff line number
Diff line change
@@ -15,11 +15,11 @@ Use `ManagedProvider` when the platform team owns and operates the service. For
15
15
16
16
- A running Platform Mesh environment with a `PlatformMesh` resource in the `Ready` state
17
17
-`kubectl` access to the Platform Mesh runtime cluster
18
-
- The service operator published as an OCM component in an accessible registry
18
+
- The service operator published as a Helm chart in an accessible OCI registry or Helm repository — or, if you deploy via OCM, published as an OCM component (this additionally requires the ocm-controller in the runtime cluster)
19
19
20
20
## Step 1: Create the ManagedProvider resource
21
21
22
-
Apply a `ManagedProvider` in the same namespace as the `PlatformMesh` instance. Set `platformMeshRef.name` to the name of your `PlatformMesh` resource and list each operator component under `runtimeDeployments`:
22
+
Apply a `ManagedProvider` in the same namespace as the `PlatformMesh` instance. Set `platformMeshRef.name` to the name of your `PlatformMesh` resource and list each operator component under `runtimeDeployments`. Each entry sets exactly one of `flux` (Helm chart fetched directly from an OCI registry or Helm repository) or `ocm` (chart resolved from an OCM component descriptor):
23
23
24
24
```yaml
25
25
apiVersion: providers.platform-mesh.io/v1alpha1
@@ -31,10 +31,21 @@ spec:
31
31
platformMeshRef:
32
32
name: platform-mesh
33
33
runtimeDeployments:
34
+
- flux:
35
+
registry: ghcr.io/my-org/charts
36
+
chart: my-service-operator
37
+
version: "1.0.0"
38
+
```
39
+
40
+
To deploy from an OCM component instead, replace the `flux` entry with:
| Stuck at `WaitingForProvider` | The associated `Provider` has not yet reached `Ready` — check the Provider controller logs for workspace or kubeconfig provisioning errors |
100
111
| Stuck at `CopyingKubeconfig` | The Provider controller has not yet populated the kubeconfig Secret — check the Provider controller logs |
101
112
| Stuck at `CopyingKubeconfigFailed` | The `providerKubeconfigSecret` spec on the `Provider` does not match what the `ManagedProvider` expects — ensure the `providerKubeconfigSecret` fields are aligned between both resources |
102
-
| Stuck at `Deploying`| The OCM component version does not exist in the registry, or FluxCD is not reconciling— check HelmRelease status in the namespace |
113
+
| Stuck at `Deploying` | The chart or OCM component version does not exist in the registry, FluxCD is not reconciling, or (for `ocm` entries) the ocm-controller is not installed — check HelmRelease and OCM resource status in the namespace |
103
114
| `Ready` but pods not running | The operator chart values may be misconfigured — check the HelmRelease events and operator pod logs |
Copy file name to clipboardExpand all lines: reference/resources/managed-provider-resource.md
+30-9Lines changed: 30 additions & 9 deletions
Display the source diff
Display the rich diff
Original file line number
Diff line number
Diff line change
@@ -8,7 +8,7 @@ For the conceptual overview, see [Provider bootstrap](/concepts/provider-bootstr
8
8
9
9
## Schema
10
10
11
-
A minimal `ManagedProvider` requires a `platformMeshRef` and at least one `runtimeDeployments` entry:
11
+
A minimal `ManagedProvider` requires a `platformMeshRef` and at least one `runtimeDeployments` entry. Each entry deploys one Helm chart and sets exactly one of `flux` (chart fetched directly from an OCI registry or Helm repository) or `ocm` (chart resolved from an OCM component descriptor):
12
12
13
13
```yaml
14
14
apiVersion: providers.platform-mesh.io/v1alpha1
@@ -20,22 +20,43 @@ spec:
20
20
platformMeshRef:
21
21
name: platform-mesh
22
22
runtimeDeployments:
23
+
- flux:
24
+
registry: ghcr.io/my-org/charts
25
+
chart: my-service-operator
26
+
version: "1.0.0"
27
+
```
28
+
29
+
The same deployment resolved from an OCM component instead:
30
+
31
+
```yaml
32
+
runtimeDeployments:
23
33
- ocm:
24
-
componentName: my-service-operator
25
-
registry: ghcr.io/platform-mesh/ocm
34
+
registry: ghcr.io/my-org
35
+
component: github.com/my-org/my-service
26
36
version: "1.0.0"
37
+
resourceName: chart
27
38
```
28
39
29
40
### Spec fields
30
41
31
42
| Field | Required | Default | Description |
32
43
| --- | --- | --- | --- |
33
44
| `platformMeshRef.name` | Yes | — | Name of the `PlatformMesh` instance this `ManagedProvider` belongs to. |
34
-
| `runtimeDeployments` | Yes | — | List of OCM components to deploy on the runtime cluster. |
| `runtimeDeployments[].ocm.version` | Yes | — | Component version to deploy. |
38
-
| `runtimeDeployments[].ocm.values` | No | — | Helm values passed to the deployed chart. |
45
+
| `runtimeDeployments` | Yes | — | List of components to deploy on the runtime cluster. Each entry sets exactly one of `flux` or `ocm`. |
46
+
| `runtimeDeployments[].flux.type` | No | `oci` | How the chart is fetched: `oci`(OCI artifact via a Flux `OCIRepository`) or `helm` (HTTP(S) Helm repository via a Flux `HelmRepository`). |
47
+
| `runtimeDeployments[].flux.registry` | Yes | — | Chart source: for `type: oci`, the OCI registry host and base path (e.g. `ghcr.io/my-org/charts`); for `type: helm`, the Helm repository URL. |
48
+
| `runtimeDeployments[].flux.chart` | Yes | — | Chart name: the OCI repository path under the registry, or the chart name within the Helm repository. |
49
+
| `runtimeDeployments[].flux.version` | Yes | — | Chart version to deploy (the OCI tag for `type: oci`). |
50
+
| `runtimeDeployments[].flux.values` | No | — | Helm values passed to the deployed chart. |
51
+
| `runtimeDeployments[].flux.insecure` | No | `false` | Allow plain-HTTP access to the OCI repository. |
52
+
| `runtimeDeployments[].ocm.registry` | Yes | — | OCM/OCI registry root that holds the component (e.g. `ghcr.io/my-org`). |
| `runtimeDeployments[].ocm.resourceName` | No | `chart` | OCM resource name within the component to deploy. |
56
+
| `runtimeDeployments[].ocm.referencePath` | No | — | List of `{name: ...}` elements navigating nested component references to reach the resource. |
57
+
| `runtimeDeployments[].ocm.name` | No | Derived from `resourceName`, `referencePath`, or the component name | Name for the generated deployment objects. Set it explicitly when several entries share the same component name. |
58
+
| `runtimeDeployments[].ocm.values` | No | — | Helm values passed to the resolved chart. |
59
+
| `runtimeDeployments[].ocm.insecure` | No | `false` | Allow plain-HTTP access to the registry. |
39
60
| `provider.path` | No | `root:providers:system` | kcp workspace path where the `Provider` is created or adopted. |
40
61
| `provider.name` | No | `<ManagedProvider.name>` | Name of the `Provider` to create or adopt at `provider.path`. |
41
62
| `providerKubeconfigSecret.name` | No | `<ManagedProvider.name>-provider-kubeconfig` | Name of the Secret to store the copied kubeconfig in the runtime cluster. |
@@ -70,7 +91,7 @@ The **ManagedProvider controller**, part of the [Platform Mesh operator](/refere
70
91
2. The controller waits for the referenced `PlatformMesh` to be ready.
71
92
3. It creates (or adopts) a `Provider` at the target kcp path, defaulting to `root:providers:system`.
72
93
4. Once the `Provider` is ready, it copies the resulting kubeconfig into a Secret on the runtime cluster.
73
-
5. It deploys each component listed in `runtimeDeployments` via OCM and FluxCD.
94
+
5. It deploys each component listed in `runtimeDeployments`: `flux`entries go straight to Flux (`OCIRepository`/`HelmRepository` + `HelmRelease`); `ocm` entries first have their component descriptor resolved by the ocm-controller (which must be installed in the runtime cluster), and the resolved chart is then deployed via Flux.
74
95
75
96
By default, deleting a `ManagedProvider` removes the runtime deployments and the copied kubeconfig but leaves the kcp `Provider` and its workspace intact. Set `cleanupOnDelete: true` to also remove the `Provider` and cascade to the workspace.
Copy file name to clipboardExpand all lines: reference/resources/provider-resource.md
+1-1Lines changed: 1 addition & 1 deletion
Display the source diff
Display the rich diff
Original file line number
Diff line number
Diff line change
@@ -54,7 +54,7 @@ The **Provider controller**, part of the [Platform Mesh operator](/reference/com
54
54
## What happens when you apply one
55
55
56
56
1. Finalizers are added for ordered cleanup.
57
-
2. A workspace (WorkspaceType **`root:provider`**) is created under `root:providers`. Its name is `<Provider.name>-<random-suffix>`.
57
+
2. A workspace (WorkspaceType **`provider`**, declared in `root`) is created under `root:providers`. Its name is `<Provider.name>-<cluster-id>`, where `<cluster-id>` is the logical cluster ID (the `kcp.io/cluster` annotation) of the workspace holding the `Provider`. The name is deterministic: recreating the same `Provider` in the same workspace maps back to the same provider workspace, while equal names created by different tenants do not collide.
58
58
3. Inside that workspace, a ServiceAccount, ClusterRoleBinding, and token Secret are created.
59
59
4. A kubeconfig is generated from those credentials and written to the Secret specified by `providerKubeconfigSecret` (or the default location). The Secret is placed in the workspace where the `Provider` object lives, not in the provider workspace itself.
60
60
5. `status.phase` transitions to `Ready` once provisioning completes.
0 commit comments