Kubernetes基于Metrics Server的HPA

作者: ygqygq2 分类: 云计算/虚拟化,系统/运维 发布时间: 2018-10-08 17:47

Kubernetes基于Metrics Server的HPA

1. 环境说明和相关介绍

我的kubernetes环境:

  • kubeadm安装的kubernetes1.11

Horizontal Pod Autoscaler(HPA,Pod水平自动伸缩),根据资源利用率或者自定义指标自动调整replication controller、deployment 或 replica set,实现部署的自动扩展和缩减,让部署的规模接近于实际服务的负载。HPA不适于无法缩放的对象,例如DaemonSet。

Kubernetes从1.8版本开始,CPU、内存等资源的metrics信息可以通过 Metrics API来获取,用户可以直接获取这些metrics信息(例如通过执行kubect top命令),HPA使用这些metics信息来实现动态伸缩。本文介绍Kubernetes集群基于metric server的HPA。在开始之前我们需要了解一下Metrics API和Metrics Server。

Metrics API
1. 通过Metrics API我们可以获取到指定node或者pod的当前资源使用情况,API本身不存储任何信息,所以我们不可能通过API来获取资源的历史使用情况。
2. Metrics API的获取路径位于:/apis/metrics.k8s.io/
3. 获取Metrics API的前提条件是metrics server要在K8S集群中成功部署
4. 更多的metrics资料请参考:https://github.com/kubernetes/metrics

Metrics server
1. Metrics server是Kubernetes集群资源使用情况的聚合器
2. 从1.8版本开始,Metrics server默认可以通过kube-up.sh脚本以deployment的方式进行部署,也可以通过yaml文件的方式进行部署
3. Metrics server收集所有node节点的metrics信息
4. Kubernetes从1.7版本,通过 Kubernetes aggregator注册Metrics Server在主API server

2. 部署metrics-server

由于官方已经弃用heapster,现metrics-server作为其替代方案。

当前最新版本为v0.3.1。部署yaml文件链接:deploy

metrics-server-deployment.yaml中,
image可使用:ygqygq2/metrics-server:v0.3.1
另还需添加2个参数:

部署成功后,达到如下结果,则为正常:

3. 测试HPA

  1. 创建一个名为nginxtest的deployment;
  2. 创建一个关联资源nginxtest的HPA,最小的pod副本数为1,最大为10。HPA会根据设定的cpu使用率(10%)动态的增加或者减少pod数量,此地方用于测试,所以设定的伸缩阈值会比较小;
  3. 使用curl方式加大、减小nginx的负载;

我们来创建一个busybox,并且循环访问上面创建的服务。

查看hpa状态,同时我们查看相关资源nginxtest的副本数量,副本数量在变化。CPU资源利用率也在变化,最后趋于平稳。

我们关掉刚才的busbox并等待一段时间。可以看到副本数量变回为1。

4. 小结

HPA能对服务的容器数量做自动伸缩,对于服务的稳定性是一个很好的提升,但在生产中应用较少,原因是因为不太容易衡量业务负载是否正常,影响服务稳定性的因素非常多。

参考资料:
[1] https://kubernetes.io/docs/tasks/run-application/horizontal-pod-autoscale-walkthrough/
[2] https://cloud.tencent.com/developer/article/1005406

如果觉得我的文章对您有用,请随意打赏。您的支持将鼓励我继续创作!

发表评论

电子邮件地址不会被公开。 必填项已用*标注

This site uses Akismet to reduce spam. Learn how your comment data is processed.