多维 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 纵向自动扩缩。