k8s水平扩缩容

这篇文章的内容其实是很早以前就会一个k8s 资源,但是最近又用到了,就做个笔记。

关于水平扩容和缩容不在这里做解释,有兴趣看这篇文章的人应该都已经知道了。
最好的教程其实还是官网,这里放上相关的链接:

HPA配置方法

在k8s中配置HPA有两种方式:

  1. 通过命令行的方式直接创建,如下,
    1
    kubectl autoscale deployment <deployment-name> --cpu-percent=75 --min=l --max=5
  2. 通过yaml配置文件
    把详细的配置写在yaml文件中,通过kubectl apply来创建hpa。

比较推荐第二种方法,尤其是在生产环境中。如果使用第一种方法,过了一段时间之后可能就不知道曾经创建过这么个东西,或者及时记不清具体的细节了;第二种方法可以把yaml文件通过git存储,并且通过一些方法(比如:PR触发CICD)来始终保持repo中的yaml文件和生产环境保持一致。

HPA配置说明

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
apiVersion: autoscaling/v2beta2
kind: HorizontalPodAutoscaler
metadata:
  name: <hpa-name>
spec:
  scaleTargetRef:
    apiVersion: apps/v1
# 这里选择Deployment资源作为展示,但是可以支持
#  ReplicationController、Deployment、ReplicaSet 和 StatefulSet 这些类型
    kind: Deployment
    name: <打算进行自动扩缩配置的资源的名字>
  # 定义最小和最大副本数量
minReplicas: 1
  maxReplicas: 4
  # 针对多种资源进行监控来决定是否进行扩容
metrics:
  - type: Resource
    resource:
      name: cpu
      target:
        type: Utilization
        averageUtilization: 75
  - type: Resource
    resource:
      name: memory
      target:
        type: Utilization
        averageUtilization: 75

配置HPA的依赖

在上面的配置文件中可以看到我设置的两个指标是Pods CPU和Memory的利用率,也就意味着k8s要提供个接口来采集这些信息, 也就是metric api, 不过这个是不是k8s默认部署的,需要自己部署,具体的部署过程,参见官网的介绍。