[zh] Tidy up and fix links in tasks section (3/10)

This commit is contained in:
Qiming Teng
2020-08-11 16:05:33 +08:00
parent fb6364da0a
commit 1d3f4449a4
6 changed files with 627 additions and 532 deletions
@@ -1,13 +1,9 @@
---
reviewers:
- fgrzadkowski
- jszczepkowski
- directxman12
title: Pod 水平自动伸缩
title: Pod 水平自动扩缩
feature:
title: 水平
title: 水平
description: >
使用一个简单的命令、一个UI或基于CPU使用情况自动对应用程序进行缩。
使用一个简单的命令、一个UI或基于CPU使用情况自动对应用程序进行缩。
content_type: concept
weight: 90
@@ -22,10 +18,11 @@ in a replication controller, deployment or replica set based on observed CPU uti
support, on some other application-provided metrics). Note that Horizontal
Pod Autoscaling does not apply to objects that can't be scaled, for example, DaemonSets.
-->
Pod 水平自动缩(Horizontal Pod Autoscaler特性,
可以基于CPU利用率自动replication controller、deployment和 replica set 中的 pod 数量,(除了 CPU 利用率)也可以
基于其他应程序提供的度量指标[custom metrics](https://git.k8s.io/community/contributors/design-proposals/instrumentation/custom-metrics-api.md)
pod 自动缩放不适用于无法缩放的对象,比如 DaemonSets
Pod 水平自动缩(Horizontal Pod Autoscaler
可以基于 CPU 利用率自动ReplicationController、Deployment ReplicaSet 中的 Pod 数量
除了 CPU 利用率,也可以基于其他应程序提供的[自定义度量指标](https://git.k8s.io/community/contributors/design-proposals/instrumentation/custom-metrics-api.md)
来执行自动扩缩
Pod 自动扩缩不适用于无法扩缩的对象,比如 DaemonSet。
<!--
The Horizontal Pod Autoscaler is implemented as a Kubernetes API resource and a controller.
@@ -33,28 +30,25 @@ The resource determines the behavior of the controller.
The controller periodically adjusts the number of replicas in a replication controller or deployment
to match the observed average CPU utilization to the target specified by user.
-->
Pod 水平自动缩特性由 Kubernetes API 资源和控制器实现。资源决定了控制器的行为。
控制器会周期性的获取平均 CPU 利用率,并与目标值相比较后来调整 replication controller deployment 中的副本数量
Pod 水平自动缩特性由 Kubernetes API 资源和控制器实现。资源决定了控制器的行为。
控制器会周期性的调整副本控制器Deployment 中的副本数量,以使得 Pod 的平均 CPU
利用率与用户所设定的目标值匹配。
<!-- body -->
<!--
## How does the Horizontal Pod Autoscaler work?
-->
## Pod 水平自动缩工作机制
## Pod 水平自动缩工作机制
![水平自动缩示意图](/images/docs/horizontal-pod-autoscaler.svg)
![水平自动缩示意图](/images/docs/horizontal-pod-autoscaler.svg)
<!--
The Horizontal Pod Autoscaler is implemented as a control loop, with a period controlled
by the controller manager's `--horizontal-pod-autoscaler-sync-period` flag (with a default
value of 15 seconds).
-->
Pod 水平自动伸缩的实现是一个控制循环,由 controller manager `--horizontal-pod-autoscaler-sync-period` 参数
指定周期(默认值为15秒)。
Pod 水平自动扩缩器的实现是一个控制回路,由控制器管理器`--horizontal-pod-autoscaler-sync-period` 参数指定周期(默认值为 15 秒)。
<!--
During each period, the controller manager queries the resource utilization against the
@@ -62,8 +56,8 @@ metrics specified in each HorizontalPodAutoscaler definition. The controller ma
obtains the metrics from either the resource metrics API (for per-pod resource metrics),
or the custom metrics API (for all other metrics).
-->
每个周期内,controller manager 根据每个 HorizontalPodAutoscaler 定义中指定的指标查询资源利用率。
controller manager 可以从 resource metrics API(每个pod 资源指标)和 custom metrics API(其他指标)获取指标
每个周期内,控制器管理器根据每个 HorizontalPodAutoscaler 定义中指定的指标查询资源利用率。
控制器管理器可以从资源度量指标 API(按 Pod 统计的资源用量)和自定义度量指标 API(其他指标)获取度量值
<!--
* For per-pod resource metrics (like CPU), the controller fetches the metrics
@@ -75,26 +69,28 @@ controller manager 可以从 resource metrics API(每个pod 资源指标)和
of target specified) across all targeted pods, and produces a ratio used to scale
the number of desired replicas.
-->
* 对于每个 pod 的资源指标(如 CPU),控制器从资源指标 API 中获取每一个 HorizontalPodAutoscaler 指定
pod 的指标,然后,如果设置了目标使用率,控制器获取每个 pod 中的容器资源使用情况,并计算资源使用率。
如果使用原始值,将直接使用原始数据(不再计算百分比)
然后,控制器根据平均的资源使用率或原始值计算出缩放的比例,进而计算出目标副本数
* 对于按 Pod 统计的资源指标(如 CPU),控制器从资源指标 API 中获取每一个
HorizontalPodAutoscaler 指定Pod 的度量值,如果设置了目标使用率,
控制器获取每个 Pod 中的容器资源使用情况,并计算资源使用率
如果设置了 target 值,将直接使用原始数据(不再计算百分比)
接下来,控制器根据平均的资源使用率或原始值计算出扩缩的比例,进而计算出目标副本数。
<!--
<!--
Please note that if some of the pod's containers do not have the relevant resource request set,
CPU utilization for the pod will not be defined and the autoscaler will
not take any action for that metric. See the [algorithm
details](#algorithm-details) section below for more information about
how the autoscaling algorithm works.
-->
需要注意的是,如果 pod 某些容器不支持资源采集,那么控制器将不会使用该 pod 的 CPU 使用率。
下面的[算法细节](#algorithm-details)章节将会介绍详细的算法。
-->
需要注意的是,如果 Pod 某些容器不支持资源采集,那么控制器将不会使用该 Pod 的 CPU 使用率。
下面的[算法细节](#algorithm-details)章节将会介绍详细的算法。
<!--
* For per-pod custom metrics, the controller functions similarly to per-pod resource metrics,
except that it works with raw values, not utilization values.
-->
* 如果 pod 使用自定义指示,控制器机制与资源指标类似,区别在于自定义指标只使用原始值,而不是使用率。
* 如果 Pod 使用自定义指示,控制器机制与资源指标类似,区别在于自定义指标只使用
原始值,而不是使用率。
<!--
* For object metrics and external metrics, a single metric is fetched, which describes
@@ -104,8 +100,8 @@ controller manager 可以从 resource metrics API(每个pod 资源指标)和
comparison is made.
-->
* 如果pod 使用对象指标和外部指标(每个指标描述一个对象信息)。
这个指标将直接跟据目标设定值相比较,并生成一个上面提到的缩比例。`autoscaling/v2beta2` 版本API中,
这个指标也可以根据 pod 数量平分后再计算。
这个指标将直接跟据目标设定值相比较,并生成一个上面提到的缩比例。
`autoscaling/v2beta2` 版本API中,这个指标也可以根据 Pod 数量平分后再计算。
<!--
The HorizontalPodAutoscaler normally fetches metrics from a series of aggregated APIs (`metrics.k8s.io`,
@@ -114,10 +110,10 @@ metrics-server, which needs to be launched separately. See
[metrics-server](/docs/tasks/debug-application-cluster/resource-metrics-pipeline/#metrics-server)
for instructions. The HorizontalPodAutoscaler can also fetch metrics directly from Heapster.
-->
通常情况下,控制器将从一系列的聚合 API(`metrics.k8s.io``custom.metrics.k8s.io``external.metrics.k8s.io`
中获取指标数据
`metrics.k8s.io` API 通常由 metrics-server(需要额外启动)提供。
可以从[metrics-server](/docs/tasks/debug-application-cluster/resource-metrics-pipeline/#metrics-server) 获取更多信息。
通常情况下,控制器将从一系列的聚合 API(`metrics.k8s.io``custom.metrics.k8s.io`
`external.metrics.k8s.io`)中获取度量值
`metrics.k8s.io` API 通常由 Metrics 服务器(需要额外启动)提供。
可以从 [metrics-server](/zh/docs/tasks/debug-application-cluster/resource-metrics-pipeline/#metrics-server) 获取更多信息。
另外,控制器也可以直接从 Heapster 获取指标。
{{< note >}}
@@ -125,13 +121,13 @@ for instructions. The HorizontalPodAutoscaler can also fetch metrics directly fr
<!--
Fetching metrics from Heapster is deprecated as of Kubernetes 1.11.
-->
自 Kubernetes 1.11起,从 Heapster 获取指标特性已废弃。
自 Kubernetes 1.11 起,从 Heapster 获取指标特性已废弃。
{{< /note >}}
<!--
See [Support for metrics APIs](#support-for-metrics-apis) for more details.
-->
关于指标 API 更多信息,请参考[Support for metrics APIs](#support-for-metrics-apis)。
关于指标 API 更多信息,请参考[度量值指标 API 的支持](#support-for-metrics-apis)。
<!--
The autoscaler accesses corresponding scalable controllers (such as replication controllers, deployments, and replica sets)
@@ -139,21 +135,21 @@ by using the scale sub-resource. Scale is an interface that allows you to dynami
each of their current states. More details on scale sub-resource can be found
[here](https://git.k8s.io/community/contributors/design-proposals/autoscaling/horizontal-pod-autoscaler.md#scale-subresource).
-->
自动缩控制器使用 scale sub-resource 访问相应可支持缩的控制器(如replication controllers、deployments 和 replica sets)。
自动缩控制器使用 scale 子资源访问相应可支持缩的控制器(如副本控制器、
Deployments 和 ReplicaSet)。
`scale` 是一个可以动态设定副本数量和检查当前状态的接口。
更多关于 scale sub-resource 的信息,请参考[这里](https://git.k8s.io/community/contributors/design-proposals/autoscaling/horizontal-pod-autoscaler.md#scale-subresource).
关于 scale 子资源的更多信息,请参考[这里](https://git.k8s.io/community/contributors/design-proposals/autoscaling/horizontal-pod-autoscaler.md#scale-subresource).
<!--
### Algorithm Details
-->
### 算法细节
<!--
From the most basic perspective, the Horizontal Pod Autoscaler controller
operates on the ratio between desired metric value and current metric
value:
-->
从最基本的角度来看,pod 水平自动缩放控制器跟据当前指标和期望指标来计算缩放比例。
### 算法细节 {#algorithm-details}
从最基本的角度来看,Pod 水平自动扩缩控制器跟据当前指标和期望指标来计算扩缩比例。
<!--
```
@@ -161,7 +157,7 @@ desiredReplicas = ceil[currentReplicas * ( currentMetricValue / desiredMetricVal
```
-->
```
期望副本数 = ceil[当前副本数 * ( 当前指标 / 期望指标 )]
期望副本数 = ceil[当前副本数 * (当前指标 / 期望指标)]
```
<!--
@@ -172,11 +168,12 @@ replicas, since `50.0 / 100.0 == 0.5`. We'll skip scaling if the ratio is
sufficiently close to 1.0 (within a globally-configurable tolerance, from
the `--horizontal-pod-autoscaler-tolerance` flag, which defaults to 0.1).
-->
例如,当前指标为`200m`,目标设定值为`100m`,那么由于`200.0 / 100.0 == 2.0`
例如,当前度量值为 `200m`,目标设定值为 `100m`那么由于 `200.0/100.0 == 2.0`
副本数量将会翻倍。
如果当前指标为`50m`,副本数量将会减半,因为`50.0 / 100.0 == 0.5`
如果计算出的缩比例接近1.0(跟据`--horizontal-pod-autoscaler-tolerance` 参数全局配置的容忍值,默认为0.1),
将会放弃本次缩放。
如果当前指标为 `50m`,副本数量将会减半,因为`50.0/100.0 == 0.5`
如果计算出的缩比例接近 1.0
(跟据`--horizontal-pod-autoscaler-tolerance` 参数全局配置的容忍值,默认为 0.1),
将会放弃本次扩缩。
<!--
When a `targetAverageValue` or `targetAverageUtilization` is specified,
@@ -186,28 +183,27 @@ Before checking the tolerance and deciding on the final values, we take
pod readiness and missing metrics into consideration, however.
-->
如果 HorizontalPodAutoscaler 指定的是`targetAverageValue``targetAverageUtilization`
那么将会把指定pod的平均指标做为`currentMetricValue`
然而,在检查容忍度和决定最终缩值前,我们仍然会把那些无法获取指标的pod统计进去。
那么将会把指定 Pod 度量值的平均做为 `currentMetricValue`
然而,在检查容忍度和决定最终缩值前,我们仍然会把那些无法获取指标的 Pod 统计进去。
<!--
All Pods with a deletion timestamp set (i.e. Pods in the process of being
shut down) and all failed Pods are discarded.
-->
所有被标记了删除时间戳(Pod正在关闭过程中)的 pod 和 失败的 pod 都会被忽略。
<!--
If a particular Pod is missing metrics, it is set aside for later; Pods
with missing metrics will be used to adjust the final scaling amount.
-->
如果某个 pod 缺失指标信息,它将会被搁置,只在最终确定缩值时再考虑
所有被标记了删除时间戳(Pod 正在关闭过程中)的 Pod 和 失败的 Pod 都会被忽略
如果某个 Pod 缺失度量值,它将会被搁置,只在最终确定扩缩数量时再考虑。
<!--
When scaling on CPU, if any pod has yet to become ready (i.e. it's still
initializing) *or* the most recent metric point for the pod was before it
became ready, that pod is set aside as well.
-->
当使用 CPU 指标来缩时,任何还未就绪(例如还在初始化)状态的 pod ** 最近的指标为就绪状态前的 pod
也会被搁置
当使用 CPU 指标来缩时,任何还未就绪(例如还在初始化)状态的 Pod ** 最近的指标
度量值采集于就绪状态前的 Pod,该 Pod 也会被搁置
<!--
Due to technical constraints, the HorizontalPodAutoscaler controller
@@ -221,18 +217,20 @@ 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
default is 5 minutes.
-->
由于受技术限制,pod 水平缩控制器无法准确的知道 pod 什么时候就绪,
也就无法决定是否暂时搁置该 pod。
`--horizontal-pod-autoscaler-initial-readiness-delay` 参数(默认为30s用于设置 pod 准备时间,
在此时间内的 pod 统统被认为未就绪。
`--horizontal-pod-autoscaler-cpu-initialization-period`参数(默认为5分钟),用于设置 pod 的初始化时间,
在此时间内的 pod,CPU 资源指标将不会被采纳。
由于受技术限制,Pod 水平缩控制器无法准确的知道 Pod 什么时候就绪,
也就无法决定是否暂时搁置该 Pod。
`--horizontal-pod-autoscaler-initial-readiness-delay` 参数(默认为 30s)用于设置 Pod 准备时间,
在此时间内的 Pod 统统被认为未就绪。
`--horizontal-pod-autoscaler-cpu-initialization-period` 参数(默认为5分钟)
用于设置 Pod 的初始化时间,
在此时间内的 Pod,CPU 资源度量值将不会被采纳。
<!--
The `currentMetricValue / desiredMetricValue` base scale ratio is then
calculated using the remaining pods not set aside or discarded from above.
-->
在排除掉被搁置的 pod 后,缩比例就会跟据`currentMetricValue / desiredMetricValue`计算出来。
在排除掉被搁置的 Pod 后,缩比例就会跟据`currentMetricValue/desiredMetricValue`
计算出来。
<!--
If there were any missing metrics, we recompute the average more
@@ -240,10 +238,10 @@ conservatively, assuming those pods were consuming 100% of the desired
value in case of a scale down, and 0% in case of a scale up. This dampens
the magnitude of any potential scale.
-->
如果有任何 pod 的指标缺失,我们会更保守地重新计算平均值,
在需要缩小时假设这些 pod 消耗了目标值的 100%
在需要放大时假设这些 pod 消耗了0%目标值。
这可以在一定程度上抑制缩的幅度。
如果缺失任何的度量值,我们会更保守地重新计算平均值,
在需要缩小时假设这些 Pod 消耗了目标值的 100%
在需要放大时假设这些 Pod 消耗了 0% 目标值。
这可以在一定程度上抑制缩的幅度。
<!--
Furthermore, if any not-yet-ready pods were present, and we would have
@@ -251,8 +249,8 @@ scaled up without factoring in missing metrics or not-yet-ready pods, we
conservatively assume the not-yet-ready pods are consuming 0% of the
desired metric, further dampening the magnitude of a scale up.
-->
此外,如果存在任何尚未就绪的pod,我们可以在不考虑遗漏指标或尚未就绪的pods的情况下进行缩,
我们保守地假设尚未就绪的pods消耗了试题指标的0%,从而进一步降低了缩的幅度。
此外,如果存在任何尚未就绪的 Pod,我们可以在不考虑遗漏指标或尚未就绪的 Pod 的情况下进行缩,
我们保守地假设尚未就绪的 Pod 消耗了试题指标的 0%,从而进一步降低了缩的幅度。
<!--
After factoring in the not-yet-ready pods and missing metrics, we
@@ -260,9 +258,9 @@ recalculate the usage ratio. If the new ratio reverses the scale
direction, or is within the tolerance, we skip scaling. Otherwise, we use
the new ratio to scale.
-->
在缩方向(缩小或放大)确定后,我们会把未就绪的 pod 和缺少指标的 pod 考虑进来再次计算使用率。
如果新的比率与缩方向相反,或者在容忍范围内,则跳过缩
否则,我们使用新的缩比例。
缩方向(缩小或放大)确定后,我们会把未就绪的 Pod 和缺少指标的 Pod 考虑进来再次计算使用率。
如果新的比率与缩方向相反,或者在容忍范围内,则跳过缩。
否则,我们使用新的缩比例。
<!--
Note that the *original* value for the average utilization is reported
@@ -271,7 +269,7 @@ not-yet-ready pods or missing metrics, even when the new usage ratio is
used.
-->
注意,平均利用率的*原始*值会通过 HorizontalPodAutoscaler 的状态体现(
即使使用了新的使用率,也不考虑未就绪 pod 和 缺少指标的 pod)。
即使使用了新的使用率,也不考虑未就绪 Pod 和 缺少指标的 Pod)。
<!--
If multiple metrics are specified in a HorizontalPodAutoscaler, this
@@ -281,9 +279,9 @@ into a desired replica count (e.g. due to an error fetching the metrics
from the metrics APIs), scaling is skipped.
-->
如果创建 HorizontalPodAutoscaler 时指定了多个指标,
那么会按照每个指标分别计算缩副本数,取最大的进行缩
如果任何一个指标无法顺利的计算出缩副本数(比如,通过 API 获取指标时出错),
那么本次缩会被跳过。
那么会按照每个指标分别计算缩副本数,取最大的进行缩。
如果任何一个指标无法顺利的计算出缩副本数(比如,通过 API 获取指标时出错),
那么本次缩会被跳过。
<!--
Finally, just before HPA scales the target, the scale recommendation is recorded. The
@@ -293,54 +291,58 @@ This value can be configured using the `--horizontal-pod-autoscaler-downscale-st
This means that scaledowns will occur gradually, smoothing out the impact of rapidly
fluctuating metric values.
-->
最后,在 HPA 控制器执行缩操作之前,会记录缩建议信息scale recommendation
最后,在 HPA 控制器执行缩操作之前,会记录缩建议信息。
控制器会在操作时间窗口中考虑所有的建议信息,并从中选择得分最高的建议。
这个值可通过 kube-controller-manager 服务的启动参数 `--horizontal-pod-autoscaler-downscale-stabilization` 进行配置,
默认值为 5min
这个值可通过 `kube-controller-manager` 服务的启动参数 `--horizontal-pod-autoscaler-downscale-stabilization` 进行配置,
默认值为 5 分钟
这个配置可以让系统更为平滑地进行缩容操作,从而消除短时间内指标值快速波动产生的影响。
<!--
## API Object
-->
## API 对象
<!--
The Horizontal Pod Autoscaler is an API resource in the Kubernetes `autoscaling` API group.
The current stable version, which only includes support for CPU autoscaling,
can be found in the `autoscaling/v1` API version.
-->
## API 对象 {#api-object}
HorizontalPodAutoscaler 是 Kubernetes `autoscaling` API 组的资源。
在当前稳定版本(`autoscaling/v1`)中只支持基于CPU指标的缩
在当前稳定版本(`autoscaling/v1`)中只支持基于 CPU 指标的缩。
<!--
The beta version, which includes support for scaling on memory and custom metrics,
can be found in `autoscaling/v2beta2`. The new fields introduced in `autoscaling/v2beta2`
are preserved as annotations when working with `autoscaling/v1`.
-->
beta 版本(`autoscaling/v2beta2`引入了基于内存和自定义指标的缩
`autoscaling/v2beta2`版本中新引入的字段在`autoscaling/v1`版本中基于 annotation 实现。
API 的 beta 版本(`autoscaling/v2beta2`)引入了基于内存和自定义指标的缩。
`autoscaling/v2beta2` 版本中新引入的字段在 `autoscaling/v1` 版本中以注解
的形式得以保留。
<!--
When you create a HorizontalPodAutoscaler API object, make sure the name specified is a valid
[DNS subdomain name](/docs/concepts/overview/working-with-objects/names#dns-subdomain-names).
More details about the API object can be found at
[HorizontalPodAutoscaler Object](https://git.k8s.io/community/contributors/design-proposals/autoscaling/horizontal-pod-autoscaler.md#horizontalpodautoscaler-object).
-->
更多有关 API 对象的信息,请查阅[HorizontalPodAutoscaler Object](https://git.k8s.io/community/contributors/design-proposals/autoscaling/horizontal-pod-autoscaler.md#horizontalpodautoscaler-object)。
创建 HorizontalPodAutoscaler 对象时,需要确保所给的名称是一个合法的
[DNS 子域名](/zh/docs/concepts/overview/working-with-objects/names#dns-subdomain-names)。
有关 API 对象的更多信息,请查阅[HorizontalPodAutoscaler 对象设计文档](https://git.k8s.io/community/contributors/design-proposals/autoscaling/horizontal-pod-autoscaler.md#horizontalpodautoscaler-object)。
<!--
## Support for Horizontal Pod Autoscaler in kubectl
-->
## 使用 kubectl 操作 Horizontal Pod Autoscaler
<!--
Horizontal Pod Autoscaler, like every API resource, is supported in a standard way by `kubectl`.
We can create a new autoscaler using `kubectl create` command.
We can list autoscalers by `kubectl get hpa` and get detailed description by `kubectl describe hpa`.
Finally, we can delete an autoscaler using `kubectl delete hpa`.
-->
与其他 API 资源类似,`kubectl` 也标准支持 Pod 自动伸缩。
我们可以通过 `kubectl create` 命令创建一个自动伸缩对象,
通过 `kubectl get hpa` 命令来获取所有自动伸缩对象,
通过 `kubectl describe hpa` 命令来查看自动伸缩对象的详细信息。
## kubectl 对 Horizontal Pod Autoscaler 的支持
与其他 API 资源类似,`kubectl` 以标准方式支持 HPA。
我们可以通过 `kubectl create` 命令创建一个 HPA 对象,
通过 `kubectl get hpa` 命令来获取所有 HPA 对象,
通过 `kubectl describe hpa` 命令来查看 HPA 对象的详细信息。
最后,可以使用 `kubectl delete hpa` 命令删除对象。
<!--
@@ -350,28 +352,26 @@ will create an autoscaler for replication set *foo*, with target CPU utilization
and the number of replicas between 2 and 5.
The detailed documentation of `kubectl autoscale` can be found [here](/docs/reference/generated/kubectl/kubectl-commands/#autoscale).
-->
此外,还有个简便的命令 `kubectl autoscale` 来创建自动伸缩对象。
此外,还有个简便的命令 `kubectl autoscale` 来创建 HPA 对象。
例如,命令 `kubectl autoscale rs foo --min=2 --max=5 --cpu-percent=80` 将会为名
*foo*replication set 创建一个自动伸缩对象,
对象目标CPU使用率为 `80%`,副本数量配置为 2 到 5 之间。
*foo*ReplicationSet 创建一个 HPA 对象,
目标 CPU 使用率为 `80%`,副本数量配置为 2 到 5 之间。
<!--
## Autoscaling during rolling update
-->
## 滚动升级时缩放
<!--
Currently in Kubernetes, it is possible to perform a [rolling update](/docs/tasks/run-application/rolling-update-replication-controller/)
by managing replication controllers directly,
or by using the deployment object, which manages the underlying replica sets for you.
Horizontal Pod Autoscaler only supports the latter approach: the Horizontal Pod Autoscaler is bound to the deployment object,
it sets the size for the deployment object, and the deployment is responsible for setting sizes of underlying replica sets.
-->
目前在 Kubernetes 中,可以针对 replication controllers 或 deployment 执行
滚动升级[rolling update](/docs/tasks/run-application/rolling-update-replication-controller/),他们会为你管理底层副本数。
Pod 水平缩放只支持后一种:Horizontal Pod Autoscaler 会被绑定到 deployment 对象中,Horizontal Pod Autoscaler 设置副本数量时,
deployment 会设置底层副本数。
## 滚动升级时扩缩 {#autoscaling-during-roling-update}
目前在 Kubernetes 中,可以针对 ReplicationController 或 Deployment 执行
滚动更新,它们会为你管理底层副本数。
Pod 水平扩缩只支持后一种:HPA 会被绑定到 Deployment 对象,
HPA 设置副本数量时,Deployment 会设置底层副本数。
<!--
Horizontal Pod Autoscaler does not work with rolling update using direct manipulation of replication controllers,
@@ -379,35 +379,36 @@ i.e. you cannot bind a Horizontal Pod Autoscaler to a replication controller and
The reason this doesn't work is that when rolling update creates a new replication controller,
the Horizontal Pod Autoscaler will not be bound to the new replication controller.
-->
当使用 replication controllers 执行滚动升级时, Horizontal Pod Autoscaler 不能工作,
也就是说你不能将 Horizontal Pod Autoscaler 绑定到某个 replication controller
再执行滚动升级(例如使用 `kubectl rolling-update` 命令)。
Horizontal Pod Autoscaler 不能工作的原因是,Horizontal Pod Autoscaler 无法绑定到滚动升级时创建的副本。
通过直接操控副本控制器执行滚动升级时,HPA 不能工作,
也就是说你不能将 HPA 绑定到某个 RC 再执行滚动升级
(例如使用 `kubectl rolling-update` 命令)。
HPA 不能工作的原因是它无法绑定到滚动更新时所新创建的副本控制器
<!--
## Support for cooldown/delay
-->
## 冷却/延迟
<!--
When managing the scale of a group of replicas using the Horizontal Pod Autoscaler,
it is possible that the number of replicas keeps fluctuating frequently due to the
dynamic nature of the metrics evaluated. This is sometimes referred to as *thrashing*.
-->
当使用 Horizontal Pod Autoscaler 管理一组副本缩放时,
有可能因为指标动态的变化造成副本数量频繁的变化,有时这被称为 *抖动*
## 冷却/延迟支持
当使用 Horizontal Pod Autoscaler 管理一组副本扩缩时,
有可能因为指标动态的变化造成副本数量频繁的变化,有时这被称为
*抖动(Thrashing*
<!--
Starting from v1.6, a cluster operator can mitigate this problem by tuning
the global HPA settings exposed as flags for the `kube-controller-manager` component:
-->
从 v1.6 版本起,集群操作员可以开启某些 `kube-controller-manager` 全局参数来缓和这个问题。
从 v1.6 版本起,集群操作员可以调节某些 `kube-controller-manager` 全局参数来
缓解这个问题。
<!--
Starting from v1.12, a new algorithmic update removes the need for the
upscale delay.
-->
从 v1.12 开始,算法调整后,就不用这么做了。
从 v1.12 开始,算法调整后,扩容操作时的延迟就不必设置了。
<!--
- `--horizontal-pod-autoscaler-downscale-stabilization`: The value for this option is a
@@ -415,10 +416,10 @@ upscale delay.
downscale operation can be performed after the current one has completed.
The default value is 5 minutes (`5m0s`).
-->
- `--horizontal-pod-autoscaler-downscale-stabilization`: 这个 `kube-controller-manager` 的参数表示缩容冷却时间。
即自从上次缩容执行结束后,多久可以再次执行缩容,默认时间是5分钟(`5m0s`)
- `--horizontal-pod-autoscaler-downscale-stabilization`:
`kube-controller-manager` 的这个参数表示缩容冷却时间
即自从上次缩容执行结束后,多久可以再次执行缩容,默认时间是 5 分钟(`5m0s`)。
{{< note >}}
<!--
When tuning these parameter values, a cluster operator should be aware of the possible
consequences. If the delay (cooldown) value is set too long, there could be complaints
@@ -426,43 +427,43 @@ that the Horizontal Pod Autoscaler is not responsive to workload changes. Howeve
the delay value is set too short, the scale of the replicas set may keep thrashing as
usual.
-->
当启用这个参数时,集群操作员需要明白其可能的影响。
如果延迟(冷却)时间设置的太长,那么 Horizontal Pod Autoscaler 可能会不能很好的改变负载
如果延迟(冷却)时间设的太短,那么副本数量有可能跟以前一样抖动
{{< note >}}
当调整这些参数时,集群操作员需要明白其可能的影响
如果延迟(冷却)时间设的太长,Horizontal Pod Autoscaler 可能会不能很好的改变负载
如果延迟(冷却)时间设置的太短,那么副本数量有可能跟以前一样出现抖动。
{{< /note >}}
<!--
## Support for multiple metrics
-->
## 多指标支持
<!--
Kubernetes 1.6 adds support for scaling based on multiple metrics. You can use the `autoscaling/v2beta2` API
version to specify multiple metrics for the Horizontal Pod Autoscaler to scale on. Then, the Horizontal Pod
Autoscaler controller will evaluate each metric, and propose a new scale based on that metric. The largest of the
proposed scales will be used as the new scale.
-->
在 Kubernetes 1.6 支持了基于多个指标进行缩放。
## 多指标支持 {#support-for-multiple-metrics}
Kubernetes 1.6 开始支持基于多个度量值进行扩缩。
你可以使用 `autoscaling/v2beta2` API 来为 Horizontal Pod Autoscaler 指定多个指标。
Horizontal Pod Autoscaler 会跟据每个指标计算,并生成一个缩建议。
幅度最大的缩建议会被采纳。
Horizontal Pod Autoscaler 会跟据每个指标计算,并生成一个缩建议。
幅度最大的缩建议会被采纳。
<!--
## Support for custom metrics
-->
## 自定义指标支持
{{< note >}}
<!--
Kubernetes 1.2 added alpha support for scaling based on application-specific metrics using special annotations.
Support for these annotations was removed in Kubernetes 1.6 in favor of the new autoscaling API. While the old method for collecting
custom metrics is still available, these metrics will not be available for use by the Horizontal Pod Autoscaler, and the former
annotations for specifying which custom metrics to scale on are no longer honored by the Horizontal Pod Autoscaler controller.
-->
在 Kubernetes 1.2 增加的 alpha 的缩放支持基于特定的 annotation。
自从 Kubernetes 1.6 起,由于缩放 API 的引入,这些 annotation 就不再支持了。
虽然收集自定义指标的旧方法仍然可用,但是 Horizontal Pod Autoscaler 调度器将不会再使用这些指标,
同时,Horizontal Pod Autoscaler 也不再使用之前的用于指定用户自定义指标的 annotation 了。
## 自定义指标支持 {#support-for-custom-metrics}
{{< note >}}
在 Kubernetes 1.2 增加了支持基于使用特殊注解表达的、特定于具体应用的扩缩能力,
此能力处于 Alpha 阶段。
从 Kubernetes 1.6 起,由于新的 autoscaling API 的引入,这些 annotation 就被废弃了。
虽然收集自定义指标的旧方法仍然可用,Horizontal Pod Autoscaler 调度器将不会再使用这些度量值。
同时,Horizontal Pod Autoscaler 也不再使用之前用于指定用户自定义指标的注解。
{{< /note >}}
<!--
@@ -477,52 +478,41 @@ Kubernetes 会通过用户自定义指标 API 来获取相应的指标。
<!--
See [Support for metrics APIs](#support-for-metrics-apis) for the requirements.
-->
关于指标 API 的要求,请查阅 [Support for metrics APIs](#support-for-metrics-apis)。
关于指标 API 的要求,请参阅[对 Metrics API 的支持](#support-for-metrics-apis)。
<!--
## Support for metrics APIs
-->
## 指标 API
<!--
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:
-->
默认情况下,HorizontalPodAutoscaler 控制器会从一系列的 API 中请求指标数据。
集群管理员需要确保下述条件,以保证这些 API 可以访问:
## 对 Metrics API 的支持 {#support-for-metrics-apis}
默认情况下,HorizontalPodAutoscaler 控制器会从一系列的 API 中检索度量值。
集群管理员需要确保下述条件,以保证 HPA 控制器能够访问这些 API:
<!--
* The [API aggregation layer](/docs/tasks/access-kubernetes-api/configure-aggregation-layer/) is enabled.
-->
* [API aggregation layer](/docs/tasks/access-kubernetes-api/configure-aggregation-layer/) 已开启
<!--
* The corresponding APIs are registered:
* For resource metrics, this is the `metrics.k8s.io` API, generally provided by [metrics-server](https://github.com/kubernetes-incubator/metrics-server).
It can be launched as a cluster addon.
* For custom metrics, this is the `custom.metrics.k8s.io` API. It's provided by "adapter" API servers provided by metrics solution vendors.
Check with your metrics pipeline, or the [list of known solutions](https://github.com/kubernetes/metrics/blob/master/IMPLEMENTATIONS.md#custom-metrics-api).
If you would like to write your own, check out the [boilerplate](https://github.com/kubernetes-incubator/custom-metrics-apiserver) to get started.
* For external metrics, this is the `external.metrics.k8s.io` API. It may be provided by the custom metrics adapters provided above.
-->
* 相应的 API 已注册:
* 资源指标会使用 `metrics.k8s.io` API,一般由 [metrics-server](https://github.com/kubernetes-incubator/metrics-server) 提供。
它可以做为集群组件启动。
* 用户指标会使用 `custom.metrics.k8s.io` API。
它由其他厂商的“适配器”API 服务器提供。
确认你的指标管道,或者查看 [list of known solutions](https://github.com/kubernetes/metrics/blob/master/IMPLEMENTATIONS.md#custom-metrics-api)。
* 外部指标会使用 `external.metrics.k8s.io` API。可能由上面的用户指标适配器提供。
<!--
* The `--horizontal-pod-autoscaler-use-rest-clients` is `true` or unset. Setting this to false switches to Heapster-based autoscaling, which is deprecated.
-->
* 启用了 [API 聚合层](/zh/docs/tasks/extend-kubernetes/configure-aggregation-layer/)
* 相应的 API 已注册:
* 对于资源指标,将使用 `metrics.k8s.io` API,一般由 [metrics-server](https://github.com/kubernetes-incubator/metrics-server) 提供。
它可以做为集群插件启动。
* 对于自定义指标,将使用 `custom.metrics.k8s.io` API。
它由其他度量指标方案厂商的“适配器(Adapter)” API 服务器提供。
确认你的指标流水线,或者查看[已知方案列表](https://github.com/kubernetes/metrics/blob/master/IMPLEMENTATIONS.md#custom-metrics-api)。
* 对于外部指标,将使用 `external.metrics.k8s.io` API。可能由上面的自定义指标适配器提供。
* `--horizontal-pod-autoscaler-use-rest-clients` 参数设置为 `true` 或者不设置。
如果设置为 false,则会切换到基于 Heapster 的自动缩,这个特性已经被弃用了。
如果设置为 false,则会切换到基于 Heapster 的自动缩,这个特性已经被弃用了。
<!--
For more information on these different metrics paths and how they differ please see the relevant design proposals for
@@ -530,31 +520,27 @@ For more information on these different metrics paths and how they differ please
[custom.metrics.k8s.io](https://github.com/kubernetes/community/blob/master/contributors/design-proposals/instrumentation/custom-metrics-api.md)
and [external.metrics.k8s.io](https://github.com/kubernetes/community/blob/master/contributors/design-proposals/instrumentation/external-metrics-api.md).
-->
更多关于指标来源以及其区别,请参阅相关的设计文档,
关于指标来源以及其区别的更多信息,请参阅相关的设计文档,
[the HPA V2](https://github.com/kubernetes/community/blob/master/contributors/design-proposals/autoscaling/hpa-v2.md)、
[custom.metrics.k8s.io](https://github.com/kubernetes/community/blob/master/contributors/design-proposals/instrumentation/custom-metrics-api.md)和
[custom.metrics.k8s.io](https://github.com/kubernetes/community/blob/master/contributors/design-proposals/instrumentation/custom-metrics-api.md)
[external.metrics.k8s.io](https://github.com/kubernetes/community/blob/master/contributors/design-proposals/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)
and [the walkthrough for using external metrics](/docs/tasks/run-application/horizontal-pod-autoscale-walkthrough/#autoscaling-on-metrics-not-related-to-kubernetes-objects).
-->
如何使用它们的示例,请参考
[the walkthrough for using custom metrics](/docs/tasks/run-application/horizontal-pod-autoscale-walkthrough/#autoscaling-on-multiple-metrics-and-custom-metrics)
[the walkthrough for using external metrics](/docs/tasks/run-application/horizontal-pod-autoscale-walkthrough/#autoscaling-on-metrics-not-related-to-kubernetes-objects)。
关于如何使用它们的示例,请参考
[使用自定义指标的教程](/zh/docs/tasks/run-application/horizontal-pod-autoscale-walkthrough/#autoscaling-on-multiple-metrics-and-custom-metrics)
和[使用外部指标的教程](/zh/docs/tasks/run-application/horizontal-pod-autoscale-walkthrough/#autoscaling-on-metrics-not-related-to-kubernetes-objects)。
## {{% heading "whatsnext" %}}
<!--
* Design documentation: [Horizontal Pod Autoscaling](https://git.k8s.io/community/contributors/design-proposals/autoscaling/horizontal-pod-autoscaler.md).
* kubectl autoscale command: [kubectl autoscale](/docs/reference/generated/kubectl/kubectl-commands/#autoscale).
* Usage example of [Horizontal Pod Autoscaler](/docs/tasks/run-application/horizontal-pod-autoscale-walkthrough/).
-->
* 设计文档:[Horizontal Pod Autoscaling](https://git.k8s.io/community/contributors/design-proposals/autoscaling/horizontal-pod-autoscaler.md).
* kubectl 自动缩放命令: [kubectl autoscale](/docs/reference/generated/kubectl/kubectl-commands/#autoscale).
* 使用示例:[Horizontal Pod Autoscaler](/docs/tasks/run-application/horizontal-pod-autoscale-walkthrough/).
* 设计文档:[Horizontal Pod Autoscaling](https://git.k8s.io/community/contributors/design-proposals/autoscaling/horizontal-pod-autoscaler.md)
* `kubectl autoscale` 命令: [kubectl autoscale](/docs/reference/generated/kubectl/kubectl-commands/#autoscale).
* 使用示例:[Horizontal Pod Autoscaler](/zh/docs/tasks/run-application/horizontal-pod-autoscale-walkthrough/).