diff --git a/content/en/docs/reference/_index.md b/content/en/docs/reference/_index.md index 0dab5c7feb..f5c9f852f2 100644 --- a/content/en/docs/reference/_index.md +++ b/content/en/docs/reference/_index.md @@ -102,6 +102,15 @@ operator to use or manage a cluster. * [v1beta3](/docs/reference/config-api/kubeadm-config.v1beta3/) * [v1beta4](/docs/reference/config-api/kubeadm-config.v1beta4/) +## External APIs + +These are the APIs defined by the Kubernetes project, but are not implemented +by the core project: + +* [Metrics API (v1beta1)](/docs/reference/external-api/metrics.v1beta1/) +* [Custom Metrics API (v1beta2)](/docs/reference/external-api/custom-metrics.v1beta2) +* [External Metrics API (v1beta1)](/docs/reference/external-api/external-metrics.v1beta1) + ## Design Docs An archive of the design docs for Kubernetes functionality. Good starting points are diff --git a/content/en/docs/reference/external-api/_index.md b/content/en/docs/reference/external-api/_index.md new file mode 100644 index 0000000000..c1e0eaea9e --- /dev/null +++ b/content/en/docs/reference/external-api/_index.md @@ -0,0 +1,4 @@ +--- +title: External APIs +weight: 135 +--- diff --git a/content/en/docs/reference/external-api/custom-metrics.v1beta2.md b/content/en/docs/reference/external-api/custom-metrics.v1beta2.md new file mode 100644 index 0000000000..cbbe894c10 --- /dev/null +++ b/content/en/docs/reference/external-api/custom-metrics.v1beta2.md @@ -0,0 +1,177 @@ +--- +title: Kubernetes Custom Metrics (v1beta2) +content_type: tool-reference +package: custom.metrics.k8s.io/v1beta2 +auto_generated: true +--- +

Package v1beta2 is the v1beta2 version of the custom_metrics API.

+ + +## Resource Types + + +- [MetricListOptions](#custom-metrics-k8s-io-v1beta2-MetricListOptions) +- [MetricValue](#custom-metrics-k8s-io-v1beta2-MetricValue) +- [MetricValueList](#custom-metrics-k8s-io-v1beta2-MetricValueList) + + + +## `MetricListOptions` {#custom-metrics-k8s-io-v1beta2-MetricListOptions} + + + +

MetricListOptions is used to select metrics by their label selectors

+ + + + + + + + + + + + + + + + + +
FieldDescription
apiVersion
string
custom.metrics.k8s.io/v1beta2
kind
string
MetricListOptions
labelSelector
+string +
+

A selector to restrict the list of returned objects by their labels. +Defaults to everything.

+
metricLabelSelector
+string +
+

A selector to restrict the list of returned metrics by their labels

+
+ +## `MetricValue` {#custom-metrics-k8s-io-v1beta2-MetricValue} + + +**Appears in:** + +- [MetricValueList](#custom-metrics-k8s-io-v1beta2-MetricValueList) + + +

MetricValue is the metric value for some object

+ + + + + + + + + + + + + + + + + + + + + + + + + + +
FieldDescription
apiVersion
string
custom.metrics.k8s.io/v1beta2
kind
string
MetricValue
describedObject [Required]
+core/v1.ObjectReference +
+

a reference to the described object

+
metric [Required]
+MetricIdentifier +
+ No description provided.
timestamp [Required]
+meta/v1.Time +
+

indicates the time at which the metrics were produced

+
windowSeconds [Required]
+int64 +
+

indicates the window ([Timestamp-Window, Timestamp]) from +which these metrics were calculated, when returning rate +metrics calculated from cumulative metrics (or zero for +non-calculated instantaneous metrics).

+
value [Required]
+k8s.io/apimachinery/pkg/api/resource.Quantity +
+

the value of the metric for this

+
+ +## `MetricValueList` {#custom-metrics-k8s-io-v1beta2-MetricValueList} + + + +

MetricValueList is a list of values for a given metric for some set of objects

+ + + + + + + + + + + + + + + + + +
FieldDescription
apiVersion
string
custom.metrics.k8s.io/v1beta2
kind
string
MetricValueList
metadata [Required]
+meta/v1.ListMeta +
+ No description provided.
items [Required]
+[]MetricValue +
+

the value of the metric across the described objects

