Kubernetes入门 十、HPA 自动扩/缩容

概述

我们已经可以通过手动执行 kubectl scale 命令实现Pod的扩缩容,但是这显然不符合 Kubernetes 的定位目标–自动化和智能化。Kubernetes 期望可以通过监测Pod的使用情况,实现 Pod 数量的自动调整,于是就产生了 HPA 这种控制器。

HPA(Horizontal Pod Autoscaler) 可以获取每个 Pod 的利用率,然后和 HPA 中定义的指标进行对比,同时计算出需要伸缩的具体值,最后实现 Pod 的数量的调整。其实 HPA 和之前的 Deployment 一样,也属于一种 Kubernetes 资源对象,它通过追踪分析目标Pod的负载变化情况,来确定是否需要针对性的调整目标 Pod 的副本数。

通常用于 Deployment,不适用于无法扩/缩容的对象,如 DaemonSet

在这里插入图片描述

特点:

  • 控制管理器每隔30s(可以通过–horizontal-pod-autoscaler-sync-period修改)查询metrics的资源使用情况
  • 支持三种metrics类型
    • 预定义metrics(比如Pod的CPU)以利用率的方式计算
    • 自定义的Pod metrics,以原始值(raw value)的方式计算
    • 自定义的object metrics
  • 支持两种metrics查询方式:Heapster和自定义的REST API
  • 支持多metrics

安装metrics-server

metrics-server是用来监控k8s资源指标的组件,需要额外安装。

  1. 下载 metrics-server 组件配置文件:
wget https://github.com/kubernetes-sigs/metrics-server/releases/latest/download/components.yaml -O metrics-server-components.yaml
  1. 修改镜像地址为国内的地址
sed -i 's/k8s.gcr.io\/metrics-server/registry.cn-hangzhou.aliyuncs.com\/google_containers/g' metrics-server-components.yaml
  1. 修改容器的 tls 配置,不验证 tls

在 containers 的 args 参数中增加 --kubelet-insecure-tls 参数

  1. 安装组件
kubectl apply -f metrics-server-components.yaml

查看下安装是否成功:

kubectl get po --all-namespaces | grep metrics
# 结果如下
kube-system   metrics-server-7c6df44c98-fmm62          1/1     Running   0              65s

成功安装到了kube-system 下。

使用HPA

实现 cpu 或内存的监控,首先有个前提条件是该对象必须配置了 resources.requests.cpuresources.requests.memory 才可以,可以配置当 cpu/memory 达到上述配置的百分比后进行扩容或缩容。

新建nginx-hpa.yaml,添加资源配置,文件如下:

apiVersion: apps/v1  # deployment api 版本
kind: Deployment  # 资源类型为deployment
metadata:  # 元信息
  labels:  # 标签
    app: nginx-hpa
  name: nginx-hpa # deployment的名字
  namespace: default  # 所在命名空间
spec:
  replicas: 3  # 期望副本数
  revisionHistoryLimit: 10  # 进行滚动更新后,保留的历史版本数
  selector:  # 选择器,用于找到匹配的RS,管理指定标签的Rs
    matchLabels:  # 按照标签匹配
      app: nginx-hpa  # 匹配的标签
  strategy:  # 更新策略
    rollingUpdate:  # 滚动更新配置
      maxSurge: 25%  # 进行滚动更新时,更新的个数超过期望副本数的比例
      maxUnavailable: 25%  # 进行滚动更新时,最大不可用更新比例,也就是更新不成功最多能有多少个
    type: RollingUpdate  # 更新策略采用滚动更新
  template:  # pod模板
    metadata:  # pod的元信息
      labels:  # pod的标签
        app: nginx-hpa
    spec:  # pod的描述信息
      containers: # pod的描述信息
      - image: nginx:1.7.9   # pod使用镜像
        imagePullPolicy: IfNotPresent   # 镜像拉取策略
        name: nginx  # 容器名称
        resources:
          limits:
            cpu: 200m
            memory: 128Mi
          requests:
            cpu: 100m
            memory: 128Mi
      restartPolicy: Always  # 重启策略
      terminationGracePeriodSeconds: 30  # 容器删除等待时间

部署一下:

kubectl apply -f nginx-hpa.yaml
# deployment.apps/nginx-hpa created

查看下po:

kubectl get po
# 3个pod如下
NAME                         READY   STATUS    RESTARTS   AGE
nginx-hpa-5465c4859b-85jtv   1/1     Running   0          41s
nginx-hpa-5465c4859b-crlr7   1/1     Running   0          41s
nginx-hpa-5465c4859b-k7h64   1/1     Running   0          41s

接着可以使用top命令查看资源使用情况:

kubectl top po
# 3个pod的cpu和MEMORY使用情况如下
NAME                         CPU(cores)   MEMORY(bytes)
nginx-hpa-5465c4859b-85jtv   0m           7Mi
nginx-hpa-5465c4859b-crlr7   0m           8Mi
nginx-hpa-5465c4859b-k7h64   0m           14Mi

然后需要创建出一个HPA才能实现自动扩容缩容。

使用如下命令创建一个HPA:

kubectl autoscale deploy nginx-hpa --cpu-percent=20 --min=2 --max=5
# --cpu-percent=20即cpu使用率超过20%进行扩容
# 最少有2个副本,最多扩容到5个
# 注意:如果初始副本数少于2个,那么一旦HPA部署完成,就会把pod扩容到2个

查看HPA:

kubectl get hpa
# 结果如下
NAME        REFERENCE              TARGETS         MINPODS   MAXPODS   REPLICAS   AGE
nginx-hpa   Deployment/nginx-hpa   <unknown>/20%   2         5         0          19s

可以看下TARGETS,前面unknown表示还没有占用,后面的20% 标识目标是20%就扩容。

可以通过一定手段,是cpu使用率达到20% ,这样就会自动扩容,这里不在演示。

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
Pod 的自动缩容是通过 Kubernetes 中的 Horizontal Pod Autoscaler (HPA) 实现的。HPA 可以根据 Pod 的 CPU 使用率或自定义指标来自动调整副本数量,以满足应用程序的负载需求。以下是配置 HPA 的步骤: 1. 首先,确保你的集群已经启用了自动缩容功能。 2. 创建一个 Deployment 或 ReplicaSet,它将成为 HPA 的目标对象。例如,创建一个名为 my-app 的 Deployment: ``` kubectl create deployment my-app --image=my-image ``` 3. 创建一个 HPA 对象,并指定目标对象的名称和资源指标。例如,设置 CPU 使用率的目标为 50%: ``` kubectl autoscale deployment my-app --cpu-percent=50 --min=2 --max=5 ``` 上述命令将创建一个 HPA 对象,并将 my-app Deployment 的副本数量保持在 2 到 5 之间,以使 CPU 使用率保持在 50%。 4. 验证 HPA 是否生效。可以使用以下命令检查 HPA 的状态: ``` kubectl get hpa ``` 如果一切正常,你应该看到 HPA 对象的相关信息,包括当前副本数量、目标指标和目标使用率。 5. 测试自动缩容。可以通过模拟负载或增加负载来测试 HPA自动缩容功能。当 Pod 的资源使用率达到或超过 HPA 设置的目标使用率时,HPA自动增加 Pod 的副本数量。 请注意,HPA 的配置可以根据你的需求进行调整,例如,你可以使用自定义指标、设置副本数量的最小和最大值等。详细的配置选项可以参考 Kubernetes 官方文档。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Ethan-running

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值