Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
32 changes: 16 additions & 16 deletions apis/bases/operator.openstack.org_openstacks.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -70,22 +70,6 @@ spec:
x-kubernetes-int-or-string: true
type: object
type: object
tolerations:
items:
properties:
effect:
type: string
key:
type: string
operator:
type: string
tolerationSeconds:
format: int64
type: integer
value:
type: string
type: object
type: array
type: object
name:
enum:
Expand Down Expand Up @@ -118,6 +102,22 @@ spec:
maximum: 1
minimum: 0
type: integer
tolerations:
items:
properties:
effect:
type: string
key:
type: string
operator:
type: string
tolerationSeconds:
format: int64
type: integer
value:
type: string
type: object
type: array
required:
- name
type: object
Expand Down
10 changes: 5 additions & 5 deletions apis/operator/v1beta1/openstack_types.go
Original file line number Diff line number Diff line change
Expand Up @@ -220,6 +220,11 @@ type OperatorSpec struct {
// +kubebuilder:validation:Optional
// ControllerManager - tunings for the controller manager container
ControllerManager ContainerSpec `json:"controllerManager,omitempty"`

// +kubebuilder:validation:Optional
// Tolerations - Tolerations for the service operator deployment pods
// https://kubernetes.io/docs/concepts/scheduling-eviction/taint-and-toleration/
Tolerations []corev1.Toleration `json:"tolerations,omitempty"`
}

// ContainerSpec - customization for the container spec
Expand All @@ -228,11 +233,6 @@ type ContainerSpec struct {
// Resources - Compute Resources for the service operator controller manager
// https://kubernetes.io/docs/concepts/configuration/manage-resources-containers/
Resources corev1.ResourceRequirements `json:"resources,omitempty"`

// +kubebuilder:validation:Optional
// Tolerations - Tolerations for the service operator controller manager
// https://kubernetes.io/docs/concepts/scheduling-eviction/taint-and-toleration/
Tolerations []corev1.Toleration `json:"tolerations,omitempty"`
}

// OpenStackStatus defines the observed state of OpenStack
Expand Down
14 changes: 7 additions & 7 deletions apis/operator/v1beta1/zz_generated.deepcopy.go

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

32 changes: 16 additions & 16 deletions config/crd/bases/operator.openstack.org_openstacks.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -70,22 +70,6 @@ spec:
x-kubernetes-int-or-string: true
type: object
type: object
tolerations:
items:
properties:
effect:
type: string
key:
type: string
operator:
type: string
tolerationSeconds:
format: int64
type: integer
value:
type: string
type: object
type: array
type: object
name:
enum:
Expand Down Expand Up @@ -118,6 +102,22 @@ spec:
maximum: 1
minimum: 0
type: integer
tolerations:
items:
properties:
effect:
type: string
key:
type: string
operator:
type: string
tolerationSeconds:
format: int64
type: integer
value:
type: string
type: object
type: array
required:
- name
type: object
Expand Down
56 changes: 27 additions & 29 deletions config/samples/operator_v1beta1_openstack_tolerations_example.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -28,36 +28,34 @@ spec:
operatorOverrides:
- name: "keystone"
# Custom tolerations for keystone operator pods
controllerManager:
tolerations:
- key: "example.com/special-nodes"
operator: "Equal"
value: "keystone"
effect: "NoSchedule"
- key: "node.kubernetes.io/memory-pressure"
operator: "Exists"
effect: "NoExecute"
tolerationSeconds: 300
tolerations:
- key: "example.com/special-nodes"
operator: "Equal"
value: "keystone"
effect: "NoSchedule"
- key: "node.kubernetes.io/memory-pressure"
operator: "Exists"
effect: "NoExecute"
tolerationSeconds: 300
- name: "nova"
# Example: Override default tolerations and add new ones
# Result will be:
# 1. node.kubernetes.io/not-ready (OVERRIDDEN - 600s instead of 120s)
# 2. node.kubernetes.io/unreachable (OVERRIDDEN - 400s instead of 120s)
# 3. node.example.com/compute (ADDED - new toleration)
controllerManager:
tolerations:
- key: "node.kubernetes.io/not-ready"
operator: "Exists"
effect: "NoExecute"
tolerationSeconds: 600 # Override default 120s
- key: "node.kubernetes.io/unreachable"
operator: "Exists"
effect: "NoExecute"
tolerationSeconds: 400 # Override default 120s
- key: "node.example.com/compute" # Add new toleration
operator: "Equal"
value: "true"
effect: "NoSchedule"
tolerations:
- key: "node.kubernetes.io/not-ready"
operator: "Exists"
effect: "NoExecute"
tolerationSeconds: 600 # Override default 120s
- key: "node.kubernetes.io/unreachable"
operator: "Exists"
effect: "NoExecute"
tolerationSeconds: 400 # Override default 120s
- key: "node.example.com/compute" # Add new toleration
operator: "Equal"
value: "true"
effect: "NoSchedule"
- name: "glance"
# Custom resource limits AND tolerations example
controllerManager:
Expand All @@ -68,9 +66,9 @@ spec:
requests:
cpu: "1"
memory: "2Gi"
tolerations:
- key: "storage-node"
operator: "Equal"
value: "true"
effect: "NoSchedule"
tolerations:
- key: "storage-node"
operator: "Equal"
value: "true"
effect: "NoSchedule"
# Note: Operators not listed (like mariadb, neutron, etc.) will use the default tolerations
4 changes: 2 additions & 2 deletions pkg/operator/override.go
Original file line number Diff line number Diff line change
Expand Up @@ -109,8 +109,8 @@ func SetOverrides(opOvr operatorv1beta1.OperatorSpec, op *Operator) {
op.Deployment.Manager.Resources.Requests.Memory = opOvr.ControllerManager.Resources.Requests.Memory().String()
}
}
if len(opOvr.ControllerManager.Tolerations) > 0 {
op.Deployment.Tolerations = mergeTolerations(op.Deployment.Tolerations, opOvr.ControllerManager.Tolerations)
if len(opOvr.Tolerations) > 0 {
op.Deployment.Tolerations = mergeTolerations(op.Deployment.Tolerations, opOvr.Tolerations)
}
}