+
+ +## `MetricIdentifier` {#custom-metrics-k8s-io-v1beta2-MetricIdentifier} + + +**Appears in:** + +- [MetricValue](#custom-metrics-k8s-io-v1beta2-MetricValue) + + +

MetricIdentifier identifies a metric by name and, optionally, selector

+ + + + + + + + + + + + + + +
FieldDescription
name [Required]
+string +
+

name is the name of the given metric

+
selector
+meta/v1.LabelSelector +
+

selector represents the label selector that could be used to select +this metric, and will generally just be the selector passed in to +the query used to fetch this metric. +When left blank, only the metric's Name will be used to gather metrics.

+
+ \ No newline at end of file diff --git a/content/en/docs/reference/external-api/external-metrics.v1beta1.md b/content/en/docs/reference/external-api/external-metrics.v1beta1.md new file mode 100644 index 0000000000..81aa1ed5c9 --- /dev/null +++ b/content/en/docs/reference/external-api/external-metrics.v1beta1.md @@ -0,0 +1,110 @@ +--- +title: Kubernetes External Metrics (v1beta1) +content_type: tool-reference +package: external.metrics.k8s.io/v1beta1 +auto_generated: true +--- +

Package v1beta1 is the v1beta1 version of the external metrics API.

+ + +## Resource Types + + +- [ExternalMetricValue](#external-metrics-k8s-io-v1beta1-ExternalMetricValue) +- [ExternalMetricValueList](#external-metrics-k8s-io-v1beta1-ExternalMetricValueList) + + + +## `ExternalMetricValue` {#external-metrics-k8s-io-v1beta1-ExternalMetricValue} + + +**Appears in:** + +- [ExternalMetricValueList](#external-metrics-k8s-io-v1beta1-ExternalMetricValueList) + + +

ExternalMetricValue is a metric value for external metric +A single metric value is identified by metric name and a set of string labels. +For one metric there can be multiple values with different sets of labels.

+ + + + + + + + + + + + + + + + + + + + + + + + + + +
FieldDescription
apiVersion
string
external.metrics.k8s.io/v1beta1
kind
string
ExternalMetricValue
metricName [Required]
+string +
+

the name of the metric

+
metricLabels [Required]
+map[string]string +
+

a set of labels that identify a single time series for the metric

+
timestamp [Required]
+meta/v1.Time +
+

indicates the time at which the metrics were produced

+
window [Required]
+int64 +
+

indicates the window ([Timestamp-Window, Timestamp]) from +which these metrics were calculated, when returning rate +metrics calculated from cumulative metrics (or zero for +non-calculated instantaneous metrics).

+
value [Required]
+k8s.io/apimachinery/pkg/api/resource.Quantity +
+

the value of the metric

+
+ +## `ExternalMetricValueList` {#external-metrics-k8s-io-v1beta1-ExternalMetricValueList} + + + +

ExternalMetricValueList is a list of values for a given metric for some set labels

+ + + + + + + + + + + + + + + + + +
FieldDescription
apiVersion
string
external.metrics.k8s.io/v1beta1
kind
string
ExternalMetricValueList
metadata [Required]
+meta/v1.ListMeta +
+ No description provided.
items [Required]
+[]ExternalMetricValue +
+

value of the metric matching a given set of labels

+
+ \ No newline at end of file diff --git a/content/en/docs/reference/external-api/metrics.v1beta1.md b/content/en/docs/reference/external-api/metrics.v1beta1.md new file mode 100644 index 0000000000..3fe7ad0433 --- /dev/null +++ b/content/en/docs/reference/external-api/metrics.v1beta1.md @@ -0,0 +1,220 @@ +--- +title: Kubernetes Metrics (v1beta1) +content_type: tool-reference +package: metrics.k8s.io/v1beta1 +auto_generated: true +--- +

Package v1beta1 is the v1beta1 version of the metrics API.

+ + +## Resource Types + + +- [NodeMetrics](#metrics-k8s-io-v1beta1-NodeMetrics) +- [NodeMetricsList](#metrics-k8s-io-v1beta1-NodeMetricsList) +- [PodMetrics](#metrics-k8s-io-v1beta1-PodMetrics) +- [PodMetricsList](#metrics-k8s-io-v1beta1-PodMetricsList) + + + +## `NodeMetrics` {#metrics-k8s-io-v1beta1-NodeMetrics} + + +**Appears in:** + +- [NodeMetricsList](#metrics-k8s-io-v1beta1-NodeMetricsList) + + +

