Skip to content

Commit 86902ff

Browse files
Add Cluster Docs
Also some more improvements for the sandboxing documentation
1 parent e03999b commit 86902ff

File tree

5 files changed

+233
-52
lines changed

5 files changed

+233
-52
lines changed

generated/routes.json

Lines changed: 15 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -13,7 +13,7 @@
1313
},
1414
"/overview/management-api-reference": {
1515
"relPath": "/overview/management-api-reference.md",
16-
"lastmod": "2025-11-18T00:53:40.000Z"
16+
"lastmod": "2025-11-21T08:11:25.000Z"
1717
},
1818
"/overview/agent-api-reference": {
1919
"relPath": "/overview/agent-api-reference.md",
@@ -39,6 +39,10 @@
3939
"relPath": "/getting-started/first-steps/plural-cloud.md",
4040
"lastmod": "2025-07-14T15:36:50.000Z"
4141
},
42+
"/getting-started/first-steps/add-a-cluster": {
43+
"relPath": "/getting-started/first-steps/add-a-cluster.md",
44+
"lastmod": "2025-11-21T22:23:51.000Z"
45+
},
4246
"/getting-started/how-to-use": {
4347
"relPath": "/getting-started/how-to-use/index.md",
4448
"lastmod": "2025-03-12T14:59:41.000Z"
@@ -89,7 +93,7 @@
8993
},
9094
"/getting-started/advanced-config/sandboxing": {
9195
"relPath": "/getting-started/advanced-config/sandboxing.md",
92-
"lastmod": "2025-05-14T21:43:40.000Z"
96+
"lastmod": "2025-11-21T22:23:51.000Z"
9397
},
9498
"/getting-started/advanced-config/network-configuration": {
9599
"relPath": "/getting-started/advanced-config/network-configuration.md",
@@ -123,6 +127,14 @@
123127
"relPath": "/plural-features/continuous-deployment/resource-application-logic.md",
124128
"lastmod": "2025-10-15T14:09:53.000Z"
125129
},
130+
"/plural-features/continuous-deployment/service-templating": {
131+
"relPath": "/plural-features/continuous-deployment/service-templating/index.md",
132+
"lastmod": "2025-11-21T22:26:15.213Z"
133+
},
134+
"/plural-features/continuous-deployment/service-templating/supporting-liquid-filters": {
135+
"relPath": "/plural-features/continuous-deployment/service-templating/supporting-liquid-filters.md",
136+
"lastmod": "2025-11-21T22:26:15.230Z"
137+
},
126138
"/plural-features/continuous-deployment/lua": {
127139
"relPath": "/plural-features/continuous-deployment/lua.md",
128140
"lastmod": "2025-07-15T12:44:58.000Z"
@@ -315,14 +327,6 @@
315327
"relPath": "/plural-features/pr-automation/filters.md",
316328
"lastmod": "2025-05-19T07:10:18.000Z"
317329
},
318-
"/plural-features/service-templating": {
319-
"relPath": "/plural-features/service-templating/index.md",
320-
"lastmod": "2025-03-12T14:59:41.000Z"
321-
},
322-
"/plural-features/service-templating/supporting-liquid-filters": {
323-
"relPath": "/plural-features/service-templating/supporting-liquid-filters.md",
324-
"lastmod": "2025-06-10T07:40:44.000Z"
325-
},
326330
"/plural-features/projects-and-multi-tenancy": {
327331
"relPath": "/plural-features/projects-and-multi-tenancy/index.md",
328332
"lastmod": "2025-05-15T21:02:36.000Z"
@@ -469,7 +473,7 @@
469473
},
470474
"/deployments/sandboxing": {
471475
"relPath": "/getting-started/advanced-config/sandboxing.md",
472-
"lastmod": "2025-05-14T21:43:40.000Z"
476+
"lastmod": "2025-11-21T22:23:51.000Z"
473477
},
474478
"/deployments/network-configuration": {
475479
"relPath": "/getting-started/advanced-config/network-configuration.md",

pages/getting-started/advanced-config/sandboxing.md

Lines changed: 94 additions & 31 deletions
Original file line numberDiff line numberDiff line change
@@ -38,27 +38,6 @@ To set it up, you need to configure a few env vars as well, in particular:
3838

3939
To simplify permission management, you can also configure specific emails to automatically be made admins via another env var: `CONSOLE_ADMIN_EMAILS`. It should be a comma seperated list, and on login we'll provision that user to be an admin w/in your Plural console instance. We'd recommend only setting this for a small set of users, then using group bindings for permissions from then on
4040

41-
## Self-Host Git Repos
42-
43-
If your enterprise cannot accept external communication to github, we can provide a fully self-hosted git server built with [soft-serve](https://github.com/charmbracelet/soft-serve) with the required Plural repos pre-cloned at a compatible version for your instance of the console. This can be easily enabled via helm with the following values:
44-
45-
```yaml
46-
extraEnv:
47-
- name: CONSOLE_DEPLOY_OPERATOR_URL
48-
value: http://git-server.plrl-console:23232/deployment-operator.git # uses the git server for deployment operator updates
49-
- name: CONSOLE_ARITIFACTS_URL
50-
value: http://git-server.plrl-console:23232/scaffolds.git # uses the git server for our default service catalog setup artifacts
51-
gitServer:
52-
enabled: true
53-
```
54-
55-
We publish a new version of this every release so you will simply need to ensure it's vendored and ready to pull on each helm upgrade. Many organizations have a natural way to vendor docker images, and since this is deployed as a fully self-contained container image, you can simply repurpose that process to managing the necessary git repositories as well.
56-
57-
If you want to vendor the repositories entirely, the upstream repos are here:
58-
59-
- https://github.com/pluralsh/deployment-operator
60-
- https://github.com/pluralsh/scaffolds
61-
6241
## Sandboxed Compatibility Tables
6342

6443
We also bundle the compatibility and deprecation data in our docker images, and you can disable live polling github by setting the env var:
@@ -73,21 +52,70 @@ This is a suitable replacement if you're ok with some data staleness and don't h
7352

7453
Lots of enterprises have strict requirements around the docker registries they use, or pull caches that whitelist a limited set of registries. The important images for setting up your own instance are:
7554

76-
- ghcr.io/pluralsh/console
77-
- ghcr.io/pluralsh/kas
78-
- ghcr.io/pluralsh/deployment-controller
79-
- ghcr.io/pluralsh/deployment-operator
55+
Plural maintained images:
56+
57+
```
58+
Management Cluster:
59+
- ghcr.io/pluralsh/console
60+
- ghcr.io/pluralsh/kas
61+
- ghcr.io/pluralsh/deployment-controller
62+
- ghcr.io/pluralsh/git-server (optional if you want to use our vendored git server)
63+
```
64+
65+
```
66+
Agent:
8067
- ghcr.io/pluralsh/agentk
81-
- ghcr.io/pluralsh/git-server (optional if you want to use our vendored git server)
68+
- ghcr.io/pluralsh/deployment-operator
69+
```
70+
71+
```
72+
Third party images used by our chart (these are often already vendored in an enterprise environment):
8273
- ghcr.io/pluralsh/registry/bitnami/redis:7.4.2-debian-12-r5
74+
- ghcr.io/pluralsh/registry/nginx:stable-alpine3.20-slim (can be any nginx image, ours is not customized)
75+
- docker.io/kubernetesui/dashboard-api - this is also available via `ghcr.io/pluralsh/registry/kubernetesui/dashboard-api`
76+
```
77+
78+
If you want to deterministically extract the images from our charts, you can also just use yq, like so:
79+
80+
```sh
81+
git clone https://github.com/pluralsh/console.git
82+
cd console
83+
helm template charts/console | yq '..|.image? | select(.)' | sort -u
84+
85+
git clone https://github.com/pluralsh/deployment-operator.git
86+
cd deployment-operator
87+
helm template charts/console | yq '..|.image? | select(.)' | sort -u
88+
```
89+
90+
If you plan to utilize Stacks, Sentinels or our async coding agent harness, there are a few other images that are utilized by our deployment-operator:
91+
92+
```
93+
- ghcr.io/pluralsh/harness
94+
- ghcr.io/pluralsh/sentinel-harness
95+
- ghcr.io/pluralsh/agent-harness
96+
```
97+
98+
You can see them all [here](https://github.com/orgs/pluralsh/packages?repo_name=deployment-operator).
99+
100+
The product experience of all these allow bring-your-own image, but if you configure a pull-through cache for these images or vendor them consistently, you can have Plural auto-wire it against an internal registry with the following CRD:
101+
102+
```yaml
103+
apiVersion: deployments.plural.sh/v1alpha1
104+
kind: AgentConfiguration
105+
metadata:
106+
name: global
107+
namespace: plrl-deploy-operator
108+
spec:
109+
baseRegistryURL: your.enterprise.registry
110+
```
111+
112+
See more about this resource [here](/overview/agent-api-reference#agentconfigurationspec)
83113
84114
{% callout severity="info" %}
85115
All of these images follow semver, and are also published to `gcr.io` and `docker.io` as well for convenience, in the event that either of those are eligible for internal pull-through caches. The redis instance is not meaningfully customized and any bitnami or equivalent redis container image can theoretically work there.
86116
{% /callout %}
87117

88-
The first three will be configured in the main console chart and are installed once in your management cluster, the latter two are needed for your deployment agent pod, and require a bit more advanced configuration to manage them in bulk.
89-
90-
A starter values file for configuring images for your console in the management cluster would be:
118+
To configure your *management cluster* helm values, use the following template:
91119

92120
```yaml
93121
# configure main console image
@@ -103,9 +131,22 @@ kas:
103131
104132
image:
105133
repository: your.enterprise.registry/pluralsh/kas
134+
135+
redis:
136+
registry: your.enterprise.registry
137+
repository: redis
138+
139+
# if you need to enable the internal git server
140+
gitServer:
141+
repository: your.enterprise.registry/git-server
142+
143+
dashboard:
144+
api:
145+
image:
146+
repository: your.enterprise.registry/kubernetesui/dashboard
106147
```
107148

108-
And for the agent it would be:
149+
And for the *agent* it would be:
109150

110151
```yaml
111152
# configure main agent
@@ -120,6 +161,28 @@ agentk:
120161

121162
For more advanced configuration, we definitely recommend consulting the charts directly, they're both open source at https://github.com/pluralsh/console and https://github.com/pluralsh/deployment-operator.
122163

164+
165+
## Self-Host Git Repos
166+
167+
If your enterprise cannot accept external communication to github, we can provide a fully self-hosted git server built with [soft-serve](https://github.com/charmbracelet/soft-serve) with the required Plural repos pre-cloned at a compatible version for your instance of the console. This can be easily enabled via helm with the following values:
168+
169+
```yaml
170+
extraEnv:
171+
- name: CONSOLE_DEPLOY_OPERATOR_URL
172+
value: http://git-server.plrl-console:23232/deployment-operator.git # uses the git server for deployment operator updates
173+
- name: CONSOLE_ARITIFACTS_URL
174+
value: http://git-server.plrl-console:23232/scaffolds.git # uses the git server for our default service catalog setup artifacts
175+
gitServer:
176+
enabled: true
177+
```
178+
179+
We publish a new version of this every release so you will simply need to ensure it's vendored and ready to pull on each helm upgrade. Many organizations have a natural way to vendor docker images, and since this is deployed as a fully self-contained container image, you can simply repurpose that process to managing the necessary git repositories as well.
180+
181+
If you want to vendor the repositories entirely, the upstream repos are here:
182+
183+
- https://github.com/pluralsh/deployment-operator
184+
- https://github.com/pluralsh/scaffolds
185+
123186
## Disable cert-manager based TLS
124187

125188
Our chart defaults to including TLS reconciled by cert-manager, but if you use a cloud-integrated cert management tool like Amazon Certificate Manager, it is unnecessary and could cause double-encryption. Disabling is a simple values override, done with:
@@ -139,7 +202,7 @@ kas:
139202

140203
## Configuring Agent Helm Values
141204

142-
Like we said, the main console deployment is pretty easy to configure, but the agents need to be handled specially since they need to be configured in bulk. We provide a number of utilities to make reconfiguration scalable.
205+
Agents configuration must to be handled specially since they need to be configured in bulk. We provide a number of utilities to make reconfiguration scalable.
143206

144207
First, you'll first want to use our agent settings to configure your helm updates for agents globally, done at `/cd/settings/agents`. You should see a screen like the following that allows you to edit the helm values for agent charts managed through Plural:
145208

Lines changed: 109 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,109 @@
1+
---
2+
title: Add A Cluster
3+
description: How To Add An Existing Cluster to Your Plural Instance
4+
---
5+
6+
Adding a new cluster to Plural is very simple, it's simply a matter of installing our agent onto any end cluster, and usually follows two paths:
7+
8+
1. Leverage our CLI which wraps a full install including registering with your Plural api and helm installing the agent on the cluster
9+
2. Use our terraform provider to wrap this whole process as Infrastructure as Code
10+
11+
Both are functional and fully supported, and execute equivalent code under the hood. If you set up your install with `plural up` we've already wrapped a ton of fully functional GitOps workflows for you, and those usually are more featureful workflows than doing this manually. If you want to read more about them, feel free to look at the guide here: [Create a Workload Cluster](/getting-started/how-to-use/workload-cluster).
12+
13+
{% callout severity="info" %}
14+
We strongly recommend leveraging a IaC based pattern, since it'll allow you to export terraform state into Plural for re-use and maximizes reproducibility
15+
{% /callout %}
16+
17+
18+
## Onboard a cluster with our CLI
19+
20+
To add a new cluster simply run with a valid kubeconfig set up locally:
21+
22+
```sh
23+
plural cd clusters bootstrap --name {your-cluster-name} --tag {tag}={value} --tag {tag2}={value2}
24+
```
25+
26+
To see all CLI options, feel free to use:
27+
28+
```sh
29+
plural cd clusters bootstrap --help
30+
```
31+
32+
If you need to reinstall our agent for any reason, just use:
33+
34+
```sh
35+
plural cd clusters reinstall @{cluster-handle}
36+
```
37+
38+
{% callout severity="info" %}
39+
The `@` character is required, as it allows our CLI to differentiate names from IDs.
40+
41+
You should also address the cluster by handle in the event name is not unique in your system.
42+
{% /callout %}
43+
44+
## Onboard a cluster with our Terraform Provider
45+
46+
Here is a basic terraform snippet that shows how you can use our Terraform provider to install our agent
47+
48+
```terraform
49+
resource "plural_cluster" "this" {
50+
handle = var.cluster
51+
name = var.cluster
52+
tags = {
53+
fleet = var.fleet
54+
tier = var.tier
55+
}
56+
57+
# metadata attaching useful cluster-level state in Plural to use for service templating
58+
metadata = jsonencode({
59+
tier = var.tier
60+
iam = {
61+
load_balancer = module.addons.gitops_metadata.aws_load_balancer_controller_iam_role_arn
62+
cluster_autoscaler = module.addons.gitops_metadata.cluster_autoscaler_iam_role_arn
63+
external_dns = module.externaldns_irsa_role.iam_role_arn
64+
cert_manager = module.externaldns_irsa_role.iam_role_arn
65+
}
66+
67+
vpc_id = local.vpc.vpc_id
68+
region = var.region
69+
})
70+
71+
# direct kubeconfig for this cluster
72+
kubeconfig = {
73+
host = module.eks.cluster_endpoint
74+
cluster_ca_certificate = base64decode(module.eks.cluster_certificate_authority_data)
75+
token = data.aws_eks_cluster_auth.cluster.token
76+
}
77+
}
78+
79+
# optionally can specify kubeconfig at the provider level
80+
81+
provider "plural" {
82+
kubeconfig = {
83+
host = module.eks.cluster_endpoint
84+
cluster_ca_certificate = base64decode(module.eks.cluster_certificate_authority_data)
85+
token = data.aws_eks_cluster_auth.cluster.token
86+
}
87+
}
88+
```
89+
90+
This makes it easy to wrap Plural setup in existing IaC codebases and ensure full repeatability.
91+
92+
The metadata block is of importance as well, as it drives our helm + yaml templating experience within Plural CD. You can see some guides around that [here](/plural-features/continuous-deployment/service-templating).
93+
94+
## Next Steps
95+
96+
Once onboarded, you'll get a few main workflows connected to your cluster:
97+
98+
* GitOps Continuous Deployment - learn more [here](/plural-features/continuous-deployment)
99+
* Kubernetes Dashboarding - learn more [here](/plural-features/kubernetes-dashboard)
100+
* Plural AI - learn more [here](/plural-features/plural-ai)
101+
* Plural Flows - learn more [here](/plural-features/flows)
102+
103+
If you want a robust, repeatable and scalable way to provision clusters, or other forms of cloud infrastructure, we definitely recommend looking into [Stacks](/plural-features/stacks-iac-management)
104+
105+
And if you want everything working out of the box, we'd recommend using `plural up` and going through the [How To Guide](/getting-started/how-to-use) we've constructured which leverages a lot of the GitOps templates that are built into that experience. This covers everything from:
106+
107+
1. Kubernetes Fleet Provisioning
108+
2. Managing a runtime of Kubernetes add-ons
109+
3. Deploying microservices to k8s and managing them as Flows
Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
../service-templating

src/routing/docs-structure.ts

Lines changed: 14 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -36,6 +36,10 @@ export const docsStructure: DocSection[] = [
3636
path: 'plural-cloud',
3737
title: 'Host Your Plural Console with Plural Cloud',
3838
},
39+
{
40+
path: 'add-a-cluster',
41+
title: 'Add A Cluster To Plural',
42+
},
3943
],
4044
},
4145
{
@@ -86,6 +90,16 @@ export const docsStructure: DocSection[] = [
8690
path: 'resource-application-logic',
8791
title: 'Resource Application Logic',
8892
},
93+
{
94+
path: 'service-templating',
95+
title: 'Service templating',
96+
sections: [
97+
{
98+
path: 'supporting-liquid-filters',
99+
title: 'Supporting Liquid Filters',
100+
},
101+
],
102+
},
89103
{ path: 'lua', title: 'Dynamic Helm Configuration with Lua Scripts' },
90104
{ path: 'global-service', title: 'Global services' },
91105
{
@@ -197,16 +211,6 @@ export const docsStructure: DocSection[] = [
197211
{ path: 'filters', title: 'Liquid Filters in PR Automation' },
198212
],
199213
},
200-
{
201-
path: 'service-templating',
202-
title: 'Service templating',
203-
sections: [
204-
{
205-
path: 'supporting-liquid-filters',
206-
title: 'Supporting Liquid Filters',
207-
},
208-
],
209-
},
210214
{
211215
path: 'projects-and-multi-tenancy',
212216
title: 'Projects and multi-tenancy',

0 commit comments

Comments
 (0)