Kubernetes弹性伸缩之水平扩缩容HPA

目录

HPA工作原理

使用HPA前提条件

启用Kubernetes API聚合层

安装metrics-server

HPA使用方法

HPA冷却周期


 

        Kubernetes的Horizontal Pod Autoscaler(HPA)是一种自动化的机制,用于根据CPU使用率或其他自定义指标自动调整Pod的数量。HPA旨在优化应用的资源使用,提高可用性和性能,尤其在负载波动时。但HPA不适用于无法缩放的对象,如DaemonSet

HPA工作原理

        在Kubernetes环境中,Metrics Server负责持续地收集各个Pod副本的性能指标。利用这些指标数据,HPA(Horizontal Pod Autoscaler)控制器通过聚合API接口访问Metrics Server,按照预设的扩缩容规则进行分析计算,以确定目标的Pod副本数。若计算得出的目标副本数与当前运行的副本数存在差异,HPA控制器便会向对应的Deployment控制器发送scale请求,动态调整Pod副本的数量,以此实现应用的自动扩缩容。

使用HPA前提条件

  • 启用Kubernetes API聚合层:自Kubernetes 1.7版本起,引入了API聚合层(API Aggregation Layer),这一新特性使得第三方应用能够通过注册到kube-apiserver,便捷地利用API Server的HTTP URL访问和操作其新增的API。这一机制的实现,得益于在kube-apiserver服务中集成的API聚合层,它负责将针对扩展API的访问请求高效转发至相应的用户定义服务。
  • 相应的API已注册:
    • 资源指标(CPU使用率、内存使用率):使用metrics.k8s.io API,一般由metrics-server提供,因此需要提前部署好metrics-server服务
    • 自定义指标(QPS等):使用custom.metrics.k8s.io API,由相关适配器(Adapter)服务提供。

启用Kubernetes API聚合层

  • kubeadm部署默认启动API聚合层
  • 二进制部署启动API聚合层

        二进制部署需要在kubeAPIServer中添加启动参数,增加以下配置

# vi /opt/kubernetes/cfg/kube-apiserver.conf ... 
--requestheader-client-ca-file=/opt/kubernetes/ssl/ca.pem \  #根证书
--proxy-client-cert-file=/opt/kubernetes/ssl/server.pem \    #实际就是kubeadm部署front-proxy证书
--proxy-client-key-file=/opt/kubernetes/ssl/server-key.pem \  #实际就是kubeadm部署的front-proxy证书
--requestheader-allowed-names=kubernetes \ 
--requestheader-extra-headers-prefix=X-Remote-Extra- \ 
--requestheader-group-headers=X-Remote-Group \ 
--requestheader-username-headers=X-Remote-User \ 
--enable-aggregator-routing=true \

安装metrics-server

Metrics Server是一个数据聚合器,从kubelet收集资源指标,并通 过Metrics API在Kubernetes apiserver暴露,以供HPA使用。

项目地址

https://github.com/kubernetes-sigs/metrics-server/releases/download/<version>/components.yaml

1、编辑修改components.yaml中 metrics-server 的启动参数并部署yaml文件

#修改 metric server的args参数
- args:
  - --cert-dir=/tmp
  - --secure-port=4443
  - --kubelet-preferred-address-types=InternalIP		
  - --kubelet-use-node-status-port		
  - --metric-resolution=15s				
  - --kubelet-insecure-tls	#跳过 TLS 认证,否则会出现 x509 的认证问题,用于测试环境。

2、验证Metrics Server是否成功部署

kubectl get pods -n kube-system | grep metrics-server

3、测试Metrics Server是否工作正常

kubectl top nodes

HPA使用方法

1、创建HPA

定义HPA资源对象,并指定监控的Deployment或ReplicaSet,以及期望的目标指标(如CPU使用率)

HPA示例Yaml

  • minReplicasmaxReplicas分别定义了Pod的最小和最大副本数。
  • metrics字段指定了HPA监控的指标,这里是CPU使用率,目标设置为50%,这里50%的分母是Pod requests的值
apiVersion: autoscaling/v2
kind: HorizontalPodAutoscaler
metadata:
  name: example-app-hpa
  namespace: default
spec:
  scaleTargetRef:
    apiVersion: apps/v1
    kind: Deployment
    name: example-app-deployment
  minReplicas: 1
  maxReplicas: 10
  metrics:
  - type: Resource
    resource:
      name: cpu
      target:
        type: Utilization
        averageUtilization: 50

2、查看hpa

kubectl get hpa

HPA冷却周期

        在弹性伸缩策略中,考虑到评估指标的动态变化可能导致Pod副本数频繁波动,从而可能影响服务的稳定性,引入了冷却周期(Cooldown Period)的概念。这是为了防止在短时间内频繁扩缩容,进而避免潜在的流量损失。为此,在HPA(Horizontal Pod Autoscaler)的实现中,采取了以下默认控制措施:

  • --horizontal-pod-autoscaler-downscale-delay:在执行缩容操作之前,系统将在完成上一次操作后等待一段预设时间,默认为5分钟。这样做是为了确保系统稳定,避免因短时间内的指标波动而触发不必要的缩容。

  • --horizontal-pod-autoscaler-upscale-delay:与缩容相似,扩容操作也会在上一次操作完成后等待一段时间,默认为3分钟。这个冷却时间可以减少因指标短暂波动而导致的频繁扩容,从而保持资源利用的高效性和系统的平稳运行。

上述参数通过调节kube-controller-manager组件的启动参数来进行调整

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值