多维 Pod 自动扩缩可让您选择多种方法来扩缩集群。通过多维度 Pod 自动扩缩,您可以根据 CPU 进行横向扩缩,同时基于内存进行纵向扩缩。
MultidimPodAutoscaler
对象会修改内存请求并添加副本,以使每个副本的平均 CPU 利用率与您的目标利用率相匹配。
前提条件
- GKE 集群版本 1.19.4-gke.1700 或更高版本。
- 对于 Standard 集群,请为集群启用 Pod 纵向自动扩缩。Autopilot 集群已启用 Pod 纵向自动扩缩。
使用多维 Pod 自动扩缩
以下示例展示了如何创建 Deployment 和 MultidimPodAutoscaler
对象以自动扩缩 Deployment。
创建 Deployment
在创建 MultidimPodAutoscaler
之前,您必须先创建其监控的工作负载。以下文件 php-apache.yaml
为 CPU 请求指定值:
apiVersion: apps/v1
kind: Deployment
metadata:
name: php-apache
spec:
selector:
matchLabels:
run: php-apache
replicas: 1
template:
metadata:
labels:
run: php-apache
spec:
containers:
- name: php-apache
image: us-docker.pkg.dev/google-samples/containers/gke/hello-app:1.0
ports:
- containerPort: 80
resources:
# Since MPA does not specify CPU requests, you must specify a request in
# the Deployment
limits:
cpu: 500m
requests:
cpu: 200m
如需创建 Deployment,请应用 php-apache.yaml
清单:
kubectl apply -f php-apache.yaml
创建 MultidimPodAutoscaler
创建 Deployment 后,您可以创建一个 MultidimPodAutoscaler
对象。以下 MultidimPodAutoscaler
清单会根据您指定的值自动调整副本和内存请求的数量。
如需详细了解此示例中的字段,请参阅 API 参考部分。
apiVersion: autoscaling.gke.io/v1beta1
kind: MultidimPodAutoscaler
metadata:
name: php-apache-autoscaler
spec:
scaleTargetRef:
apiVersion: apps/v1
kind: Deployment
name: php-apache
goals:
metrics:
- type: Resource
resource:
# Define the target CPU utilization request here
name: cpu
target:
type: Utilization
averageUtilization: 60
constraints:
global:
minReplicas: 1
maxReplicas: 5
containerControlledResources: [ memory ]
container:
- name: '*'
# Define boundaries for the memory request here
requests:
minAllowed:
memory: 1Gi
maxAllowed:
memory: 2Gi
policy:
updateMode: Auto
如需创建 MultidimPodAutoscaler
,请应用 php-apache-autoscaler.yaml
清单:
kubectl apply -f php-apache-autoscaler.yaml
查看 MultidimPodAutoscaler
使用 kubectl get
命令查看所有 MultidimPodAutoscaler
对象:
kubectl get mpa
删除 MultidimPodAutoscaler
使用 kubectl delete
命令删除 MultidimPodAutoscaler
对象:
kubectl delete -f php-apache-autoscaler.yaml
API 参考文档
以下各部分介绍了您可以添加到 MultidimPodAutoscaler
对象的可能字段。
所有字段均可用于 apiVersion
v1beta1 autoscaling.gke.io
。
MultidimPodAutoscaler
MultidimPodAutoscaler
是多维 Pod 自动扩缩器的配置,它会根据历史资源和实时资源利用率自动管理 Pod 资源及其数量。
字段 | 类型 | 说明 |
---|---|---|
metadata |
ObjectMeta |
标准对象元数据。 |
spec |
MultidimPodAutoscalerSpec |
多维 Pod 自动扩缩器的预期行为。 |
status |
MultidimPodAutoscalerStatus |
最近观察到的多维 Pod 自动扩缩器的状态。 |
MultidimPodAutoscalerSpec
MultidimPodAutoscalerSpec
是定义自动扩缩器行为的规范。
字段 | 类型 | 说明 |
---|---|---|
ScaleTargetRef |
autoscaling.CrossVersionObjectReference |
指向要扩缩的目标资源(使用 Scale 子资源)的引用。 |
Goals |
*MultidimGoals |
多维 Pod 自动扩缩器尝试实现和维护的目标。 |
Constraints |
*MultidimConstraints |
介绍自动扩缩的限制。限制条件超出目标。如果限制条件阻止了某个目标,则无法实现该目标。例如,即使副本可能需要扩展,达到最大副本数也会阻止进一步扩展。 |
Policy |
*MultidimPolicy |
政策允许您指定如何应用建议。 |
MultidimGoals
MultidimGoals
是多维 Pod 自动扩缩器尝试实现的目标。
字段 | 类型 | 说明 |
---|---|---|
Metrics |
[]MetricSpec |
包含指标列表以及所需的值。多维 Pod 自动扩缩器尝试保持接近所需值。 |
MultidimConstraints
MultidimConstraints
说明了自动扩缩的限制。限制条件优先于目标。
字段 | 类型 | 说明 |
---|---|---|
Global |
*GlobalConstraints |
适用于整个自动缩放应用的限制条件。 |
Pod |
*PodConstraints |
适用于目标应用中的单个 Pod 的限制条件。 |
ContainerControlledResources |
[]ResourceName |
应由自动扩缩器控制的容器资源。memory 是唯一支持的值。 |
Container |
[]ContainerConstraints |
适用于 Pod 容器的限制条件。 |
ResourceConstraints
ResourceConstraints
定义了您可以为容器、Pod 或应用分配的最低和最大资源数量。
字段 | 类型 | 说明 |
---|---|---|
MinAllowed |
ResourceList |
您可分配的资源量下限。如果未提供,则使用 0。 |
MaxAllowed |
ResourceList |
您可以分配的资源数上限。如果未提供,则表示资源数量没有上限。 |
GlobalConstraints
GlobalConstraints
定义完全适用于应用的限制条件。这些限制条件包括副本数或资源总数。
字段 | 类型 | 说明 |
---|---|---|
MinReplicas |
*Int32 |
应用可以拥有的副本数下限。如果未提供,则系统会使用 1。 |
MaxReplicas |
*Int32 |
应用可以拥有的副本数上限。如果未提供,则表示副本数没有上限。 |
Requests |
*ResourceConstraints |
应用可请求的资源数下限和上限,所有 Pod 总和。 |
PodConstraints
PodConstraints
定义单个 Pod 可以请求的资源数下限和上限,所有属于该 Pod 的容器的总和。
字段 | 类型 | 说明 |
---|---|---|
Requests |
*ResourceConstraints |
单个 Pod 可以请求的资源数下限和上限,所有属于该 Pod 的容器的总和。 |
ContainerConstraints
ContainerConstraints
是适用于 Pod 容器的限制条件。
字段 | 类型 | 说明 |
---|---|---|
Name |
String |
为其指定限制条件的容器的名称。您还可以使用 * 为 Pod 中的所有容器指定限制条件。 |
Requests |
*ResourceConstraints |
指定容器可以请求的资源数量的下限和上限。 |
UpdateMode
使用 UpdateMode
控制计算建议的应用方式。
字段 | 类型 | 说明 |
---|---|---|
AutoUpdates |
UpdateMode = "Auto" |
AutoUpdate 意味着您可以随时应用所有自动扩缩器建议。 |
AutoUpdates |
UpdateMode = "Off" |
AutoUpdates 意味着自动扩缩器建议完全不会应用。 |
MultidimPolicy
字段 | 类型 | 说明 |
---|---|---|
Update |
UpdateMode |
定义如何应用建议。空值验证失败。 |
MultidimPodAutoscalerStatus
MultidimPodAutoscalerStatus
描述自动调节器的运行时状态。
字段 | 类型 | 说明 |
---|---|---|
ObservedGeneration |
*Int64 |
此自动扩缩器最近观察到的世代。 |
RecommendedPodResources |
*RecommendedPodResources |
自动扩缩器为控制 Pod 建议的最新计算资源数量。 |
CurrentReplicas |
Int32 |
CurrentReplicas 是此自动扩缩器管理的 Pod 副本的当前数量,由自动调节器最后看到。 |
DesiredReplicas |
Int32 |
DesiredReplicas 是此自动扩缩器管理的 Pod 副本的所需数量,由自动扩缩器最终计算。 |
CurrentMetrics |
[]autoscaling.MetricStatus |
此自动扩缩器使用的指标的上次读取状态。 |
Conditions |
[]metav1.Condition |
Conditions 是此自动扩缩器扩缩其目标所需的一组条件,并指明是否满足这些条件。 |
后续步骤
- 详细了解如何配置 Pod 横向自动扩缩。
- 详细了解如何配置 Pod 纵向自动扩缩。