Setup Prerequisites¶
Prepare your environment for deploying Plone with cdk8s-plone.
Required Tools¶
kubectl¶
Command-line tool for deploying and managing Kubernetes resources.
Installation:
Verify installation:
kubectl version --client
Configure cluster access:
# Verify you can connect to your cluster
kubectl cluster-info
kubectl get nodes
Node.js (for TypeScript/JavaScript)¶
Required for TypeScript/JavaScript development.
Minimum version: 16+ Recommended: LTS version
Installation:
Or use nvm:
nvm install --lts nvm use --lts
Verify installation:
node --version
npm --version
Python (for Python Development)¶
Required for Python development.
Minimum version: Python 3.8+ Recommended: Python 3.11+
Installation:
Verify installation:
python --version
pip --version
CDK8S CLI¶
The CDK8S command-line tool for project initialization and synthesis.
Installation:
npm install -g cdk8s-cli
Verify installation:
cdk8s --version
Optional Tools¶
Helm¶
Required only if you want to generate Helm charts instead of raw Kubernetes manifests.
Installation:
Verify installation:
helm version
k9s¶
Terminal-based UI for managing Kubernetes clusters (recommended for development).
Installation:
Usage:
k9s
kubectx and kubens¶
Tools for switching between Kubernetes contexts and namespaces.
Installation:
Usage:
kubectx # List contexts
kubectx my-cluster # Switch context
kubens my-namespace # Switch namespace
Kubernetes Cluster¶
You need access to a Kubernetes cluster for deployment.
Local Development Clusters¶
Minikube
# Install
# https://minikube.sigs.k8s.io/docs/start/
# Start cluster
minikube start
# Verify
kubectl cluster-info
kind (Kubernetes in Docker)
# Install
# https://kind.sigs.k8s.io/docs/user/quick-start/
# Create cluster
kind create cluster --name plone-dev
# Verify
kubectl cluster-info
Docker Desktop
Enable Kubernetes in Docker Desktop settings
Verify with
kubectl cluster-info
k3d (Lightweight Kubernetes)
# Install
# https://k3d.io/
# Create cluster
k3d cluster create plone-dev
# Verify
kubectl cluster-info
Cloud Kubernetes Services¶
Google Kubernetes Engine (GKE)
# Create cluster
gcloud container clusters create plone-cluster \
--num-nodes=3 \
--machine-type=n1-standard-2
# Get credentials
gcloud container clusters get-credentials plone-cluster
Amazon EKS
# Create cluster using eksctl
eksctl create cluster \
--name plone-cluster \
--nodes 3 \
--node-type t3.medium
# Verify
kubectl get nodes
Azure Kubernetes Service (AKS)
# Create cluster
az aks create \
--resource-group myResourceGroup \
--name plone-cluster \
--node-count 3 \
--node-vm-size Standard_D2_v2
# Get credentials
az aks get-credentials \
--resource-group myResourceGroup \
--name plone-cluster
Cluster Requirements¶
Minimum Resources¶
For development/testing:
Nodes: 1-2 nodes
CPU: 2+ cores per node
Memory: 4GB+ per node
Storage: 20GB+ per node
For production:
Nodes: 3+ nodes (for high availability)
CPU: 4+ cores per node
Memory: 8GB+ per node
Storage: 50GB+ per node
Required Kubernetes Features¶
Version: Kubernetes 1.20+
Networking: CNI plugin installed
Storage: StorageClass with dynamic provisioning
DNS: CoreDNS or equivalent
Verify storage classes:
kubectl get storageclasses
If no storage class exists, you need to configure one for your cluster.
Namespace Setup¶
Create a namespace for your Plone deployment:
# Create namespace
kubectl create namespace plone
# Set as default (optional)
kubectl config set-context --current --namespace=plone
# Verify
kubectl config view --minify | grep namespace:
Image Registry Access¶
Public Registries¶
No configuration needed for public Plone images:
plone/plone-backend:6.1.3plone/plone-frontend:16.0.0
Private Registries¶
Create a pull secret for private registries:
Docker Hub:
kubectl create secret docker-registry docker-hub \
--docker-server=docker.io \
--docker-username=YOUR_USERNAME \
--docker-password=YOUR_PASSWORD \
--docker-email=YOUR_EMAIL
Google Container Registry:
kubectl create secret docker-registry gcr-secret \
--docker-server=gcr.io \
--docker-username=_json_key \
--docker-password="$(cat keyfile.json)" \
--docker-email=user@example.com
Azure Container Registry:
kubectl create secret docker-registry acr-secret \
--docker-server=myregistry.azurecr.io \
--docker-username=YOUR_USERNAME \
--docker-password=YOUR_PASSWORD
Use the secret in your deployment:
new Plone(chart, 'my-plone', {
imagePullSecrets: ['docker-hub', 'gcr-secret'],
backend: { image: 'private-registry.io/plone-backend:6.1.3' },
});
Verification Checklist¶
Before proceeding, verify:
[ ] kubectl installed and configured
[ ] Access to Kubernetes cluster verified
[ ] Node.js or Python installed (depending on your language choice)
[ ] CDK8S CLI installed
[ ] Namespace created (optional but recommended)
[ ] Storage class available in cluster
[ ] Image pull secrets created (if using private registries)
Verify everything:
# Check tools
kubectl version --client
cdk8s --version
node --version # or python --version
# Check cluster access
kubectl cluster-info
kubectl get nodes
kubectl get storageclasses
# Check namespace
kubectl get namespace plone
Next Steps¶
Now that your environment is ready:
Start the tutorial: Follow the Quick Start guide
Explore examples: Check the example project
Read about variants: Learn about Plone variants
Troubleshooting¶
kubectl: command not found¶
Ensure kubectl is in your PATH
Reinstall following the official guide
Cannot connect to cluster¶
Verify kubeconfig:
kubectl config viewCheck cluster status:
kubectl cluster-infoEnsure VPN is connected (if required)
No storage classes available¶
Check cluster documentation for storage setup
For local clusters, storage is usually pre-configured
For cloud providers, ensure CSI drivers are installed
Permission denied errors¶
Verify RBAC permissions:
kubectl auth can-i create deploymentsContact your cluster administrator for proper permissions
See Also¶
Quick Start Tutorial - Get started with deployment
Architecture Overview - Understanding the system
Configuration Options - Complete configuration reference