-
Notifications
You must be signed in to change notification settings - Fork 127
Hpa #3492
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
base: main
Are you sure you want to change the base?
Hpa #3492
Changes from all commits
3d2b56c
178326a
8d6e67a
d264650
c53d713
bacd371
3298ffe
a3cc731
File filter
Filter by extension
Conversations
Jump to
Diff view
Diff view
There are no files selected for viewing
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -1,6 +1,7 @@ | ||
package v1alpha2 | ||
|
||
import ( | ||
autoscalingv2 "k8s.io/api/autoscaling/v2" | ||
corev1 "k8s.io/api/core/v1" | ||
metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" | ||
|
||
|
@@ -388,6 +389,11 @@ type DeploymentSpec struct { | |
// +optional | ||
Replicas *int32 `json:"replicas,omitempty"` | ||
|
||
// Autoscaling defines the configuration for Horizontal Pod Autoscaling. | ||
// | ||
// +optional | ||
Autoscaling HPASpec `json:"autoscaling"` | ||
|
||
// Pod defines Pod-specific fields. | ||
// | ||
// +optional | ||
|
@@ -412,6 +418,56 @@ type DaemonSetSpec struct { | |
Container ContainerSpec `json:"container"` | ||
} | ||
|
||
// +kubebuilder:validation:XValidation:message="at least one metric must be specified when autoscaling is enabled",rule="!self.enabled || (has(self.targetCPUUtilizationPercentage) || has(self.targetMemoryUtilizationPercentage) || (has(self.autoscalingTemplate) && size(self.autoscalingTemplate) > 0))" | ||
// +kubebuilder:validation:XValidation:message="minReplicas must be less than or equal to maxReplicas",rule="self.minReplicas <= self.maxReplicas" | ||
// +kubebuilder:validation:XValidation:message="CPU utilization must be between 1 and 100",rule="!has(self.targetCPUUtilizationPercentage) || (self.targetCPUUtilizationPercentage >= 1 && self.targetCPUUtilizationPercentage <= 100)" | ||
// +kubebuilder:validation:XValidation:message="memory utilization must be between 1 and 100",rule="!has(self.targetMemoryUtilizationPercentage) || (self.targetMemoryUtilizationPercentage >= 1 && self.targetMemoryUtilizationPercentage <= 100)" | ||
// | ||
// HPASpec is the configuration for the Horizontal Pod Autoscaling. | ||
// | ||
//nolint:lll | ||
type HPASpec struct { | ||
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. Let's add a comment to this struct to describe what it is (similar to what I suggested above). |
||
// Behavior configures the scaling behavior of the target | ||
// in both Up and Down directions (scaleUp and scaleDown fields respectively). | ||
// If not set, the default HPAScalingRules for scale up and scale down are used. | ||
// | ||
// +optional | ||
Behavior *autoscalingv2.HorizontalPodAutoscalerBehavior `json:"behavior,omitempty"` | ||
|
||
// AutoscalingTemplate configures the additional scaling option. | ||
// | ||
// +optional | ||
AutoscalingTemplate *[]autoscalingv2.MetricSpec `json:"autoscalingTemplate,omitempty"` | ||
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. I wonder if we just name this field |
||
|
||
// Target cpu utilization percentage of HPA. | ||
// | ||
// +optional | ||
TargetCPUUtilizationPercentage *int32 `json:"targetCPUUtilizationPercentage,omitempty"` | ||
|
||
// Target memory utilization percentage of HPA. | ||
// | ||
// +optional | ||
TargetMemoryUtilizationPercentage *int32 `json:"targetMemoryUtilizationPercentage,omitempty"` | ||
|
||
// Annotation for Horizontal Pod Autoscaler | ||
// Annotations is an unstructured key value map stored with a resource that may be | ||
// set by external tools to store and retrieve arbitrary metadata. They are not | ||
// queryable and should be preserved when modifying objects. | ||
// More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/annotations | ||
// | ||
// +optional | ||
ciarams87 marked this conversation as resolved.
Show resolved
Hide resolved
|
||
HPAAnnotations map[string]string `json:"hpaAnnotations,omitempty"` | ||
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. Are there generally HPA-specific annotations that people use? Or is meant to be just generic annotations like any other resource? I ask because the Gateway API pattern to set annotations on provisioned objects is through the Gateway |
||
|
||
// Minimum number of replicas. | ||
MinReplicas int32 `json:"minReplicas"` | ||
|
||
// Maximum number of replicas. | ||
MaxReplicas int32 `json:"maxReplicas"` | ||
Comment on lines
+461
to
+465
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. Does k8s have defaults for these values or are they required? |
||
|
||
// Enable or disable Horizontal Pod Autoscaler | ||
Enabled bool `json:"enabled"` | ||
} | ||
|
||
// PodSpec defines Pod-specific fields. | ||
type PodSpec struct { | ||
// TerminationGracePeriodSeconds is the optional duration in seconds the pod needs to terminate gracefully. | ||
|
Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.
Original file line number | Diff line number | Diff line change | ||||||||
---|---|---|---|---|---|---|---|---|---|---|
|
@@ -8,13 +8,19 @@ rules: | |||||||||
- apiGroups: | ||||||||||
- "" | ||||||||||
- apps | ||||||||||
{{- if or .Values.nginx.autoscaling.enabled .Values.nginxGateway.autoscaling.enabled }} | ||||||||||
- autoscaling | ||||||||||
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. Let's only add this if autoscaling is enabled
Suggested change
|
||||||||||
{{- end }} | ||||||||||
resources: | ||||||||||
- secrets | ||||||||||
- configmaps | ||||||||||
- serviceaccounts | ||||||||||
- services | ||||||||||
- deployments | ||||||||||
- daemonsets | ||||||||||
{{- if or .Values.nginx.autoscaling.enabled .Values.nginxGateway.autoscaling.enabled }} | ||||||||||
- horizontalpodautoscalers | ||||||||||
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. Let's only add this if autoscaling is enabled
Suggested change
|
||||||||||
{{- end }} | ||||||||||
verbs: | ||||||||||
- create | ||||||||||
- update | ||||||||||
|
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,46 @@ | ||
{{- if and (eq .Values.nginxGateway.kind "deployment") .Values.nginxGateway.autoscaling.enabled (.Capabilities.APIVersions.Has "autoscaling/v2") -}} | ||
apiVersion: autoscaling/v2 | ||
kind: HorizontalPodAutoscaler | ||
metadata: | ||
{{- with .Values.nginxGateway.autoscaling.annotations }} | ||
annotations: {{ toYaml . | nindent 4 }} | ||
{{- end }} | ||
labels: | ||
{{- include "nginx-gateway.labels" . | nindent 4 }} | ||
{{- with .Values.nginxGateway.labels }} | ||
{{- toYaml . | nindent 4 }} | ||
{{- end }} | ||
name: {{ include "nginx-gateway.fullname" . }} | ||
namespace: {{ .Release.Namespace }} | ||
spec: | ||
scaleTargetRef: | ||
apiVersion: apps/v1 | ||
kind: Deployment | ||
name: {{ include "nginx-gateway.fullname" . }} | ||
minReplicas: {{ .Values.nginxGateway.autoscaling.minReplicas }} | ||
maxReplicas: {{ .Values.nginxGateway.autoscaling.maxReplicas }} | ||
metrics: | ||
{{- with .Values.nginxGateway.autoscaling.targetMemoryUtilizationPercentage }} | ||
- type: Resource | ||
resource: | ||
name: memory | ||
target: | ||
type: Utilization | ||
averageUtilization: {{ . }} | ||
{{- end }} | ||
{{- with .Values.nginxGateway.autoscaling.targetCPUUtilizationPercentage }} | ||
- type: Resource | ||
resource: | ||
name: cpu | ||
target: | ||
type: Utilization | ||
averageUtilization: {{ . }} | ||
{{- end }} | ||
{{- with .Values.autoscalingTemplate }} | ||
{{- toYaml . | nindent 2 }} | ||
{{- end }} | ||
{{- with .Values.nginxGateway.autoscaling.behavior }} | ||
behavior: | ||
{{- toYaml . | nindent 4 }} | ||
{{- end }} | ||
{{- end }} |
Uh oh!
There was an error while loading. Please reload this page.