Skip to content

Commit 19e3393

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

File tree

5 files changed

+243
-58
lines changed

5 files changed

+243
-58
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: 104 additions & 37 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,72 @@ 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

55+
Plural maintained images:
56+
57+
```
58+
Management Cluster:
7659
- ghcr.io/pluralsh/console
7760
- ghcr.io/pluralsh/kas
7861
- ghcr.io/pluralsh/deployment-controller
79-
- ghcr.io/pluralsh/deployment-operator
80-
- ghcr.io/pluralsh/agentk
8162
- ghcr.io/pluralsh/git-server (optional if you want to use our vendored git server)
63+
```
64+
65+
```
66+
Agent:
67+
- ghcr.io/pluralsh/agentk
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.
118+
## Docker Repository Overrides for Your management cluster
89119

90-
A starter values file for configuring images for your console in the management cluster would be:
120+
For the helm main Plural helm repository (https://pluralsh.github.io/console), configuring your *management cluster*, you'll want to use the following yaml overlay:
91121

92122
```yaml
93123
# configure main console image
@@ -103,23 +133,47 @@ kas:
103133
104134
image:
105135
repository: your.enterprise.registry/pluralsh/kas
106-
```
107136
108-
And for the agent it would be:
137+
redis:
138+
registry: your.enterprise.registry
139+
repository: redis
109140
110-
```yaml
111-
# configure main agent
112-
image:
113-
repository: your.enterprise.registry/pluralsh/deployment-operator
141+
# if you need to enable the internal git server
142+
gitServer:
143+
repository: your.enterprise.registry/git-server
114144
115-
# configure agentk (if this isn't pullable kubernetes dashboarding functionality will break but deployments can still proceed)
116-
agentk:
117-
image:
118-
repository: your.enterprise.registry/pluralsh/agentk
145+
dashboard:
146+
api:
147+
image:
148+
repository: your.enterprise.registry/kubernetesui/dashboard
119149
```
120150

151+
Agent helm configuration is covered in a few sections below.
152+
121153
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.
122154

155+
156+
## Self-Host Git Repos
157+
158+
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:
159+
160+
```yaml
161+
extraEnv:
162+
- name: CONSOLE_DEPLOY_OPERATOR_URL
163+
value: http://git-server.plrl-console:23232/deployment-operator.git # uses the git server for deployment operator updates
164+
- name: CONSOLE_ARITIFACTS_URL
165+
value: http://git-server.plrl-console:23232/scaffolds.git # uses the git server for our default service catalog setup artifacts
166+
gitServer:
167+
enabled: true
168+
```
169+
170+
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.
171+
172+
If you want to vendor the repositories entirely, the upstream repos are here:
173+
174+
- https://github.com/pluralsh/deployment-operator
175+
- https://github.com/pluralsh/scaffolds
176+
123177
## Disable cert-manager based TLS
124178

125179
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,12 +193,25 @@ kas:
139193

140194
## Configuring Agent Helm Values
141195

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.
196+
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.
143197

144-
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:
198+
First, you'll first want to use our agent settings to configure your helm updates for agents globally, done at `{your-console-fqdn}/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:
145199

146200
![](/assets/deployments/agent-update.png)
147201

202+
This is the yaml blob that is most relevant:
203+
204+
```yaml
205+
# configure main agent
206+
image:
207+
repository: your.enterprise.registry/pluralsh/deployment-operator
208+
209+
# configure agentk (if this isn't pullable kubernetes dashboarding functionality will break but deployments can still proceed)
210+
agentk:
211+
image:
212+
repository: your.enterprise.registry/pluralsh/agentk
213+
```
214+
148215
This can also be set via CRD using:
149216

150217
```yaml
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

0 commit comments

Comments
 (0)