NodeMetrics sets resource usage metrics of a node.

+ + + + + + + + + + + + + + + + + + + + + + + +
FieldDescription
apiVersion
string
metrics.k8s.io/v1beta1
kind
string
NodeMetrics
metadata
+meta/v1.ObjectMeta +
+

Standard object's metadata. +More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#metadata

+Refer to the Kubernetes API documentation for the fields of the metadata field.
timestamp [Required]
+meta/v1.Time +
+

The following fields define time interval from which metrics were +collected from the interval [Timestamp-Window, Timestamp].

+
window [Required]
+meta/v1.Duration +
+ No description provided.
usage [Required]
+core/v1.ResourceList +
+

The memory usage is the memory working set.

+
+ +## `NodeMetricsList` {#metrics-k8s-io-v1beta1-NodeMetricsList} + + + +

NodeMetricsList is a list of NodeMetrics.

+ + + + + + + + + + + + + + + + + +
FieldDescription
apiVersion
string
metrics.k8s.io/v1beta1
kind
string
NodeMetricsList
metadata [Required]
+meta/v1.ListMeta +
+

Standard list metadata. +More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds

+
items [Required]
+[]NodeMetrics +
+

List of node metrics.

+
+ +## `PodMetrics` {#metrics-k8s-io-v1beta1-PodMetrics} + + +**Appears in:** + +- [PodMetricsList](#metrics-k8s-io-v1beta1-PodMetricsList) + + +

PodMetrics sets resource usage metrics of a pod.

+ + + + + + + + + + + + + + + + + + + + + + + +
FieldDescription
apiVersion
string
metrics.k8s.io/v1beta1
kind
string
PodMetrics
metadata
+meta/v1.ObjectMeta +
+

Standard object's metadata. +More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#metadata

+Refer to the Kubernetes API documentation for the fields of the metadata field.
timestamp [Required]
+meta/v1.Time +
+

The following fields define time interval from which metrics were +collected from the interval [Timestamp-Window, Timestamp].

+
window [Required]
+meta/v1.Duration +
+ No description provided.
containers [Required]
+[]ContainerMetrics +
+

Metrics for all containers are collected within the same time window.

+
+ +## `PodMetricsList` {#metrics-k8s-io-v1beta1-PodMetricsList} + + + +

PodMetricsList is a list of PodMetrics.

+ + + + + + + + + + + + + + + + + +
FieldDescription
apiVersion
string
metrics.k8s.io/v1beta1
kind
string
PodMetricsList
metadata [Required]
+meta/v1.ListMeta +
+

Standard list metadata. +More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds

+
items [Required]
+[]PodMetrics +
+

List of pod metrics.

+
+ +## `ContainerMetrics` {#metrics-k8s-io-v1beta1-ContainerMetrics} + + +**Appears in:** + +- [PodMetrics](#metrics-k8s-io-v1beta1-PodMetrics) + + +

ContainerMetrics sets resource usage metrics of a container.

+ + + + + + + + + + + + + + +
FieldDescription
name [Required]
+string +
+

Container name corresponding to the one from pod.spec.containers.

+
usage [Required]
+core/v1.ResourceList +
+

The memory usage is the memory working set.

