-
Notifications
You must be signed in to change notification settings - Fork 20
Description
Overview
The plane-ce
chart currently lacks support for node selectors across its workloads, which limits deployment flexibility in multi-node kubernetes clusters where workloads need to be scheduled on specific nodes based on labels, taints or hardware requirements.
Current State
The chart supports various deployment configurations for:
- Web Deployment
- Space Dployment
- Admin Deployment
- Live Service Deployment
- Api Deployment
- Worker Deployment
- Beat-worker Deployment
- Stateful services (PostgreSql, Redis, RabbitMQ, MiniO)
However, none of these deployments currently expose nodeSelector
, tolerations
or affinity
configuration options.
Expected Behaviour
Users should be able to specify node selectors for each workload component to:
- Schedule workloads on nodes with specific labels (e.g.,
node-type=compute
,zone=us-west-1a
). - Separate Stateful workloads from stateless workloads
- Ensure workloads run on nodes with appropriate resources (CPU, memory, storate)
- Comply with security or compliance requirements for node placement.
Proposed Solution
Add node selector configuration options to the values.yaml
schema for each deployment component:
web:
nodeSelector: {}
tolerations: []
affinity: {}
space:
nodeSelector: {}
tolerations: []
affinity: {}
admin:
nodeSelector: {}
tolerations: []
affinity: {}
api:
nodeSelector: {}
tolerations: []
affinity: {}
worker:
nodeSelector: {}
tolerations: []
affinity: {}
beatworker:
nodeSelector: {}
tolerations: []
affinity: {}
live:
nodeSelector: {}
tolerations: []
affinity: {}
# Stateful services
postgres:
nodeSelector: {}
tolerations: []
affinity: {}
redis:
nodeSelector: {}
tolerations: []
affinity: {}
rabbitmq:
nodeSelector: {}
tolerations: []
affinity: {}
minio:
nodeSelector: {}
tolerations: []
affinity: {}
IMplementation Notes
- This should be implemented in the Helm templates under templates.
- Update the README.md documentation to include the new configuration options.
- Ensure backward compatibility by defaulting all values to empty objects/arrays.
Use Case Examples
- Resource Isolation: Schedule API and worker pods on high-memory nodes.
- Storage Optimization: Place database workloads on nodes with SSD storate.
- Network Zones: Distribute workloads across availability zones
- Dedicated Nodes: Run Plane workloads on dedicated nodes with taints.
Additional Context
This enhancement would bring the plane-ce
chart in line with Kubernetes best practices and provide users with the flexibility needed for production deployments across diverse cluster configuration.