Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

initial draft for review before generating code #1015

Open
wants to merge 8 commits into
base: main
Choose a base branch
from
Open
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
47 changes: 47 additions & 0 deletions api/v1beta1/verticaautoscaler_types.go
Original file line number Diff line number Diff line change
Expand Up @@ -18,6 +18,7 @@ limitations under the License.
package v1beta1

import (
autoscalingv2 "k8s.io/api/autoscaling/v2"
corev1 "k8s.io/api/core/v1"
metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
"k8s.io/apimachinery/pkg/types"
Expand Down Expand Up @@ -77,6 +78,52 @@ type VerticaAutoscalerSpec struct {
// left as zero. It will get initialized in the operator and then modified
// via the /scale subresource.
TargetSize int32 `json:"targetSize"`

// +kubebuilder:validation:Optional
// +operator-sdk:csv:customresourcedefinitions:type=spec
// This struct allows customization of autoscaling. Custom metrics can be used instead of the memory and cpu metrics.
// The scaling behavior can also be customized to meet different performance requirements. The maximum and mininum of
// sizes of the replica sets can be specified to limit the use of resources.
CustomAutoscaler *CustomAutoscalerSpec `json:"customAutoscalerSpec,omitempty"`
}

// CustomAutoscalerSpec customizes VerticaAutoscaler
type CustomAutoscalerSpec struct {

// +kubebuilder:Minimum:=0
// +operator-sdk:csv:customresourcedefinitions:type=spec
// The miminum number of pods when scaling.
MinReplicas int32 `json:"minReplicas,omitempty"`

// +kubebuilder:Minimum:=0
// +operator-sdk:csv:customresourcedefinitions:type=spec
// The maximum number of pods when scaling.
MaxReplicas int32 `json:"maxReplicas,omitempty"`

// +kubebuilder:validation:Optional
// +operator-sdk:csv:customresourcedefinitions:type=spec
// The custom metric definition to be used for autocaling.
Metrics []MetricDefinition `json:"metrics,omitempty"`

// +kubebuilder:validation:Optional
Copy link
Collaborator

@roypaulin roypaulin Jan 2, 2025

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Suggested change
// +kubebuilder:validation:Optional
// +kubebuilder:Minimum:=0

// +operator-sdk:csv:customresourcedefinitions:type=spec
// Specifies the scaling behavior for both scale up and down.
Behavior *autoscalingv2.HorizontalPodAutoscalerBehavior `json:"behavior,omitempty"`
}

// MetricDefinition defines increment and metric to be used for autoscaling
type MetricDefinition struct {

// +kubebuilder:validation:Optional
Copy link
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Suggested change
// +kubebuilder:validation:Optional
// +kubebuilder:validation:Optional
// +kubebuilder:Minimum:=0

Copy link
Collaborator Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

If the increment can only be positive, we can only increase threshold and cannot decrease it. That will work for scale up but not scale down.

Copy link
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

It is no longer an increment but a value. For scale up it will be used to decrease.

// +operator-sdk:csv:customresourcedefinitions:type=spec
// +kubebuilder:Minimum:=0
// The value used to increase the threshold after a scale up or a scale down.
ThresholdAdjustmentValue int `json:"thresholdAdjustmentValue,omitempty"`

// +kubebuilder:validation:Optional
// +operator-sdk:csv:customresourcedefinitions:type=spec
// The custom metric to be used for autocaling.
Metric autoscalingv2.MetricSpec `json:"metric,omitempty"`
}

type ScalingGranularityType string
Expand Down
Loading