Kubernetes 动态伸缩
1. 概述
1.1 Metrics-server
从 Kubernetes 1.8 开始,资源使用指标(如容器 CPU 和内存使用率)通过 Metrics API 在 Kubernetes 中获取, metrics-server 替代了heapster。
Metrics 主要实现了以下功能:
- Metrics Server 实现了Resource Metrics API
- Metrics Server 是集群范围资源使用数据的聚合器。
- Metrics Server 从每个节点上的 Kubelet 公开的 Summary API 中采集指标信息。

通过在主 API server 中注册的 Metrics Server Kubernetes 聚合器 来采集指标信息。
1.2 动态伸缩
kubernets 的动态伸缩是指以负载和资源开销为参考进行服务副本的自动增加和缩减以降低负荷。
kubernetes的动态伸缩有两个维度:
- 以节点的指标信息触发
- 以pod的指标信息触发
如下图
kubetnetes的动态伸缩触发数据来源是指标聚合器(Metricsaggregator),其数据来源是metrics-server从cadvisorKubelete处收集到的数据,或者是从普罗米休斯处收集来的数据。其将两者的数据聚合起来对kubernetes的动态伸缩(Hpa)功能提供数据源支持。
动态伸缩根据聚合器的数据进行触发,通过改变Deployment实例来增减pod实例,降低负荷。

2 部署
下面详细说明hpa的部署实例,数据源采用metrics-server
2.1 Kubernetes配置
- 为/etc/kubernetes/controller-manager增加启动项:
--horizontal-pod-autoscaler-use-rest-clients=true
systemctl restart kube-controller-manager
- 为/usr/lib/systemd/system/kube-apiserver.service增加启动项(也可以修改/etc/kubernetes/apiserver文件增加):
--requestheader-client-ca-file=/etc/kubernetes/ssl/ca.pem \
--requestheader-allowed-names= \
--requestheader-extra-headers-prefix=X-Remote-Extra- \
--requestheader-group-headers=X-Remote-Group \
--requestheader-username-headers=X-Remote-User \
--proxy-client-cert-file=/etc/kubernetes/ssl/kubelet-client.crt \
--proxy-client-key-file=/etc/kubernetes/ssl/kubelet-client.key \
--enable-aggregator-routing=true
systemctl daemon-reload
systemctl restart kube-apiserver
2.1 安装metrics-server
- 创建:
kubectl create -f metrics-server.yml
- 测试
创建测试程序
kubectl create -f podinfo-dep.yaml
kubectl create -f podinfo-hpa.yaml
kubectl create -f podinfo-svc.yaml
kubectl create -f podinfo-ingress.yaml
3. 源码
相关的源代码在xiyanxiyan10