Skip to content

Commit df8997a

Browse files
Add configurable container resource requests and limits via CR spec
Add a Resources field to OpenStackLightspeedSpec that lets users override CPU/memory requests and limits for each container managed by the operator. Defaults are applied by the API server via kubebuilder:default markers on ContainerResourcesSpec fields; any user-supplied value replaces the default entirely. Extend the update-openstacklightspeed kuttl test to exercise resource overrides for consolePlugin and postgres (separate reconciler paths) and assert custom values propagate to deployment specs.
1 parent e770335 commit df8997a

16 files changed

Lines changed: 1166 additions & 133 deletions

api/v1beta1/openstacklightspeed_types.go

Lines changed: 55 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -19,6 +19,7 @@ package v1beta1
1919
import (
2020
"github.com/openstack-k8s-operators/lib-common/modules/common/condition"
2121
"github.com/openstack-k8s-operators/lib-common/modules/common/util"
22+
corev1 "k8s.io/api/core/v1"
2223
"k8s.io/apimachinery/pkg/api/resource"
2324
metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
2425
"k8s.io/apimachinery/pkg/runtime"
@@ -91,6 +92,52 @@ type DatabaseSpec struct {
9192
Class string `json:"class,omitempty"`
9293
}
9394

95+
// ContainerResourcesSpec defines resource requirements for each container
96+
// managed by the operator. Defaults are applied by the API server via
97+
// kubebuilder markers. Users may override any container's resources in
98+
// the CR; the provided value replaces the default entirely.
99+
type ContainerResourcesSpec struct {
100+
// +kubebuilder:validation:Optional
101+
// +kubebuilder:default:={requests: {cpu: "500m", memory: "2Gi"}, limits: {cpu: "2", memory: "8Gi"}}
102+
// LlamaStack sets compute resources for the llama-stack (OGX) container
103+
// in the lightspeed-stack deployment.
104+
LlamaStack corev1.ResourceRequirements `json:"llamaStack,omitempty"`
105+
106+
// +kubebuilder:validation:Optional
107+
// +kubebuilder:default:={requests: {cpu: "250m", memory: "512Mi"}, limits: {cpu: "1", memory: "2Gi"}}
108+
// LightspeedService sets compute resources for the lightspeed-service-api
109+
// container in the lightspeed-stack deployment.
110+
LightspeedService corev1.ResourceRequirements `json:"lightspeedService,omitempty"`
111+
112+
// +kubebuilder:validation:Optional
113+
// +kubebuilder:default:={requests: {cpu: "50m", memory: "64Mi"}, limits: {memory: "200Mi"}}
114+
// DataverseExporter sets compute resources for the dataverse exporter
115+
// sidecar container (only created when data collection is enabled).
116+
DataverseExporter corev1.ResourceRequirements `json:"dataverseExporter,omitempty"`
117+
118+
// +kubebuilder:validation:Optional
119+
// +kubebuilder:default:={requests: {cpu: "100m", memory: "256Mi"}, limits: {cpu: "500m", memory: "1Gi"}}
120+
// VectorDatabaseInit sets compute resources for both vector-database
121+
// init containers (vector-database-collect and vector-database-config-build).
122+
VectorDatabaseInit corev1.ResourceRequirements `json:"vectorDatabaseInit,omitempty"`
123+
124+
// +kubebuilder:validation:Optional
125+
// +kubebuilder:default:={requests: {cpu: "30m", memory: "300Mi"}, limits: {cpu: "500m", memory: "2Gi"}}
126+
// Postgres sets compute resources for the PostgreSQL container.
127+
Postgres corev1.ResourceRequirements `json:"postgres,omitempty"`
128+
129+
// +kubebuilder:validation:Optional
130+
// +kubebuilder:default:={requests: {cpu: "500m", memory: "2Gi"}, limits: {cpu: "2", memory: "4Gi"}}
131+
// OKP sets compute resources for the Offline Knowledge Portal container.
132+
OKP corev1.ResourceRequirements `json:"okp,omitempty"`
133+
134+
// +kubebuilder:validation:Optional
135+
// +kubebuilder:default:={requests: {cpu: "50m", memory: "64Mi"}, limits: {cpu: "200m", memory: "256Mi"}}
136+
// ConsolePlugin sets compute resources for the lightspeed-console-plugin
137+
// container and its init container.
138+
ConsolePlugin corev1.ResourceRequirements `json:"consolePlugin,omitempty"`
139+
}
140+
94141
// OpenStackLightspeedSpec defines the desired state of OpenStackLightspeed
95142
type OpenStackLightspeedSpec struct {
96143
OpenStackLightspeedCore `json:",inline"`
@@ -105,6 +152,14 @@ type OpenStackLightspeedSpec struct {
105152
// OKP configures the Offline Knowledge Portal (OKP) RAG source.
106153
OKP *OKPSpec `json:"okp,omitempty"`
107154

155+
// +kubebuilder:validation:Optional
156+
// +kubebuilder:default:={}
157+
// Resources configures compute resource requirements for individual
158+
// containers managed by the operator. Each field has sensible defaults
159+
// applied by the API server. Override any container's resources to
160+
// replace its defaults entirely.
161+
Resources ContainerResourcesSpec `json:"resources,omitempty"`
162+
108163
// +kubebuilder:validation:Optional
109164
// +kubebuilder:pruning:PreserveUnknownFields
110165
// Dev contains developer/experimental configuration.

api/v1beta1/zz_generated.deepcopy.go

Lines changed: 23 additions & 0 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

0 commit comments

Comments
 (0)