Compute Config
A Compute Config defines the default settings PaletteAI uses to deploy Kubernetes clusters. Platform administrators capture infrastructure details such as networking, Secure Shell (SSH) keys, and node configuration in a Compute Config. Data scientists and ML engineers then deploy against those defaults without repeating boilerplate.
Every Project must reference a Compute Config. When users deploy artificial intelligence and machine learning (AI/ML) applications or models, PaletteAI provisions clusters from the Compute Config so the same settings apply every time. These settings live under spec.paletteClusterConfig, which contains cluster-wide defaults for control plane and worker pool configuration. It can also include an edge block for Edge deployments.
Compute Config stores the cluster settings you would otherwise enter manually in Palette's cluster deployment workflow. For Edge clusters, it covers most settings from the Cluster Config and Nodes Config pages.
Required Fields
A valid Compute Config must include these fields:
spec.paletteClusterConfig.defaults.controlPlanePool- The control plane pool configuration object.spec.paletteClusterConfig.defaults.controlPlanePool.nodeCount- Must be1,3, or5. Use3or5for production so the cluster keeps working if a control plane node fails; use1only for single-node clusters.
For single-node clusters, nodeCount must be 1 and workerNodeEligible must be true.
The edge virtual IP (VIP) is set per-deployment on the AIWorkload or ComputePool under paletteClusterDeploymentConfig, not on the Compute Config. The Compute Config's edge section holds cluster-wide defaults only.
Examples
Minimal Configuration
The minimum fields required for a valid Compute Config:
apiVersion: spectrocloud.com/v1alpha1
kind: ComputeConfig
metadata:
name: minimal-compute-config
namespace: project-a
spec:
paletteClusterConfig:
defaults:
# Required: Control plane configuration
controlPlanePool:
nodeCount: 3 # Required: Must be 1, 3, or 5
Complete Edge Configuration
This example includes Edge defaults, SSH keys, node requirements, labels, annotations, and taints:
Example Edge Compute Config
apiVersion: spectrocloud.com/v1alpha1
kind: ComputeConfig
metadata:
name: edge-compute-config
namespace: project-a
spec:
paletteClusterConfig:
# Edge cluster defaults (optional)
edge:
ntpServers: # Optional
- 'time.google.com'
- 'time2.google.com'
networkOverlayConfig: # Optional
enabled: false
staticIp: true
cidr: '192.168.1.0/24'
overlayNetworkType: 'VXLAN'
isTwoNode: false # Optional: Default is false
# Cluster defaults. If defaults is provided, controlPlanePool is required.
defaults:
# SSH keys for node access (optional)
sshKeys:
- 'ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABgQC7... test-user@test-machine'
- 'ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABgQC8... admin@admin-machine'
# Deletion policy (optional, default: delete)
deletionPolicy: delete # Options: delete | orphan
# Required: Control plane configuration
controlPlanePool:
nodeCount: 3 # Required: Must be 1, 3, or 5
architecture: 'AMD64' # Optional: Default is AMD64. Options: AMD64 | ARM64
workerNodeEligible: false # Optional: Default is false
singleNodeCluster: false # Optional: Default is false
# Optional: Resource requirements per control plane node
cpu:
cpuCount: 8 # Minimum CPU cores per node
memory:
memory: '16 GB' # Minimum memory per node
# Optional: Node metadata
labels:
'palette.ai': 'true'
annotations:
'control-plane-annotation': 'control-plane-value'
'kubernetes.io/description': 'Control plane node'
# Optional: Node taints (mutually exclusive with worker pool taints)
taints:
- key: 'node-role.kubernetes.io/control-plane'
effect: 'NoSchedule' # Options: NoSchedule | PreferNoSchedule | NoExecute
# Optional: Worker pool defaults
workerPools:
- name: 'default-workers' # Optional: Auto-generated if not provided
architecture: 'AMD64' # Optional: Default is AMD64
# Optional: Resource requirements
cpu:
cpuCount: 16
memory:
memory: '32 GB'
gpu: # Optional: GPU requirements
family: 'NVIDIA A100'
gpuCount: 2
gpuMemory: '80 GB'
# Optional: Minimum worker nodes
minWorkerNodes: 2
# Optional: Node metadata
labels:
'palette.ai': 'true'
annotations:
'worker-annotation': 'worker-value'
'kubernetes.io/description': 'Worker node'
# Note: Taints cannot be set if the control plane has taints
Single-Node Cluster Configuration
For single-node clusters:
apiVersion: spectrocloud.com/v1alpha1
kind: ComputeConfig
metadata:
name: single-node-config
namespace: project-a
spec:
paletteClusterConfig:
defaults:
controlPlanePool:
nodeCount: 1 # Required for single-node
singleNodeCluster: true
workerNodeEligible: true # Required for single-node
Validation Rules
PaletteAI validates Compute Configs against the following rules:
Control Plane Node Count
- Must be
1,3, or5. Use3or5for production so the control plane can survive node failures; use1only for single-node clusters. - For single-node clusters: Must be
1withworkerNodeEligible: true.
Taints
- Control plane taints and worker pool taints are mutually exclusive.
- If the control plane has any taints defined, worker pools cannot have taints.
- Otherwise, the control plane and worker pool taints would compete during scheduling.
Resource Names
- Compute Config name must follow standard Kubernetes resource naming rules:
- Start with a lowercase letter or number.
- Contain only lowercase letters, numbers, and hyphens.
- End with a lowercase letter or number.
- Maximum 63 characters.
Network Configuration
- If
edge.networkOverlayConfig.cidris specified, it must be valid Classless Inter-Domain Routing (CIDR) notation, such as192.168.1.0/24.
Field Reference
The tables below cover the controlPlanePool and workerPools fields. For the full schema, including all edge.*, sshKeys, and deletionPolicy fields, refer to the ComputeConfig CRD reference.
Control Plane Pool Fields
| Field | Required | Type | Description | Default |
|---|---|---|---|---|
nodeCount | Yes | 1 | 3 | 5 | Number of control plane nodes | None |
architecture | No | AMD64 | ARM64 | CPU architecture | AMD64 |
workerNodeEligible | No | boolean | Allow workloads on control plane nodes | false |
singleNodeCluster | No | boolean | Configure the cluster as single-node | false |
cpu.cpuCount | No | integer | Minimum CPU cores per node | None |
memory.memory | No | string | Minimum memory per node | None |
gpu | No | object | GPU requirements | None |
labels | No | map | Node labels | None |
annotations | No | map | Node annotations | None |
taints | No | array | Node taints | None |
Worker Pool Fields
| Field | Required | Type | Description | Default |
|---|---|---|---|---|
name | No | string | Worker pool name | Auto-generated |
architecture | No | AMD64 | ARM64 | CPU architecture | AMD64 |
minWorkerNodes | No | integer | Minimum worker nodes | None |
cpu.cpuCount | No | integer | Minimum CPU cores per node | None |
memory.memory | No | string | Minimum memory per node | None |
gpu | No | object | GPU requirements | None |
labels | No | map | Node labels | None |
annotations | No | map | Node annotations | None |
taints | No | array | Node taints, if the control plane has no taints | None |
Worker Node Eligibility
The controlPlanePool.workerNodeEligible setting determines whether control plane nodes can run workloads in addition to managing the cluster.
For single-node clusters, the node functions as both control plane and worker. Scheduling follows the worker pool's requirements, and control plane labels, taints, and annotations are merged into the pool and override worker pool values where they conflict.
Set workerNodeEligible to true for single-node deployments, and false for multi-node deployments so control plane nodes stay dedicated to cluster management.
Refer to Deploy a Single-Node Compute Pool for a step-by-step guide on configuring and deploying single-node clusters with worker-eligible control planes.
Minimum Worker Nodes
PaletteAI resolves the minimum worker node count from these sources, in order of priority:
-
Workload Profile - The
palette.ai/min-nodes: Nlabel on the Workload Profile (highest priority).Example WorkloadProfile labelapiVersion: spectrocloud.com/v1beta1
kind: WorkloadProfile
metadata:
name: distributed-training
labels:
palette.ai/min-nodes: '3' # This workload requires at least 3 nodes
spec: -
Worker Pool Config -
minWorkerNodesin the worker pool configuration, either in theAIWorkloadorComputePoolspec.Example AIWorkload minWorkerNodesapiVersion: spectrocloud.com/v1alpha1
kind: AIWorkload
metadata:
name: my-workload
spec:
clusterVariant:
dedicated:
paletteClusterDeploymentConfig:
cloudType: edge-native
nodePoolRequirements:
controlPlanePool:
nodeCount: 3
workerPools:
- name: gpu-workers
gpu:
family: 'NVIDIA A100'
gpuCount: 8
minWorkerNodes: 3infoEach worker pool requires a
namefield. If you do not specify one, PaletteAI automatically generates a unique identifier for the worker pool. -
Compute Config Defaults -
minWorkerNodesinspec.paletteClusterConfig.defaults.workerPools[*](lowest priority).Example Compute Config minWorkerNodes defaultapiVersion: spectrocloud.com/v1alpha1
kind: ComputeConfig
spec:
paletteClusterConfig:
defaults:
workerPools:
- minWorkerNodes: 2
If none of these sources specify a minimum worker node requirement, no minimum is enforced.
Resources
Refer to the following articles to learn more about the role Compute Config plays in PaletteAI:
- Compute - Discovers available machines for cluster deployment.
- Compute Pool - Allocates machines and provisions clusters using Compute Config settings.
- Project - References a Compute Config for all workloads in the project.