Kubernetes有一个HPA(Horizontal Pod Autoscaler)的资源,可以实现基于CPU使用率的Pod自动伸缩的功能
注意从kubernetes1.11开始Heapster被废弃不在使用,metrics-server 替代了heapster
实现HPA首先需要部署metrics-server,一个集群级别的资源利用率数据的聚合器
部署metrics-server步骤:
首先进入GitHub上进到kubernetes项目下的cluster下的addons文件路径下,把其中的yaml下载下来
然后对其中几份yaml进行修改
metrics-server-deployment.yaml
- metrics-server的command中加上 - --kubelet-insecure-tls 表示不验证客户端的证书
- 注释掉端口10255,注释后会使用10250
- 因为某些不可描述的原因,可以将其中两个镜像更换为阿里云镜像
- addon-resizer的command中写上具体的cpu、memory、extra-memory的值
- 注释掉minClusterSize={{ metrics_server_min_cluster_size }}
resource-reader.yaml - resource属性添加- nodes/stats属性
执行 kubectl create -f 下载的yaml和修改后的yaml
等待资源创建后
查看api-versions,会看到多出了metrics.k8s.io/v1beta1
使用 kubectl top nodes 或 kubectl top pods 可查看节点或某节点内容器组的cpu资源和内存资源的使用情况
参考文档
部署metrics-server后,创建hpa
apiVersion: autoscaling/v1
kind: HorizontalPodAutoscaler
metadata:
name: ms-wechat # 名称
namespace: default #k8s命名空间
spec:
maxReplicas: 10 # 最大副本数
minReplicas: 1 # 最小副本数
scaleTargetRef:
apiVersion: apps/v1beta1
kind: Deployment
name: ms-wechat # 监控名为ms-wechat的Deployment
targetCPUUtilizationPercentage: 80 # cpu 阈值
或者
apiVersion: autoscaling/v2beta1
kind: HorizontalPodAutoscaler
metadata:
name: mynginx
spec:
scaleTargetRef:
apiVersion: apps/v1
kind: Deployment
name: mynginx
minReplicas: 2
maxReplicas: 10
metrics:
- type: Resource
resource:
name: cpu
targetAverageUtilization: 50
- type: Resource
resource:
name: memory
targetAverageValue: 50Mi
spec中嵌套的个字段的说明如下:
- minReplicas:自动伸缩pod副本数下限
- maxReplicas:自动伸缩可扩展至Pod副本数的上限
- scaleTargetRef:要伸缩的目标资源
- metrics:用于计算所需的Pod副本数量的指标列表
- external:用于应用非附属于任何对象的全局指标
- object:应用描述集群中某单一对象的特定指标
- pods:应用被弹性伸缩的pod对象的特定指标
- resource:应用资源指标,即当前被弹性伸缩的pod对象中容器的requests和limits中定义的指标。
- type:标识指标源的类型
设置hpa后查看hpa资源
kubectl get hpa
假如targets字段有显示unknown
原因
- 刚建立,等待一段时间再查看
- 需要自动伸缩的目标资源并没有进行资源限制
对目标资源加上
resources:
requests:
memory: "64Mi"
cpu: "250m"
limits:
memory: "128Mi"
cpu: "1"
再执行
kubectl apply -f 对应的资源yaml
然后重新查看
网友评论