Skip to content

Add Node Selector Support for workloads in plane-ce Chart #120

@akib1689

Description

@akib1689

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

  1. Resource Isolation: Schedule API and worker pods on high-memory nodes.
  2. Storage Optimization: Place database workloads on nodes with SSD storate.
  3. Network Zones: Distribute workloads across availability zones
  4. 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.

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions