@bluedynamics/cdk8s-plone 0.1.35 → 0.1.37

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -0,0 +1,123 @@
1
+ ---
2
+ myst:
3
+ html_meta:
4
+ "description": "Create a Prometheus ServiceMonitor for the Plone backend, frontend, or Varnish cache to expose metrics."
5
+ "property=og:description": "Create a Prometheus ServiceMonitor for the Plone backend, frontend, or Varnish cache to expose metrics."
6
+ "property=og:title": "Enable Prometheus monitoring"
7
+ "keywords": "Plone, cdk8s, Kubernetes, Prometheus, ServiceMonitor, monitoring, metrics"
8
+ ---
9
+
10
+ ```{image} ../_static/kup6s-icon-howto.svg
11
+ :align: center
12
+ :class: section-icon-large
13
+ ```
14
+
15
+ # Enable Prometheus monitoring
16
+
17
+ <div class="page-metadata">
18
+ <div class="metadata-content">
19
+ <p><strong>Type</strong>: How-To (Task-oriented)</p>
20
+ <p><strong>Difficulty</strong>: Intermediate</p>
21
+ <p><strong>Time</strong>: 15 minutes</p>
22
+ </div>
23
+ </div>
24
+
25
+ This guide shows you how to expose Plone metrics to Prometheus by creating a `ServiceMonitor` for the backend, the frontend, or the Varnish cache.
26
+
27
+ ## Prerequisites
28
+
29
+ - The [Prometheus Operator](https://github.com/prometheus-operator/prometheus-operator) installed in the cluster (it provides the `ServiceMonitor` CRD).
30
+ - A `Prometheus` resource that selects the `ServiceMonitor` resources you create (check `serviceMonitorSelector` and `serviceMonitorNamespaceSelector`).
31
+ - A Plone container instrumented to expose metrics over HTTP. Plone itself does not ship a Prometheus endpoint; you need an add-on (such as a WSGI middleware) or a sidecar exporter.
32
+
33
+ ## Enable the ServiceMonitor on the backend
34
+
35
+ ```typescript
36
+ import { Plone, PloneVariant } from '@bluedynamics/cdk8s-plone';
37
+
38
+ new Plone(chart, 'plone', {
39
+ variant: PloneVariant.VOLTO,
40
+ backend: {
41
+ image: 'plone/plone-backend:6.1.3',
42
+ servicemonitor: true,
43
+ metricsPath: '/metrics',
44
+ },
45
+ frontend: {
46
+ image: 'plone/plone-frontend:16.0.0',
47
+ },
48
+ });
49
+ ```
50
+
51
+ `servicemonitor: true` instructs `cdk8s-plone` to emit a `ServiceMonitor` that scrapes the backend Service on its main port at `/metrics`.
52
+
53
+ ## Scrape the frontend on a dedicated port
54
+
55
+ Volto can expose metrics on a separate port through middleware such as [`express-prometheus-middleware`](https://www.npmjs.com/package/express-prometheus-middleware).
56
+ Point `cdk8s-plone` at that port:
57
+
58
+ ```typescript
59
+ frontend: {
60
+ image: 'plone/plone-frontend:16.0.0',
61
+ servicemonitor: true,
62
+ metricsPort: 9090,
63
+ metricsPath: '/metrics',
64
+ }
65
+ ```
66
+
67
+ `metricsPort` accepts a port number or a Service port name.
68
+
69
+ ## Scrape the Varnish cache
70
+
71
+ `PloneHttpcache` and `PloneVinylCache` each accept their own monitoring switch.
72
+
73
+ ```typescript
74
+ import { PloneHttpcache } from '@bluedynamics/cdk8s-plone';
75
+
76
+ new PloneHttpcache(chart, 'cache', {
77
+ plone: ploneInstance,
78
+ servicemonitor: true,
79
+ exporterEnabled: true,
80
+ });
81
+ ```
82
+
83
+ `exporterEnabled` (default `true`) deploys the Varnish exporter sidecar that the `ServiceMonitor` scrapes.
84
+
85
+ For the cloud-vinyl operator:
86
+
87
+ ```typescript
88
+ import { PloneVinylCache } from '@bluedynamics/cdk8s-plone';
89
+
90
+ new PloneVinylCache(chart, 'cache', {
91
+ plone: ploneInstance,
92
+ monitoring: true,
93
+ });
94
+ ```
95
+
96
+ ## Verify the rollout
97
+
98
+ ```shell
99
+ # Generate manifests and confirm the ServiceMonitor exists
100
+ cdk8s synth
101
+ grep -l 'kind: ServiceMonitor' dist/*.yaml
102
+
103
+ # Apply and inspect on the cluster
104
+ kubectl apply -f dist/
105
+ kubectl get servicemonitor -n <namespace>
106
+ kubectl describe servicemonitor <name> -n <namespace>
107
+ ```
108
+
109
+ If Prometheus is not picking up the new target, confirm:
110
+
111
+ - The `ServiceMonitor` namespace matches the `Prometheus` resource's `serviceMonitorNamespaceSelector`.
112
+ - The `ServiceMonitor` labels match the `Prometheus` resource's `serviceMonitorSelector`.
113
+ - The metrics endpoint returns HTTP 200 from a pod in the cluster:
114
+
115
+ ```shell
116
+ kubectl run -it --rm curl --image=curlimages/curl --restart=Never -- \
117
+ curl -sf http://<service>.<namespace>:<port>/metrics | head
118
+ ```
119
+
120
+ ## See also
121
+
122
+ - {doc}`/reference/configuration-options` — Reference for `servicemonitor`, `metricsPort`, `metricsPath`.
123
+ - [Prometheus Operator documentation](https://prometheus-operator.dev/) — `ServiceMonitor` selectors and lifecycle.
@@ -1,9 +1,18 @@
1
+ ---
2
+ myst:
3
+ html_meta:
4
+ "description": "Goal-oriented how-to guides for solving specific cdk8s-plone deployment and configuration problems."
5
+ "property=og:description": "Goal-oriented how-to guides for solving specific cdk8s-plone deployment and configuration problems."
6
+ "property=og:title": "How-to guides"
7
+ "keywords": "Plone, cdk8s, Kubernetes, how-to, deployment, configuration"
8
+ ---
9
+
1
10
  ```{image} ../_static/kup6s-icon-howto.svg
2
11
  :align: center
3
12
  :class: section-icon-large
4
13
  ```
5
14
 
6
- # How-To Guides
15
+ # How-to guides
7
16
 
8
17
  **Goal-oriented guides showing you how to solve specific problems with cdk8s-plone.**
9
18
 
@@ -42,21 +51,20 @@ deploy-with-vinyl-cache
42
51
  maxdepth: 1
43
52
  titlesonly: true
44
53
  ---
54
+ configure-security-context
55
+ schedule-pods
45
56
  ```
46
57
 
47
- *Configuration guides will be added in future releases.*
48
-
49
- ## Operations & Maintenance
58
+ ## Operations & maintenance
50
59
 
51
60
  ```{toctree}
52
61
  ---
53
62
  maxdepth: 1
54
63
  titlesonly: true
55
64
  ---
65
+ enable-prometheus-monitoring
56
66
  ```
57
67
 
58
- *Operations guides will be added in future releases.*
59
-
60
68
  ## Troubleshooting
61
69
 
62
70
  *This section will be populated with troubleshooting guides in future releases.*
@@ -0,0 +1,150 @@
1
+ ---
2
+ myst:
3
+ html_meta:
4
+ "description": "Constrain Plone backend, frontend, and Varnish pods to specific Kubernetes nodes using nodeSelector and tolerations."
5
+ "property=og:description": "Constrain Plone backend, frontend, and Varnish pods to specific Kubernetes nodes using nodeSelector and tolerations."
6
+ "property=og:title": "Schedule pods to specific nodes"
7
+ "keywords": "Plone, cdk8s, Kubernetes, nodeSelector, tolerations, scheduling, taints"
8
+ ---
9
+
10
+ ```{image} ../_static/kup6s-icon-howto.svg
11
+ :align: center
12
+ :class: section-icon-large
13
+ ```
14
+
15
+ # Schedule pods to specific nodes
16
+
17
+ <div class="page-metadata">
18
+ <div class="metadata-content">
19
+ <p><strong>Type</strong>: How-To (Task-oriented)</p>
20
+ <p><strong>Difficulty</strong>: Intermediate</p>
21
+ <p><strong>Time</strong>: 10 minutes</p>
22
+ </div>
23
+ </div>
24
+
25
+ This guide shows you how to control where Plone backend, frontend, and Varnish pods run.
26
+ Use `nodeSelector` to require specific node labels and tolerations to schedule onto tainted nodes.
27
+
28
+ ## Prerequisites
29
+
30
+ - A working Plone deployment using `cdk8s-plone`.
31
+ - Cluster labels and taints already configured on the target nodes.
32
+
33
+ ```shell
34
+ kubectl get nodes --show-labels
35
+ kubectl describe node <node> | grep Taints
36
+ ```
37
+
38
+ ## Constrain pods to labeled nodes
39
+
40
+ Add `nodeSelector` to `backend`, `frontend`, or both.
41
+ Every label in the selector must match for a node to be considered.
42
+
43
+ ```typescript
44
+ import { Plone, PloneVariant } from '@bluedynamics/cdk8s-plone';
45
+
46
+ new Plone(chart, 'plone', {
47
+ variant: PloneVariant.VOLTO,
48
+ backend: {
49
+ image: 'plone/plone-backend:6.1.3',
50
+ nodeSelector: {
51
+ 'topology.kubernetes.io/region': 'fsn1',
52
+ 'workload': 'plone',
53
+ },
54
+ },
55
+ frontend: {
56
+ image: 'plone/plone-frontend:16.0.0',
57
+ nodeSelector: {
58
+ 'workload': 'plone',
59
+ },
60
+ },
61
+ });
62
+ ```
63
+
64
+ ## Schedule the cache onto the same nodes
65
+
66
+ `PloneVinylCache` exposes the same `nodeSelector` option.
67
+
68
+ ```typescript
69
+ import { PloneVinylCache } from '@bluedynamics/cdk8s-plone';
70
+
71
+ new PloneVinylCache(chart, 'cache', {
72
+ plone: ploneInstance,
73
+ nodeSelector: {
74
+ 'workload': 'plone',
75
+ },
76
+ });
77
+ ```
78
+
79
+ `PloneHttpcache` schedules through the underlying mittwald Helm chart and does not expose a `nodeSelector` option directly.
80
+ Use cluster-level affinity rules or taints when you need to constrain those pods.
81
+
82
+ ## Tolerate tainted nodes
83
+
84
+ When nodes carry a taint, pods must declare a matching toleration before the scheduler places them there.
85
+ Both cache constructs accept a `tolerations` list.
86
+
87
+ ```typescript
88
+ new PloneHttpcache(chart, 'cache', {
89
+ plone: ploneInstance,
90
+ tolerations: [
91
+ {
92
+ key: 'workload',
93
+ operator: 'Equal',
94
+ value: 'plone',
95
+ effect: 'NoSchedule',
96
+ },
97
+ ],
98
+ });
99
+ ```
100
+
101
+ ```typescript
102
+ new PloneVinylCache(chart, 'cache', {
103
+ plone: ploneInstance,
104
+ tolerations: [
105
+ {
106
+ key: 'workload',
107
+ operator: 'Equal',
108
+ value: 'plone',
109
+ effect: 'NoSchedule',
110
+ },
111
+ ],
112
+ });
113
+ ```
114
+
115
+ `operator: 'Exists'` matches any value for that key.
116
+ Omit `effect` to tolerate every effect for the matching taint.
117
+
118
+ ## Combine selector and toleration
119
+
120
+ Selectors and tolerations work together: the selector narrows the candidate nodes, and the toleration unblocks the scheduler when those nodes are tainted.
121
+
122
+ ```typescript
123
+ new PloneVinylCache(chart, 'cache', {
124
+ plone: ploneInstance,
125
+ nodeSelector: {
126
+ 'workload': 'plone',
127
+ },
128
+ tolerations: [
129
+ { key: 'workload', operator: 'Equal', value: 'plone', effect: 'NoSchedule' },
130
+ ],
131
+ });
132
+ ```
133
+
134
+ ## Verify the rollout
135
+
136
+ ```shell
137
+ cdk8s synth
138
+ kubectl apply -f dist/
139
+
140
+ # Confirm pods landed on the expected nodes
141
+ kubectl get pods -n <namespace> -o wide
142
+ ```
143
+
144
+ A pod stuck in `Pending` with `0/N nodes are available: ... node(s) had untolerated taint` means a taint is not tolerated.
145
+ `0/N nodes are available: ... node(s) didn't match Pod's node affinity/selector` means the `nodeSelector` does not match any node.
146
+
147
+ ## See also
148
+
149
+ - {doc}`/reference/configuration-options` — `nodeSelector`, `HttpcacheToleration`, `VinylCacheToleration` reference.
150
+ - [Kubernetes: Assigning Pods to Nodes](https://kubernetes.io/docs/concepts/scheduling-eviction/assign-pod-node/) — Selectors, affinity, and taints.
@@ -1,8 +1,17 @@
1
- # Setup Prerequisites
1
+ ---
2
+ myst:
3
+ html_meta:
4
+ "description": "Install kubectl, Node.js or Python, CDK8S, and prepare a Kubernetes cluster to deploy Plone with cdk8s-plone."
5
+ "property=og:description": "Install kubectl, Node.js or Python, CDK8S, and prepare a Kubernetes cluster to deploy Plone with cdk8s-plone."
6
+ "property=og:title": "Setup prerequisites"
7
+ "keywords": "Plone, cdk8s, Kubernetes, kubectl, Node.js, Python, prerequisites"
8
+ ---
9
+
10
+ # Setup prerequisites
2
11
 
3
12
  Prepare your environment for deploying Plone with cdk8s-plone.
4
13
 
5
- ## Required Tools
14
+ ## Required tools
6
15
 
7
16
  ### kubectl
8
17
 
@@ -12,12 +21,12 @@ Command-line tool for deploying and managing Kubernetes resources.
12
21
  - [Install kubectl](https://kubernetes.io/docs/tasks/tools/#kubectl)
13
22
 
14
23
  **Verify installation:**
15
- ```bash
24
+ ```shell
16
25
  kubectl version --client
17
26
  ```
18
27
 
19
28
  **Configure cluster access:**
20
- ```bash
29
+ ```shell
21
30
  # Verify you can connect to your cluster
22
31
  kubectl cluster-info
23
32
  kubectl get nodes
@@ -33,18 +42,18 @@ Required for TypeScript/JavaScript development.
33
42
  **Installation:**
34
43
  - [Install Node.js](https://nodejs.org/)
35
44
  - Or use [nvm](https://github.com/nvm-sh/nvm):
36
- ```bash
45
+ ```shell
37
46
  nvm install --lts
38
47
  nvm use --lts
39
48
  ```
40
49
 
41
50
  **Verify installation:**
42
- ```bash
51
+ ```shell
43
52
  node --version
44
53
  npm --version
45
54
  ```
46
55
 
47
- ### Python (for Python Development)
56
+ ### Python (for Python development)
48
57
 
49
58
  Required for Python development.
50
59
 
@@ -55,7 +64,7 @@ Required for Python development.
55
64
  - [Install Python](https://www.python.org/downloads/)
56
65
 
57
66
  **Verify installation:**
58
- ```bash
67
+ ```shell
59
68
  python --version
60
69
  pip --version
61
70
  ```
@@ -65,16 +74,16 @@ pip --version
65
74
  The CDK8S command-line tool for project initialization and synthesis.
66
75
 
67
76
  **Installation:**
68
- ```bash
77
+ ```shell
69
78
  npm install -g cdk8s-cli
70
79
  ```
71
80
 
72
81
  **Verify installation:**
73
- ```bash
82
+ ```shell
74
83
  cdk8s --version
75
84
  ```
76
85
 
77
- ## Optional Tools
86
+ ## Optional tools
78
87
 
79
88
  ### Helm
80
89
 
@@ -84,7 +93,7 @@ Required only if you want to generate Helm charts instead of raw Kubernetes mani
84
93
  - [Install Helm](https://helm.sh/docs/intro/install/)
85
94
 
86
95
  **Verify installation:**
87
- ```bash
96
+ ```shell
88
97
  helm version
89
98
  ```
90
99
 
@@ -96,7 +105,7 @@ Terminal-based UI for managing Kubernetes clusters (recommended for development)
96
105
  - [Install k9s](https://k9scli.io/topics/install/)
97
106
 
98
107
  **Usage:**
99
- ```bash
108
+ ```shell
100
109
  k9s
101
110
  ```
102
111
 
@@ -108,7 +117,7 @@ Tools for switching between Kubernetes contexts and namespaces.
108
117
  - [Install kubectx](https://github.com/ahmetb/kubectx#installation)
109
118
 
110
119
  **Usage:**
111
- ```bash
120
+ ```shell
112
121
  kubectx # List contexts
113
122
  kubectx my-cluster # Switch context
114
123
  kubens my-namespace # Switch namespace
@@ -118,10 +127,10 @@ kubens my-namespace # Switch namespace
118
127
 
119
128
  You need access to a Kubernetes cluster for deployment.
120
129
 
121
- ### Local Development Clusters
130
+ ### Local development clusters
122
131
 
123
132
  **Minikube**
124
- ```bash
133
+ ```shell
125
134
  # Install
126
135
  # https://minikube.sigs.k8s.io/docs/start/
127
136
 
@@ -133,7 +142,7 @@ kubectl cluster-info
133
142
  ```
134
143
 
135
144
  **kind (Kubernetes in Docker)**
136
- ```bash
145
+ ```shell
137
146
  # Install
138
147
  # https://kind.sigs.k8s.io/docs/user/quick-start/
139
148
 
@@ -149,7 +158,7 @@ kubectl cluster-info
149
158
  - Verify with `kubectl cluster-info`
150
159
 
151
160
  **k3d (Lightweight Kubernetes)**
152
- ```bash
161
+ ```shell
153
162
  # Install
154
163
  # https://k3d.io/
155
164
 
@@ -160,10 +169,10 @@ k3d cluster create plone-dev
160
169
  kubectl cluster-info
161
170
  ```
162
171
 
163
- ### Cloud Kubernetes Services
172
+ ### Cloud Kubernetes services
164
173
 
165
174
  **Google Kubernetes Engine (GKE)**
166
- ```bash
175
+ ```shell
167
176
  # Create cluster
168
177
  gcloud container clusters create plone-cluster \
169
178
  --num-nodes=3 \
@@ -174,7 +183,7 @@ gcloud container clusters get-credentials plone-cluster
174
183
  ```
175
184
 
176
185
  **Amazon EKS**
177
- ```bash
186
+ ```shell
178
187
  # Create cluster using eksctl
179
188
  eksctl create cluster \
180
189
  --name plone-cluster \
@@ -186,7 +195,7 @@ kubectl get nodes
186
195
  ```
187
196
 
188
197
  **Azure Kubernetes Service (AKS)**
189
- ```bash
198
+ ```shell
190
199
  # Create cluster
191
200
  az aks create \
192
201
  --resource-group myResourceGroup \
@@ -200,9 +209,9 @@ az aks get-credentials \
200
209
  --name plone-cluster
201
210
  ```
202
211
 
203
- ## Cluster Requirements
212
+ ## Cluster requirements
204
213
 
205
- ### Minimum Resources
214
+ ### Minimum resources
206
215
 
207
216
  **For development/testing:**
208
217
  - **Nodes:** 1-2 nodes
@@ -216,7 +225,7 @@ az aks get-credentials \
216
225
  - **Memory:** 8GB+ per node
217
226
  - **Storage:** 50GB+ per node
218
227
 
219
- ### Required Kubernetes Features
228
+ ### Required Kubernetes features
220
229
 
221
230
  - **Version:** Kubernetes 1.20+
222
231
  - **Networking:** CNI plugin installed
@@ -224,17 +233,17 @@ az aks get-credentials \
224
233
  - **DNS:** CoreDNS or equivalent
225
234
 
226
235
  **Verify storage classes:**
227
- ```bash
236
+ ```shell
228
237
  kubectl get storageclasses
229
238
  ```
230
239
 
231
240
  If no storage class exists, you need to configure one for your cluster.
232
241
 
233
- ## Namespace Setup
242
+ ## Namespace setup
234
243
 
235
244
  Create a namespace for your Plone deployment:
236
245
 
237
- ```bash
246
+ ```shell
238
247
  # Create namespace
239
248
  kubectl create namespace plone
240
249
 
@@ -245,20 +254,20 @@ kubectl config set-context --current --namespace=plone
245
254
  kubectl config view --minify | grep namespace:
246
255
  ```
247
256
 
248
- ## Image Registry Access
257
+ ## Image registry access
249
258
 
250
- ### Public Registries
259
+ ### Public registries
251
260
 
252
261
  No configuration needed for public Plone images:
253
262
  - `plone/plone-backend:6.1.3`
254
263
  - `plone/plone-frontend:16.0.0`
255
264
 
256
- ### Private Registries
265
+ ### Private registries
257
266
 
258
267
  Create a pull secret for private registries:
259
268
 
260
269
  **Docker Hub:**
261
- ```bash
270
+ ```shell
262
271
  kubectl create secret docker-registry docker-hub \
263
272
  --docker-server=docker.io \
264
273
  --docker-username=YOUR_USERNAME \
@@ -267,7 +276,7 @@ kubectl create secret docker-registry docker-hub \
267
276
  ```
268
277
 
269
278
  **Google Container Registry:**
270
- ```bash
279
+ ```shell
271
280
  kubectl create secret docker-registry gcr-secret \
272
281
  --docker-server=gcr.io \
273
282
  --docker-username=_json_key \
@@ -276,7 +285,7 @@ kubectl create secret docker-registry gcr-secret \
276
285
  ```
277
286
 
278
287
  **Azure Container Registry:**
279
- ```bash
288
+ ```shell
280
289
  kubectl create secret docker-registry acr-secret \
281
290
  --docker-server=myregistry.azurecr.io \
282
291
  --docker-username=YOUR_USERNAME \
@@ -291,7 +300,7 @@ new Plone(chart, 'my-plone', {
291
300
  });
292
301
  ```
293
302
 
294
- ## Verification Checklist
303
+ ## Verification checklist
295
304
 
296
305
  Before proceeding, verify:
297
306
 
@@ -304,7 +313,7 @@ Before proceeding, verify:
304
313
  - [ ] Image pull secrets created (if using private registries)
305
314
 
306
315
  **Verify everything:**
307
- ```bash
316
+ ```shell
308
317
  # Check tools
309
318
  kubectl version --client
310
319
  cdk8s --version
@@ -319,13 +328,13 @@ kubectl get storageclasses
319
328
  kubectl get namespace plone
320
329
  ```
321
330
 
322
- ## Next Steps
331
+ ## Next steps
323
332
 
324
333
  Now that your environment is ready:
325
334
 
326
- 1. **Start the tutorial**: Follow the [Quick Start](../tutorials/01-quick-start.md) guide
327
- 2. **Explore examples**: Check the [example project](https://github.com/bluedynamics/cdk8s-plone-example)
328
- 3. **Read about variants**: Learn about [Plone variants](../explanation/features.md#deployment-variants)
335
+ 1. **Start the tutorial**: Follow the {doc}`/tutorials/01-quick-start` guide.
336
+ 2. **Explore examples**: Check the [example project](https://github.com/bluedynamics/cdk8s-plone-example).
337
+ 3. **Read about variants**: Learn about {ref}`deployment-variants` in the features overview.
329
338
 
330
339
  ## Troubleshooting
331
340
 
@@ -347,8 +356,8 @@ Now that your environment is ready:
347
356
  - Verify RBAC permissions: `kubectl auth can-i create deployments`
348
357
  - Contact your cluster administrator for proper permissions
349
358
 
350
- ## See Also
359
+ ## See also
351
360
 
352
- - [Quick Start Tutorial](../tutorials/01-quick-start.md) - Get started with deployment
353
- - [Architecture Overview](../explanation/architecture.md) - Understanding the system
354
- - [Configuration Options](../reference/configuration-options.md) - Complete configuration reference
361
+ - {doc}`/tutorials/01-quick-start` Get started with deployment.
362
+ - {doc}`/explanation/architecture` Understand the system.
363
+ - {doc}`/reference/configuration-options` Complete configuration reference.
@@ -1,4 +1,13 @@
1
- # cdk8s-plone Documentation
1
+ ---
2
+ myst:
3
+ html_meta:
4
+ "description": "Documentation for cdk8s-plone, a TypeScript and Python library for deploying Plone CMS to Kubernetes with CDK8S."
5
+ "property=og:description": "Documentation for cdk8s-plone, a TypeScript and Python library for deploying Plone CMS to Kubernetes with CDK8S."
6
+ "property=og:title": "cdk8s-plone documentation"
7
+ "keywords": "Plone, cdk8s, Kubernetes, Volto, CMS, infrastructure as code"
8
+ ---
9
+
10
+ # cdk8s-plone documentation
2
11
 
3
12
  ```{image} _static/kup6s-icon-plone.svg
4
13
  :alt: cdk8s-plone logo
@@ -22,7 +31,7 @@ cdk8s-plone is a TypeScript construct library for [CDK8S](https://cdk8s.io/) tha
22
31
  - Component-level configuration options
23
32
  - Built on CDK8S for infrastructure as code
24
33
 
25
- ## Documentation Structure
34
+ ## Documentation structure
26
35
 
27
36
  This documentation follows the [Diátaxis framework](https://diataxis.fr/), organizing content into four categories based on what you need:
28
37
 
@@ -71,23 +80,23 @@ This documentation follows the [Diátaxis framework](https://diataxis.fr/), orga
71
80
 
72
81
  ::::
73
82
 
74
- ## Quick Links
83
+ ## Quick links
75
84
 
76
- ### Getting Started
77
- - [Quick Start](tutorials/01-quick-start.md) - Deploy your first Plone instance
78
- - [Setup Prerequisites](how-to/setup-prerequisites.md) - Prepare cluster infrastructure
79
- - [Features Overview](explanation/features.md) - Explore capabilities
85
+ ### Getting started
86
+ - {doc}`tutorials/01-quick-start` Deploy your first Plone instance
87
+ - {doc}`how-to/setup-prerequisites` Prepare cluster infrastructure
88
+ - {doc}`explanation/features` Explore capabilities
80
89
 
81
90
  ### Configuration
82
- - [Configuration Options](reference/configuration-options.md) - Complete configuration reference
83
- - [Architecture Overview](explanation/architecture.md) - High-level design
91
+ - {doc}`reference/configuration-options` Complete configuration reference
92
+ - {doc}`explanation/architecture` High-level design
84
93
 
85
- ### Common Tasks
86
- - Scale Resources - Adjust CPU and memory limits (coming soon)
87
- - Configure Monitoring - Set up Prometheus metrics (coming soon)
88
- - Backup and Restore - Protect your data (coming soon)
94
+ ### Common tasks
95
+ - {doc}`how-to/configure-security-context` Harden backend and frontend pods
96
+ - {doc}`how-to/enable-prometheus-monitoring` Wire up `ServiceMonitor`
97
+ - {doc}`how-to/schedule-pods` `nodeSelector` and tolerations
89
98
 
90
- ## Table of Contents
99
+ ## Table of contents
91
100
 
92
101
  ```{toctree}
93
102
  ---