+
+ \ No newline at end of file diff --git a/content/en/docs/tasks/run-application/horizontal-pod-autoscale.md b/content/en/docs/tasks/run-application/horizontal-pod-autoscale.md index 978619dda5..9461ad4ae4 100644 --- a/content/en/docs/tasks/run-application/horizontal-pod-autoscale.md +++ b/content/en/docs/tasks/run-application/horizontal-pod-autoscale.md @@ -81,7 +81,8 @@ Kubernetes implements horizontal pod autoscaling as a control loop that runs int Once during each period, the controller manager queries the resource utilization against the metrics specified in each HorizontalPodAutoscaler definition. The controller manager finds the target resource defined by the `scaleTargetRef`, -then selects the pods based on the target resource's `.spec.selector` labels, and obtains the metrics from either the resource metrics API (for per-pod resource metrics), +then selects the pods based on the target resource's `.spec.selector` labels, +and obtains the metrics from either the resource metrics API (for per-pod resource metrics), or the custom metrics API (for all other metrics). - For per-pod resource metrics (like CPU), the controller fetches the metrics @@ -164,10 +165,12 @@ cannot exactly determine the first time a pod becomes ready when determining whether to set aside certain CPU metrics. Instead, it considers a Pod "not yet ready" if it's unready and transitioned to ready within a short, configurable window of time since it started. -This value is configured with the `--horizontal-pod-autoscaler-initial-readiness-delay` flag, and its default is 30 -seconds. Once a pod has become ready, it considers any transition to +This value is configured with the `--horizontal-pod-autoscaler-initial-readiness-delay` +flag, and its default is 30 seconds. +Once a pod has become ready, it considers any transition to ready to be the first if it occurred within a longer, configurable time -since it started. This value is configured with the `--horizontal-pod-autoscaler-cpu-initialization-period` flag, and its +since it started. This value is configured with the +`--horizontal-pod-autoscaler-cpu-initialization-period` flag, and its default is 5 minutes. The `currentMetricValue / desiredMetricValue` base scale ratio is then @@ -205,7 +208,8 @@ the current value. Finally, right before HPA scales the target, the scale recommendation is recorded. The controller considers all recommendations within a configurable window choosing the -highest recommendation from within that window. This value can be configured using the `--horizontal-pod-autoscaler-downscale-stabilization` flag, which defaults to 5 minutes. +highest recommendation from within that window. This value can be configured using the +`--horizontal-pod-autoscaler-downscale-stabilization` flag, which defaults to 5 minutes. This means that scaledowns will occur gradually, smoothing out the impact of rapidly fluctuating metric values. @@ -341,27 +345,31 @@ overall maximum that you configured). ## Support for metrics APIs -By default, the HorizontalPodAutoscaler controller retrieves metrics from a series of APIs. In order for it to access these -APIs, cluster administrators must ensure that: +By default, the HorizontalPodAutoscaler controller retrieves metrics from a series of APIs. +In order for it to access these APIs, cluster administrators must ensure that: - The [API aggregation layer](/docs/tasks/extend-kubernetes/configure-aggregation-layer/) is enabled. - The corresponding APIs are registered: - - For resource metrics, this is the `metrics.k8s.io` API, generally provided by [metrics-server](https://github.com/kubernetes-sigs/metrics-server). + - For resource metrics, this is the `metrics.k8s.io` [API](/docs/reference/external-api/metrics.v1beta1/), + generally provided by [metrics-server](https://github.com/kubernetes-sigs/metrics-server). It can be launched as a cluster add-on. - - For custom metrics, this is the `custom.metrics.k8s.io` API. It's provided by "adapter" API servers provided by metrics solution vendors. + - For custom metrics, this is the `custom.metrics.k8s.io` [API](/docs/reference/external-api/custom-metrics.v1beta2/). + It's provided by "adapter" API servers provided by metrics solution vendors. Check with your metrics pipeline to see if there is a Kubernetes metrics adapter available. - - For external metrics, this is the `external.metrics.k8s.io` API. It may be provided by the custom metrics adapters provided above. + - For external metrics, this is the `external.metrics.k8s.io` [API](/docs/reference/external-api/external-metrics.v1beta1/). + It may be provided by the custom metrics adapters provided above. For more information on these different metrics paths and how they differ please see the relevant design proposals for [the HPA V2](https://git.k8s.io/design-proposals-archive/autoscaling/hpa-v2.md), [custom.metrics.k8s.io](https://git.k8s.io/design-proposals-archive/instrumentation/custom-metrics-api.md) and [external.metrics.k8s.io](https://git.k8s.io/design-proposals-archive/instrumentation/external-metrics-api.md). -For examples of how to use them see [the walkthrough for using custom metrics](/docs/tasks/run-application/horizontal-pod-autoscale-walkthrough/#autoscaling-on-multiple-metrics-and-custom-metrics) +For examples of how to use them see +[the walkthrough for using custom metrics](/docs/tasks/run-application/horizontal-pod-autoscale-walkthrough/#autoscaling-on-multiple-metrics-and-custom-metrics) and [the walkthrough for using external metrics](/docs/tasks/run-application/horizontal-pod-autoscale-walkthrough/#autoscaling-on-metrics-not-related-to-kubernetes-objects). ## Configurable scaling behavior