123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494 |
- /*
- Copyright The Kubernetes Authors.
- Licensed under the Apache License, Version 2.0 (the "License");
- you may not use this file except in compliance with the License.
- You may obtain a copy of the License at
- http://www.apache.org/licenses/LICENSE-2.0
- Unless required by applicable law or agreed to in writing, software
- distributed under the License is distributed on an "AS IS" BASIS,
- WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- See the License for the specific language governing permissions and
- limitations under the License.
- */
- // This file was autogenerated by go-to-protobuf. Do not edit it manually!
- syntax = "proto2";
- package k8s.io.api.autoscaling.v2beta2;
- import "k8s.io/api/core/v1/generated.proto";
- import "k8s.io/apimachinery/pkg/api/resource/generated.proto";
- import "k8s.io/apimachinery/pkg/apis/meta/v1/generated.proto";
- import "k8s.io/apimachinery/pkg/runtime/generated.proto";
- import "k8s.io/apimachinery/pkg/runtime/schema/generated.proto";
- // Package-wide variables from generator "generated".
- option go_package = "k8s.io/api/autoscaling/v2beta2";
- // ContainerResourceMetricSource indicates how to scale on a resource metric known to
- // Kubernetes, as specified in requests and limits, describing each pod in the
- // current scale target (e.g. CPU or memory). The values will be averaged
- // together before being compared to the target. Such metrics are built in to
- // Kubernetes, and have special scaling options on top of those available to
- // normal per-pod metrics using the "pods" source. Only one "target" type
- // should be set.
- message ContainerResourceMetricSource {
- // name is the name of the resource in question.
- optional string name = 1;
- // target specifies the target value for the given metric
- optional MetricTarget target = 2;
- // container is the name of the container in the pods of the scaling target
- optional string container = 3;
- }
- // ContainerResourceMetricStatus indicates the current value of a resource metric known to
- // Kubernetes, as specified in requests and limits, describing a single container in each pod in the
- // current scale target (e.g. CPU or memory). Such metrics are built in to
- // Kubernetes, and have special scaling options on top of those available to
- // normal per-pod metrics using the "pods" source.
- message ContainerResourceMetricStatus {
- // name is the name of the resource in question.
- optional string name = 1;
- // current contains the current value for the given metric
- optional MetricValueStatus current = 2;
- // container is the name of the container in the pods of the scaling target
- optional string container = 3;
- }
- // CrossVersionObjectReference contains enough information to let you identify the referred resource.
- message CrossVersionObjectReference {
- // kind is the kind of the referent; More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds
- optional string kind = 1;
- // name is the name of the referent; More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names
- optional string name = 2;
- // apiVersion is the API version of the referent
- // +optional
- optional string apiVersion = 3;
- }
- // ExternalMetricSource indicates how to scale on a metric not associated with
- // any Kubernetes object (for example length of queue in cloud
- // messaging service, or QPS from loadbalancer running outside of cluster).
- message ExternalMetricSource {
- // metric identifies the target metric by name and selector
- optional MetricIdentifier metric = 1;
- // target specifies the target value for the given metric
- optional MetricTarget target = 2;
- }
- // ExternalMetricStatus indicates the current value of a global metric
- // not associated with any Kubernetes object.
- message ExternalMetricStatus {
- // metric identifies the target metric by name and selector
- optional MetricIdentifier metric = 1;
- // current contains the current value for the given metric
- optional MetricValueStatus current = 2;
- }
- // HPAScalingPolicy is a single policy which must hold true for a specified past interval.
- message HPAScalingPolicy {
- // type is used to specify the scaling policy.
- optional string type = 1;
- // value contains the amount of change which is permitted by the policy.
- // It must be greater than zero
- optional int32 value = 2;
- // periodSeconds specifies the window of time for which the policy should hold true.
- // PeriodSeconds must be greater than zero and less than or equal to 1800 (30 min).
- optional int32 periodSeconds = 3;
- }
- // HPAScalingRules configures the scaling behavior for one direction.
- // These Rules are applied after calculating DesiredReplicas from metrics for the HPA.
- // They can limit the scaling velocity by specifying scaling policies.
- // They can prevent flapping by specifying the stabilization window, so that the
- // number of replicas is not set instantly, instead, the safest value from the stabilization
- // window is chosen.
- message HPAScalingRules {
- // stabilizationWindowSeconds is the number of seconds for which past recommendations should be
- // considered while scaling up or scaling down.
- // StabilizationWindowSeconds must be greater than or equal to zero and less than or equal to 3600 (one hour).
- // If not set, use the default values:
- // - For scale up: 0 (i.e. no stabilization is done).
- // - For scale down: 300 (i.e. the stabilization window is 300 seconds long).
- // +optional
- optional int32 stabilizationWindowSeconds = 3;
- // selectPolicy is used to specify which policy should be used.
- // If not set, the default value MaxPolicySelect is used.
- // +optional
- optional string selectPolicy = 1;
- // policies is a list of potential scaling polices which can be used during scaling.
- // At least one policy must be specified, otherwise the HPAScalingRules will be discarded as invalid
- // +optional
- repeated HPAScalingPolicy policies = 2;
- }
- // HorizontalPodAutoscaler is the configuration for a horizontal pod
- // autoscaler, which automatically manages the replica count of any resource
- // implementing the scale subresource based on the metrics specified.
- message HorizontalPodAutoscaler {
- // metadata is the standard object metadata.
- // More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#metadata
- // +optional
- optional k8s.io.apimachinery.pkg.apis.meta.v1.ObjectMeta metadata = 1;
- // spec is the specification for the behaviour of the autoscaler.
- // More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#spec-and-status.
- // +optional
- optional HorizontalPodAutoscalerSpec spec = 2;
- // status is the current information about the autoscaler.
- // +optional
- optional HorizontalPodAutoscalerStatus status = 3;
- }
- // HorizontalPodAutoscalerBehavior configures the scaling behavior of the target
- // in both Up and Down directions (scaleUp and scaleDown fields respectively).
- message HorizontalPodAutoscalerBehavior {
- // scaleUp is scaling policy for scaling Up.
- // If not set, the default value is the higher of:
- // * increase no more than 4 pods per 60 seconds
- // * double the number of pods per 60 seconds
- // No stabilization is used.
- // +optional
- optional HPAScalingRules scaleUp = 1;
- // scaleDown is scaling policy for scaling Down.
- // If not set, the default value is to allow to scale down to minReplicas pods, with a
- // 300 second stabilization window (i.e., the highest recommendation for
- // the last 300sec is used).
- // +optional
- optional HPAScalingRules scaleDown = 2;
- }
- // HorizontalPodAutoscalerCondition describes the state of
- // a HorizontalPodAutoscaler at a certain point.
- message HorizontalPodAutoscalerCondition {
- // type describes the current condition
- optional string type = 1;
- // status is the status of the condition (True, False, Unknown)
- optional string status = 2;
- // lastTransitionTime is the last time the condition transitioned from
- // one status to another
- // +optional
- optional k8s.io.apimachinery.pkg.apis.meta.v1.Time lastTransitionTime = 3;
- // reason is the reason for the condition's last transition.
- // +optional
- optional string reason = 4;
- // message is a human-readable explanation containing details about
- // the transition
- // +optional
- optional string message = 5;
- }
- // HorizontalPodAutoscalerList is a list of horizontal pod autoscaler objects.
- message HorizontalPodAutoscalerList {
- // metadata is the standard list metadata.
- // +optional
- optional k8s.io.apimachinery.pkg.apis.meta.v1.ListMeta metadata = 1;
- // items is the list of horizontal pod autoscaler objects.
- repeated HorizontalPodAutoscaler items = 2;
- }
- // HorizontalPodAutoscalerSpec describes the desired functionality of the HorizontalPodAutoscaler.
- message HorizontalPodAutoscalerSpec {
- // scaleTargetRef points to the target resource to scale, and is used to the pods for which metrics
- // should be collected, as well as to actually change the replica count.
- optional CrossVersionObjectReference scaleTargetRef = 1;
- // minReplicas is the lower limit for the number of replicas to which the autoscaler
- // can scale down. It defaults to 1 pod. minReplicas is allowed to be 0 if the
- // alpha feature gate HPAScaleToZero is enabled and at least one Object or External
- // metric is configured. Scaling is active as long as at least one metric value is
- // available.
- // +optional
- optional int32 minReplicas = 2;
- // maxReplicas is the upper limit for the number of replicas to which the autoscaler can scale up.
- // It cannot be less that minReplicas.
- optional int32 maxReplicas = 3;
- // metrics contains the specifications for which to use to calculate the
- // desired replica count (the maximum replica count across all metrics will
- // be used). The desired replica count is calculated multiplying the
- // ratio between the target value and the current value by the current
- // number of pods. Ergo, metrics used must decrease as the pod count is
- // increased, and vice-versa. See the individual metric source types for
- // more information about how each type of metric must respond.
- // If not set, the default metric will be set to 80% average CPU utilization.
- // +optional
- repeated MetricSpec metrics = 4;
- // 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
- optional HorizontalPodAutoscalerBehavior behavior = 5;
- }
- // HorizontalPodAutoscalerStatus describes the current status of a horizontal pod autoscaler.
- message HorizontalPodAutoscalerStatus {
- // observedGeneration is the most recent generation observed by this autoscaler.
- // +optional
- optional int64 observedGeneration = 1;
- // lastScaleTime is the last time the HorizontalPodAutoscaler scaled the number of pods,
- // used by the autoscaler to control how often the number of pods is changed.
- // +optional
- optional k8s.io.apimachinery.pkg.apis.meta.v1.Time lastScaleTime = 2;
- // currentReplicas is current number of replicas of pods managed by this autoscaler,
- // as last seen by the autoscaler.
- optional int32 currentReplicas = 3;
- // desiredReplicas is the desired number of replicas of pods managed by this autoscaler,
- // as last calculated by the autoscaler.
- optional int32 desiredReplicas = 4;
- // currentMetrics is the last read state of the metrics used by this autoscaler.
- // +optional
- repeated MetricStatus currentMetrics = 5;
- // conditions is the set of conditions required for this autoscaler to scale its target,
- // and indicates whether or not those conditions are met.
- // +optional
- repeated HorizontalPodAutoscalerCondition conditions = 6;
- }
- // MetricIdentifier defines the name and optionally selector for a metric
- message MetricIdentifier {
- // name is the name of the given metric
- optional string name = 1;
- // selector is the string-encoded form of a standard kubernetes label selector for the given metric
- // When set, it is passed as an additional parameter to the metrics server for more specific metrics scoping.
- // When unset, just the metricName will be used to gather metrics.
- // +optional
- optional k8s.io.apimachinery.pkg.apis.meta.v1.LabelSelector selector = 2;
- }
- // MetricSpec specifies how to scale based on a single metric
- // (only `type` and one other matching field should be set at once).
- message MetricSpec {
- // type is the type of metric source. It should be one of "ContainerResource", "External",
- // "Object", "Pods" or "Resource", each mapping to a matching field in the object.
- // Note: "ContainerResource" type is available on when the feature-gate
- // HPAContainerMetrics is enabled
- optional string type = 1;
- // object refers to a metric describing a single kubernetes object
- // (for example, hits-per-second on an Ingress object).
- // +optional
- optional ObjectMetricSource object = 2;
- // pods refers to a metric describing each pod in the current scale target
- // (for example, transactions-processed-per-second). The values will be
- // averaged together before being compared to the target value.
- // +optional
- optional PodsMetricSource pods = 3;
- // resource refers to a resource metric (such as those specified in
- // requests and limits) known to Kubernetes describing each pod in the
- // current scale target (e.g. CPU or memory). Such metrics are built in to
- // Kubernetes, and have special scaling options on top of those available
- // to normal per-pod metrics using the "pods" source.
- // +optional
- optional ResourceMetricSource resource = 4;
- // container resource refers to a resource metric (such as those specified in
- // requests and limits) known to Kubernetes describing a single container in
- // each pod of the current scale target (e.g. CPU or memory). Such metrics are
- // built in to Kubernetes, and have special scaling options on top of those
- // available to normal per-pod metrics using the "pods" source.
- // This is an alpha feature and can be enabled by the HPAContainerMetrics feature flag.
- // +optional
- optional ContainerResourceMetricSource containerResource = 7;
- // external refers to a global metric that is not associated
- // with any Kubernetes object. It allows autoscaling based on information
- // coming from components running outside of cluster
- // (for example length of queue in cloud messaging service, or
- // QPS from loadbalancer running outside of cluster).
- // +optional
- optional ExternalMetricSource external = 5;
- }
- // MetricStatus describes the last-read state of a single metric.
- message MetricStatus {
- // type is the type of metric source. It will be one of "ContainerResource", "External",
- // "Object", "Pods" or "Resource", each corresponds to a matching field in the object.
- // Note: "ContainerResource" type is available on when the feature-gate
- // HPAContainerMetrics is enabled
- optional string type = 1;
- // object refers to a metric describing a single kubernetes object
- // (for example, hits-per-second on an Ingress object).
- // +optional
- optional ObjectMetricStatus object = 2;
- // pods refers to a metric describing each pod in the current scale target
- // (for example, transactions-processed-per-second). The values will be
- // averaged together before being compared to the target value.
- // +optional
- optional PodsMetricStatus pods = 3;
- // resource refers to a resource metric (such as those specified in
- // requests and limits) known to Kubernetes describing each pod in the
- // current scale target (e.g. CPU or memory). Such metrics are built in to
- // Kubernetes, and have special scaling options on top of those available
- // to normal per-pod metrics using the "pods" source.
- // +optional
- optional ResourceMetricStatus resource = 4;
- // containerResource refers to a resource metric (such as those specified in
- // requests and limits) known to Kubernetes describing a single container in each pod in the
- // current scale target (e.g. CPU or memory). Such metrics are built in to
- // Kubernetes, and have special scaling options on top of those available
- // to normal per-pod metrics using the "pods" source.
- // +optional
- optional ContainerResourceMetricStatus containerResource = 7;
- // external refers to a global metric that is not associated
- // with any Kubernetes object. It allows autoscaling based on information
- // coming from components running outside of cluster
- // (for example length of queue in cloud messaging service, or
- // QPS from loadbalancer running outside of cluster).
- // +optional
- optional ExternalMetricStatus external = 5;
- }
- // MetricTarget defines the target value, average value, or average utilization of a specific metric
- message MetricTarget {
- // type represents whether the metric type is Utilization, Value, or AverageValue
- optional string type = 1;
- // value is the target value of the metric (as a quantity).
- // +optional
- optional k8s.io.apimachinery.pkg.api.resource.Quantity value = 2;
- // averageValue is the target value of the average of the
- // metric across all relevant pods (as a quantity)
- // +optional
- optional k8s.io.apimachinery.pkg.api.resource.Quantity averageValue = 3;
- // averageUtilization is the target value of the average of the
- // resource metric across all relevant pods, represented as a percentage of
- // the requested value of the resource for the pods.
- // Currently only valid for Resource metric source type
- // +optional
- optional int32 averageUtilization = 4;
- }
- // MetricValueStatus holds the current value for a metric
- message MetricValueStatus {
- // value is the current value of the metric (as a quantity).
- // +optional
- optional k8s.io.apimachinery.pkg.api.resource.Quantity value = 1;
- // averageValue is the current value of the average of the
- // metric across all relevant pods (as a quantity)
- // +optional
- optional k8s.io.apimachinery.pkg.api.resource.Quantity averageValue = 2;
- // averageUtilization is the current value of the average of the
- // resource metric across all relevant pods, represented as a percentage of
- // the requested value of the resource for the pods.
- // +optional
- optional int32 averageUtilization = 3;
- }
- // ObjectMetricSource indicates how to scale on a metric describing a
- // kubernetes object (for example, hits-per-second on an Ingress object).
- message ObjectMetricSource {
- optional CrossVersionObjectReference describedObject = 1;
- // target specifies the target value for the given metric
- optional MetricTarget target = 2;
- // metric identifies the target metric by name and selector
- optional MetricIdentifier metric = 3;
- }
- // ObjectMetricStatus indicates the current value of a metric describing a
- // kubernetes object (for example, hits-per-second on an Ingress object).
- message ObjectMetricStatus {
- // metric identifies the target metric by name and selector
- optional MetricIdentifier metric = 1;
- // current contains the current value for the given metric
- optional MetricValueStatus current = 2;
- optional CrossVersionObjectReference describedObject = 3;
- }
- // PodsMetricSource indicates how to scale on a metric describing each pod in
- // the current scale target (for example, transactions-processed-per-second).
- // The values will be averaged together before being compared to the target
- // value.
- message PodsMetricSource {
- // metric identifies the target metric by name and selector
- optional MetricIdentifier metric = 1;
- // target specifies the target value for the given metric
- optional MetricTarget target = 2;
- }
- // PodsMetricStatus indicates the current value of a metric describing each pod in
- // the current scale target (for example, transactions-processed-per-second).
- message PodsMetricStatus {
- // metric identifies the target metric by name and selector
- optional MetricIdentifier metric = 1;
- // current contains the current value for the given metric
- optional MetricValueStatus current = 2;
- }
- // ResourceMetricSource indicates how to scale on a resource metric known to
- // Kubernetes, as specified in requests and limits, describing each pod in the
- // current scale target (e.g. CPU or memory). The values will be averaged
- // together before being compared to the target. Such metrics are built in to
- // Kubernetes, and have special scaling options on top of those available to
- // normal per-pod metrics using the "pods" source. Only one "target" type
- // should be set.
- message ResourceMetricSource {
- // name is the name of the resource in question.
- optional string name = 1;
- // target specifies the target value for the given metric
- optional MetricTarget target = 2;
- }
- // ResourceMetricStatus indicates the current value of a resource metric known to
- // Kubernetes, as specified in requests and limits, describing each pod in the
- // current scale target (e.g. CPU or memory). Such metrics are built in to
- // Kubernetes, and have special scaling options on top of those available to
- // normal per-pod metrics using the "pods" source.
- message ResourceMetricStatus {
- // name is the name of the resource in question.
- optional string name = 1;
- // current contains the current value for the given metric
- optional MetricValueStatus current = 2;
- }
|