@bluedynamics/cdk8s-plone 0.1.36 → 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.
- package/.jsii +4 -4
- package/documentation/sources/explanation/architecture.md +31 -23
- package/documentation/sources/explanation/features.md +47 -36
- package/documentation/sources/explanation/index.md +12 -3
- package/documentation/sources/how-to/configure-security-context.md +148 -0
- package/documentation/sources/how-to/deploy-classic-ui.md +57 -49
- package/documentation/sources/how-to/deploy-production-volto.md +61 -51
- package/documentation/sources/how-to/deploy-with-vinyl-cache.md +18 -9
- package/documentation/sources/how-to/enable-prometheus-monitoring.md +123 -0
- package/documentation/sources/how-to/index.md +14 -6
- package/documentation/sources/how-to/schedule-pods.md +150 -0
- package/documentation/sources/how-to/setup-prerequisites.md +53 -44
- package/documentation/sources/index.md +23 -14
- package/documentation/sources/reference/api/index.md +11 -2
- package/documentation/sources/reference/configuration-options.md +217 -50
- package/documentation/sources/reference/index.md +13 -4
- package/documentation/sources/tutorials/01-quick-start.md +27 -19
- package/documentation/sources/tutorials/index.md +10 -1
- package/lib/httpcache.js +1 -1
- package/lib/plone.js +1 -1
- package/lib/vinylcache.js +1 -1
- package/package.json +7 -7
|
@@ -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-
|
|
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
|
-
|
|
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
|
-
|
|
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
|
|
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
|
-
```
|
|
24
|
+
```shell
|
|
16
25
|
kubectl version --client
|
|
17
26
|
```
|
|
18
27
|
|
|
19
28
|
**Configure cluster access:**
|
|
20
|
-
```
|
|
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
|
-
```
|
|
45
|
+
```shell
|
|
37
46
|
nvm install --lts
|
|
38
47
|
nvm use --lts
|
|
39
48
|
```
|
|
40
49
|
|
|
41
50
|
**Verify installation:**
|
|
42
|
-
```
|
|
51
|
+
```shell
|
|
43
52
|
node --version
|
|
44
53
|
npm --version
|
|
45
54
|
```
|
|
46
55
|
|
|
47
|
-
### Python (for Python
|
|
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
|
-
```
|
|
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
|
-
```
|
|
77
|
+
```shell
|
|
69
78
|
npm install -g cdk8s-cli
|
|
70
79
|
```
|
|
71
80
|
|
|
72
81
|
**Verify installation:**
|
|
73
|
-
```
|
|
82
|
+
```shell
|
|
74
83
|
cdk8s --version
|
|
75
84
|
```
|
|
76
85
|
|
|
77
|
-
## Optional
|
|
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
|
-
```
|
|
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
|
-
```
|
|
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
|
-
```
|
|
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
|
|
130
|
+
### Local development clusters
|
|
122
131
|
|
|
123
132
|
**Minikube**
|
|
124
|
-
```
|
|
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
|
-
```
|
|
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
|
-
```
|
|
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
|
|
172
|
+
### Cloud Kubernetes services
|
|
164
173
|
|
|
165
174
|
**Google Kubernetes Engine (GKE)**
|
|
166
|
-
```
|
|
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
|
-
```
|
|
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
|
-
```
|
|
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
|
|
212
|
+
## Cluster requirements
|
|
204
213
|
|
|
205
|
-
### Minimum
|
|
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
|
|
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
|
-
```
|
|
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
|
|
242
|
+
## Namespace setup
|
|
234
243
|
|
|
235
244
|
Create a namespace for your Plone deployment:
|
|
236
245
|
|
|
237
|
-
```
|
|
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
|
|
257
|
+
## Image registry access
|
|
249
258
|
|
|
250
|
-
### Public
|
|
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
|
|
265
|
+
### Private registries
|
|
257
266
|
|
|
258
267
|
Create a pull secret for private registries:
|
|
259
268
|
|
|
260
269
|
**Docker Hub:**
|
|
261
|
-
```
|
|
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
|
-
```
|
|
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
|
-
```
|
|
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
|
|
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
|
-
```
|
|
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
|
|
331
|
+
## Next steps
|
|
323
332
|
|
|
324
333
|
Now that your environment is ready:
|
|
325
334
|
|
|
326
|
-
1. **Start the tutorial**: Follow the
|
|
327
|
-
2. **Explore examples**: Check the [example project](https://github.com/bluedynamics/cdk8s-plone-example)
|
|
328
|
-
3. **Read about variants**: Learn about
|
|
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
|
|
359
|
+
## See also
|
|
351
360
|
|
|
352
|
-
-
|
|
353
|
-
-
|
|
354
|
-
-
|
|
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
|
-
|
|
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
|
|
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
|
|
83
|
+
## Quick links
|
|
75
84
|
|
|
76
|
-
### Getting
|
|
77
|
-
-
|
|
78
|
-
-
|
|
79
|
-
-
|
|
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
|
-
-
|
|
83
|
-
-
|
|
91
|
+
- {doc}`reference/configuration-options` — Complete configuration reference
|
|
92
|
+
- {doc}`explanation/architecture` — High-level design
|
|
84
93
|
|
|
85
|
-
### Common
|
|
86
|
-
-
|
|
87
|
-
-
|
|
88
|
-
-
|
|
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
|
|
99
|
+
## Table of contents
|
|
91
100
|
|
|
92
101
|
```{toctree}
|
|
93
102
|
---
|