ComputeConfig Configuration Reference
This page provides technical reference information for configuring ComputeConfig resources. For concepts, refer to Compute Configs. For step-by-step instructions, refer to Create and Manage Compute Configs. For the raw resource spec, refer to the ComputeConfig CRD documentation.
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
cidr: '192.168.1.0/24'
# staticIp and overlayNetworkType are deprecated and should not be used in new configurations.
# Static IP configuration is now managed per-host using the Compute resource's edgeHostStaticIPs field.
# VXLAN is the only supported overlay network type.
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
variant: 'NVIDIA A100-SXM4-80GB | 80 GB'
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.
Static IP Configuration
Static IP configuration is managed on a per-host basis using the Compute resource's edgeHostStaticIPs field. The cluster-level static IP mode is automatically derived from per-host entries during deployment. This approach provides more granular control over network configuration for individual edge hosts.
VXLAN is the only supported overlay network type. The staticIp and overlayNetworkType fields in networkOverlayConfig are deprecated and no longer read.
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 | ✅ | 1 | 3 | 5 | Number of control plane nodes | None |
architecture | ❌ | AMD64 | ARM64 | CPU architecture | AMD64 |
workerNodeEligible | ❌ | boolean | Allow workloads on control plane nodes | false |
singleNodeCluster | ❌ | boolean | Configure the cluster as single-node | false |
cpu.cpuCount | ❌ | integer | Minimum CPU cores per node | None |
memory.memory | ❌ | string | Minimum memory per node | None |
gpu | ❌ | object | GPU requirements | None |
labels | ❌ | map | Node labels | None |
annotations | ❌ | map | Node annotations | None |
taints | ❌ | array | Node taints | None |
Worker Pool Fields
| Field | Required | Type | Description | Default |
|---|---|---|---|---|
name | ❌ | string | Worker pool name | Auto-generated |
architecture | ❌ | AMD64 | ARM64 | CPU architecture | AMD64 |
minWorkerNodes | ❌ | integer | Minimum worker nodes | None |
cpu.cpuCount | ❌ | integer | Minimum CPU cores per node | None |
memory.memory | ❌ | string | Minimum memory per node | None |
gpu | ❌ | object | GPU requirements | None |
labels | ❌ | map | Node labels | None |
annotations | ❌ | map | Node annotations | None |
taints | ❌ | array | Node taints, if the control plane has no taints | None |
Sharing
Tenant-scoped and System-scoped Compute Configs control consumer access through the spec.sharedWith selector map. When the field is omitted, the webhook defaults it to share with all consumers ({"*": ["*"]}); an explicit empty map ({}) denies all. For the full selector grammar and scope semantics, refer to Sharing Resources.
Minimum Worker Node Sources
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:
variant: 'NVIDIA A100-SXM4-80GB | 80 GB'
gpuCount: 8
minWorkerNodes: 3 -
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.