这篇文章的内容其实是很早以前就会一个k8s 资源,但是最近又用到了,就做个笔记。
关于水平扩容和缩容不在这里做解释,有兴趣看这篇文章的人应该都已经知道了。 最好的教程其实还是官网,这里放上相关的链接:
在k8s中配置HPA有两种方式:
通过命令行的方式直接创建,如下,
kubectl autoscale deployment <deployment-name> --cpu-percent=75 --min=l --max=5通过yaml配置文件 把详细的配置写在yaml文件中,通过kubectl apply来创建hpa。
比较推荐第二种方法,尤其是在生产环境中。如果使用第一种方法,过了一段时间之后可能就不知道曾经创建过这么个东西,或者及时记不清具体的细节了;第二种方法可以把yaml文件通过git存储,并且通过一些方法(比如:PR触发CICD)来始终保持repo中的yaml文件和生产环境保持一致。
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在上面的配置文件中可以看到我设置的两个指标是Pods CPU和Memory的利用率,也就意味着k8s要提供个接口来采集这些信息, 也就是metric api, 不过这个是不是k8s默认部署的,需要自己部署,具体的部署过程,参见官网的介绍。