使用kubectl-sae工具管理弹性规则HPA

SAE应用的弹性规则对应于Kubernetes的HPA(HorizontalPodAutoscaler)资源类型。本文介绍如何使用kubectl-sae工具管理弹性规则,并提供相关的K8s YAML配置文件示例。

前提条件

已安装kubectl-sae工具,并配置AccessKey ID、AccessKey Secret、应用部署地域,详见安装与配置kubectl-sae工具

管理弹性规则

kubectl-sae工具支持创建、查看、更新、删除弹性规则。

为应用创建弹性规则

  1. 编写文件名为hpa.yaml的文件,其中包含弹性规则的配置信息。配置文件的示例如下,各配置项的详细信息请参考K8s YAML配置项说明

    apiVersion: autoscaling/v2
    kind: HorizontalPodAutoscaler
    metadata:
      annotations:
        sae.aliyun.com/alias: test-app # 弹性策略昵称,选填
        sae.aliyun.com/enabled: "true" # 是否启用该弹性策略,选填
      name: metric-test-app # 固定格式:metric-${应用名}
      namespace: default
    spec:
      behavior: # 选填
        scaleDown: # 缩容配置
          policies:
          - periodSeconds: 15
            type: Pods
            value: 10
          stabilizationWindowSeconds: 200
        scaleUp: # 扩容配置
          policies:
          - periodSeconds: 15
            type: Pods
            value: 5
          stabilizationWindowSeconds: 100
      maxReplicas: 8
      metrics:
      - resource:
          name: cpu
          target:
            averageUtilization: 80
            type: Utilization
        type: Resource
      - resource:
          name: memory
          target:
            averageUtilization: 80
            type: Utilization
        type: Resource
      - pods:
          metric:
            name: tcpActiveConn
          target:
            averageValue: "100"
            type: AverageValue
        type: Pods
      - pods:
          metric:
            name: tcpTotalConn
          target:
            averageValue: "100"
            type: AverageValue
        type: Pods
      - external:
          metric:
            name: qps
          target:
            averageValue: "100"
            type: AverageValue
        type: External
      - external:
          metric:
            name: rt
          target:
            averageValue: 100k
            type: AverageValue
        type: External
      minReplicas: 1
      scaleTargetRef:
        apiVersion: apps/v1
        kind: Deployment
        name: test-app # 固定格式:${应用名}
  2. hpa.yaml文件所在路径执行以下命令,实现为应用创建弹性规则。

    kubectl-sae apply -f hpa.yaml

查看弹性规则列表

kubectl-sae get hpa -l sae.aliyun.com/app-name=${deployment-name} -n ${namespace}
# ${deployment-name}为应用的名称,如果不通过-l参数指定应用名称,则默认显示范围内所有应用绑定的HPA列表
# ${namespace}为命名空间ID,如果不通过-n参数指定命名空间,则默认使用default命名空间

输出结果字段说明如下:

字段

说明

NAME

弹性规则名称,格式为metric-${应用名}

REFERENCEKIND

关联类型。

REFERENCENAME

关联应用名。

MINPODS

最小实例数。

MAXPODS

最大实例数。

CURRENTREPLICAS

当前实例数。

DESIREDREPLICAS

期望实例数。

ENABLED

弹性规则是否启用。

查看弹性规则详情

kubectl-sae工具支持使用getdescribe命令查看弹性规则详情。返回结果中包含弹性规则的配置项,详情请参考K8s YAML配置项说明

通过get命令查看弹性规则详情

kubectl-sae get hpa ${hpa-name} -o {yaml | json} -n ${namespace}
# ${hpa-name}为HPA名称
# -o参数指定返回结果的格式
# ${namespace}为命名空间ID,如果不通过-n参数指定命名空间,则默认使用default命名空间

通过describe命令查看弹性规则详情

kubectl-sae describe hpa ${hpa-name} -n ${namespace}
# ${hpa-name}为HPA名称
# ${namespace}为命名空间ID,如果不通过-n参数指定命名空间,则默认使用default命名空间

更新弹性规则

kubectl-sae工具支持使用editapply命令更新弹性规则。

通过edit命令在线编辑弹性规则配置信息

  1. 执行以下命令,将会以YAML文件的形式打开指定弹性规则的配置信息。

    kubectl-sae edit hpa ${hpa-name} -n ${namespace}
    # ${hpa-name}为HPA名称
    # ${namespace}为命名空间ID,如果不通过-n参数指定命名空间,则默认使用default命名空间
  2. 在打开的YAML文件中按需修改配置信息,保存并关闭文件,等待配置信息变更完成。

通过apply命令实现按照YAML配置文件更新弹性规则

修改已有的弹性规则的配置文件hpa.yaml。在配置文件所在路径执行以下命令,实现弹性规则配置信息的变更。

kubectl-sae apply -f hpa.yaml

删除弹性规则

执行以下命令,解绑指定的弹性规则。

kubectl-sae delete hpa ${hpa-name} -n ${namespace}
# ${hpa-name}为HPA名称
# ${namespace}为命名空间ID,如果不通过-n参数指定命名空间,则默认使用default命名空间

K8s YAML配置项说明

SAE应用的弹性规则对应于Kubernetes的HPA(HorizontalPodAutoscaler)资源类型。相关的K8s YAML配置项说明详见下表。

配置项

说明

metadata.name

弹性规则名称。使用固定格式metric-${应用名}

创建时必须指定此配置项。
更新时不支持此配置项。

metadata.namespace

弹性规则所在的命名空间。

更新时不支持此配置项。

metadata.annotations:

sae.aliyun.com/alias

弹性规则昵称。

更新时不支持此配置项。

metadata.annotations:

sae.aliyun.com/enabled

弹性规则是否启用。取值如下:

  • "true":启用

  • "false":不启用

metadata.uid

弹性规则名称。使用固定格式metric-${应用ID}

更新时不支持此配置项。

metadata.labels

使用固定格式如下:

  labels:
    sae.aliyun.com/app-name: ${应用名}
更新时不支持此配置项。

spec.behavior.scaleDown.policies[i]

如果需要配置HPA缩容步长,示例如下:

scaleDown:
  policies:
  - periodSeconds: 15 # 固定值
    type: Pods # 固定值
    value: 4 # HPA缩容步长
创建时此配置项为可选项。

spec.behavior.scaleUp.policies[i]

如果需要配置HPA扩容步长,示例如下:

scaleUp:
  policies:
  - periodSeconds: 15 # 固定值
    type: Pods # 固定值
    value: 4 # HPA扩容步长
创建时此配置项为可选项。

spec.maxReplicas

最大实例数。

spec.minReplicas

最小实例数。

spec.scaleTargetRef

使用固定格式如下:

  scaleTargetRef:
    apiVersion: apps/v1
    kind: Deployment
    name: test-app # 应用名
创建时必须指定此配置项。
更新时不支持此配置项。