Expand Down
64 changes: 26 additions & 38 deletions pkg/operator/override_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -157,10 +157,8 @@ func TestApplyOperatorOverrides(t *testing.T) {
},
},
{
Name: "nova",
ControllerManager: operatorv1beta1.ContainerSpec{
Tolerations: customTolerations,
},
Name: "nova",
Tolerations: customTolerations,
},
}

Expand Down Expand Up @@ -363,32 +361,26 @@ func TestTolerationsOverride(t *testing.T) {
{
name: "Add tolerations to empty list",
operatorSpec: operatorv1beta1.OperatorSpec{
Name: "test-operator",
ControllerManager: operatorv1beta1.ContainerSpec{
Tolerations: testTolerations,
},
Name: "test-operator",
Tolerations: testTolerations,
},
initialTolerations: nil,
expectedTolerations: testTolerations,
},
{
name: "No custom tolerations, keep defaults unchanged",
operatorSpec: operatorv1beta1.OperatorSpec{
Name: "test-operator",
ControllerManager: operatorv1beta1.ContainerSpec{
// No tolerations specified
},
Name: "test-operator",
// No tolerations specified
},
initialTolerations: defaultTolerations,
expectedTolerations: defaultTolerations,
},
{
name: "Merge custom tolerations with defaults (different keys)",
operatorSpec: operatorv1beta1.OperatorSpec{
Name: "test-operator",
ControllerManager: operatorv1beta1.ContainerSpec{
Tolerations: testTolerations, // Different keys than defaults
},
Name: "test-operator",
Tolerations: testTolerations, // Different keys than defaults
},
initialTolerations: defaultTolerations,
expectedTolerations: append(defaultTolerations, testTolerations...),
Expand All @@ -397,14 +389,12 @@ func TestTolerationsOverride(t *testing.T) {
name: "Override default tolerations (same key)",
operatorSpec: operatorv1beta1.OperatorSpec{
Name: "test-operator",
ControllerManager: operatorv1beta1.ContainerSpec{
Tolerations: []corev1.Toleration{
{
Key: corev1.TaintNodeNotReady, // "node.kubernetes.io/not-ready", // Same key as default
Operator: corev1.TolerationOpExists,
Effect: corev1.TaintEffectNoExecute,
TolerationSeconds: ptr.To[int64](600), // Different value
},
Tolerations: []corev1.Toleration{
{
Key: corev1.TaintNodeNotReady, // "node.kubernetes.io/not-ready", // Same key as default
Operator: corev1.TolerationOpExists,
Effect: corev1.TaintEffectNoExecute,
TolerationSeconds: ptr.To[int64](600), // Different value
},
},
},
Expand All @@ -428,20 +418,18 @@ func TestTolerationsOverride(t *testing.T) {
name: "Mixed scenario: override one default, add new custom",
operatorSpec: operatorv1beta1.OperatorSpec{
Name: "test-operator",
ControllerManager: operatorv1beta1.ContainerSpec{
Tolerations: []corev1.Toleration{
{
Key: corev1.TaintNodeNotReady, // "node.kubernetes.io/not-ready", // Override default
Operator: corev1.TolerationOpExists,
Effect: corev1.TaintEffectNoExecute,
TolerationSeconds: ptr.To[int64](300),
},
{
Key: "node.example.com/gpu", // Add new
Operator: corev1.TolerationOpEqual,
Value: "nvidia",
Effect: corev1.TaintEffectNoSchedule,
},
Tolerations: []corev1.Toleration{
{
Key: corev1.TaintNodeNotReady, // "node.kubernetes.io/not-ready", // Override default
Operator: corev1.TolerationOpExists,
Effect: corev1.TaintEffectNoExecute,
TolerationSeconds: ptr.To[int64](300),
},
{
Key: "node.example.com/gpu", // Add new
Operator: corev1.TolerationOpEqual,
Value: "nvidia",
Effect: corev1.TaintEffectNoSchedule,
},
},
},
Expand Down