配置多维 Pod 自动扩缩

多维 Pod 自动扩缩 (MPA) 可让您选择多种方法来扩缩集群。通过多维度 Pod 自动扩缩,您可以根据 CPU 进行横向扩缩,同时基于内存进行纵向扩缩

MultidimPodAutoscaler 对象会修改内存请求并添加副本,以使每个副本的平均 CPU 利用率与您的目标利用率相匹配。

前提条件

1.19.4-gke.1700 版或更高版本的集群支持 MPA。

使用多维 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: k8s.gcr.io/hpa-example
        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 适用于整个自动缩放应用的限制条件。
ContainerControlledResources []ResourceName 应由自动扩缩器控制的容器资源。memory 是唯一支持的值。
Container []ContainerConstraints 适用于 Pod 容器的限制条件。

ResourceConstraints

ResourceConstraints 定义了您可以为容器、Pod 或应用分配的最低和最大资源数量。

字段 类型 说明
MinAllowed ResourceList 您可分配的资源量下限。如果未提供,则使用 0。
MaxAllowed []ResourceName 您可以分配的资源数上限。如果未提供,则表示资源数量没有上限。
Requests *ResourceConstraints 应用可请求的资源数量的上限和下限,所有 Pod 总数之和。

ContainerConstraints

ContainerConstraints 是适用于 Pod 容器的限制条件。

字段 类型 说明
Name String 为其指定限制条件的容器的名称。您还可以使用 * 为 Pod 中的所有容器指定限制条件。
Requests *ResourceConstraints 指定容器可以请求的资源数量的下限和上限。

UpdateMode

使用 UpdateMode 控制计算建议的应用方式。

字段 类型 说明
AutoUpdates UpdateMode = "Auto" AutoUpdate 意味着您可以随时应用所有自动扩缩器建议。

MultidimPolicy

字段 类型 说明
Update UpdateMode 定义如何应用建议。空值验证失败。

MultidimPodAutoscalerStatus

MultidimPodAutoscalerStatus 描述自动调节器的运行时状态。

字段 类型 说明
RecommendedPodResources *RecommendedPodResources 自动扩缩器为控制 Pod 建议的最新计算资源数量。
CurrentReplicas Int32 CurrentReplicas 是此自动扩缩器管理的 Pod 副本的当前数量,由自动调节器最后看到。
DesiredReplicas Int32 DesiredReplicas 是此自动扩缩器管理的 Pod 副本的所需数量,由自动扩缩器最终计算。
Conditions []metav1.Condition Conditions 是此自动扩缩器扩缩其目标所需的一组条件,并指明是否满足这些条件。

后续步骤