Kubernetes Pod水平自动伸缩 HPA

HPA简介

HAP,全称 Horizontal Pod Autoscaler, 可以基于 CPU 利用率自动扩缩 ReplicationController、Deployment 和 ReplicaSet 中的 Pod 数量。 除了 CPU 利用率,也可以基于其他应程序提供的自定义度量指标来执行自动扩缩。

Pod 自动扩缩不适用于无法扩缩的对象,比如 DaemonSet。

Pod 水平自动扩缩特性由 Kubernetes API 资源和控制器实现。资源决定了控制器的行为。 控制器会周期性的调整副本控制器或 Deployment 中的副本数量,以使得 Pod 的平均 CPU 利用率与用户所设定的目标值匹配。

HPA 定期检查内存和 CPU 等指标,自动调整 Deployment 中的副本数;

实际生产中,广泛使用这四类指标: 1、Resource metrics - CPU核内存利用率指标 2、Pod metrics - 例如网络利用率和流量 3、Object metrics - 特定对象的指标,比如Ingress, 可以按每秒使用请求数来扩展容器 4、Custom metrics - 自定义监控,比如通过定义服务响应时间,当响应时间达到一定指标时自动扩容

metircs-server部署

wget https://github.com/kubernetes-sigs/metrics-server/releases/latest/download/high-availability-1.21+.yaml

vim high-availability-1.21+.yaml
......
143       containers:
144       - args:
145         - --cert-dir=/tmp
146         - --secure-port=4443
147         - --kubelet-preferred-address-types=InternalIP,ExternalIP,Hostname
148         - --kubelet-use-node-status-port
149         - --metric-resolution=15s
150         - --kubelet-insecure-tls 添加此行内容
151         image: registry.k8s.io/metrics-server/metrics-server:v0.6.4
......

kubectl apply -f high-availability-1.21+.yaml
kubectl top nodes

HPA演示示例

apiVersion: autoscaling/v2
kind: HorizontalPodAutoscaler
metadata:
  name: nginx-hpa
  namespace: default
spec:
  scaleTargetRef:
    apiVersion: apps/v1
    kind: Deployment
    name: nginx
  minReplicas: 1
  maxReplicas: 10
  metrics:
  - type: Resource
    resource:
      name: cpu
      target:
        type: Utilization
        averageUtilization: 50


关于每行命令行解释:
当然,以下是对您提供的 YAML 文件中每一行的解释:


apiVersion: autoscaling/v2

- `apiVersion` 表示所使用的 API 版本。在这个例子中,我们使用的是 `autoscaling/v2beta2` 版本,这是 Kubernetes 的 HorizontalPodAutoscaler 资源对象的版本。


kind: HorizontalPodAutoscaler

- `kind` 定义了这个资源对象的类型。在这里,它是 `HorizontalPodAutoscaler`。


metadata:
  name: nginx
  namespace: hpa

- `metadata` 包含与资源对象相关的元数据。在这个例子中,`name` 是资源对象的名字(这里是 "nginx"),而 `namespace` 指定了此资源所在的命名空间(这里是 "hpa")。


spec:
  scaleTargetRef:
    apiVersion: apps/v1
    kind: Deployment
    name: nginx

- `spec` 描述了要配置的具体细节。在这个部分,`scaleTargetRef` 指向我们要自动伸缩的目标资源。
  - `apiVersion`: 目标资源的 API 版本,这里是 `apps/v1`。
  - `kind`: 目标资源的类型,这里是 `Deployment`。
  - `name`: 目标资源的名字,这里是 "nginx"。


  minReplicas: 1
  maxReplicas: 10

- `minReplicas` 和 `maxReplicas` 定义了 Pod 的最小和最大副本数。在此例中,HPA 将确保至少有一个副本在运行,并且最多不会超过 10 个副本。


  metrics:
  - type: Resource
    resource:
      name: cpu
      target:
        type: Utilization
        averageUtilization: 50

- `metrics` 部分定义了用于触发自动伸缩操作的指标。在这个例子中,我们只有一个指标。
  - `- type: Resource`: 这里指定度量类型为资源度量。
  - `resource`: 定义了资源度量的详细信息。
    - `name: cpu`: 我们正在度量 CPU 使用率。
    - `target`: 设置目标值以触发自动伸缩。
      - `type: Utilization`: 目标类型是利用率。
      - `averageUtilization: 50`: 当平均 CPU 利用率达到或超过 50% 时,将触发自动伸缩操作。

results matching ""

    No results matching ""