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% 时,将触发自动伸缩操作。