Myluzh Blog

K8S 基于Metrics Server CPU指标的pod弹性伸缩(HPA)

发布时间: 2023-11-23 文章作者: myluzh 分类名称: Kubernetes 朗读文章


0x00 前置条件
1、开启K8S API聚合。关于API聚合:https://kubernetes.io/zh-cn/docs/concepts/extend-kubernetes/api-extension/apiserver-aggregation/
2、集群中安装Metrics Server。
0x01 开启Kubernetes API Aggregation
在 Kubernetes 1.7 版本引入了聚合层,允许第三方应用程序通过将自己注册到kube-apiserver上,仍然通过 API Server 的 HTTP URL 对新的 API 进行访问和操作。为了实现这个机制,Kubernetes 在 kube-apiserver 服务中引入了一个 API 聚合层(API Aggregation Layer),用于将扩展 API 的访问请求转发到用户服务的功能。
![](https://k8s-1252881505.cos.ap-beijing.myqcloud.com/k8s-2/aggergation.png)
当你访问 apis/metrics.k8s.io/v1beta1 的时候,实际上访问到的是一个叫作 kube-aggregator 的代理。而 kube-apiserver,正是这个代理的一个后端;而 Metrics Server,则是另一个后端 。通过这种方式,我们就可以很方便地扩展 Kubernetes 的 API 了。
如果你使用kubeadm或者RKE部署的集群,默认已开启。如果你使用二进制方式部署的话,需要在kube-APIServer中添加启动参数,增加以下配置:  在设置完成重启 kube-apiserver 服务,就启用 API 聚合功能了。  
vi /opt/kubernetes/cfg/kube-apiserver.conf
...
--requestheader-client-ca-file=/opt/kubernetes/ssl/ca.pem \
--proxy-client-cert-file=/opt/kubernetes/ssl/server.pem \
--proxy-client-key-file=/opt/kubernetes/ssl/server-key.pem \
--requestheader-allowed-names=kubernetes \
--requestheader-extra-headers-prefix=X-Remote-Extra- \
--requestheader-group-headers=X-Remote-Group \
--requestheader-username-headers=X-Remote-User \
--enable-aggregator-routing=true \
...
0x02 部署 Metrics Server
Metrics Server是一个集群范围的资源使用情况的数据聚合器。作为一个应用部署在集群中。Metric server从每个节点上Kubelet公开的摘要API收集指标。Metrics server通过Kubernetes聚合器注册在Master APIServer中。
如果你使用RKE部署的集群,默认就已经部署了Metrice Server有关Metrice Server部署以及兼容性矩阵,请访问:https://github.com/kubernetes-sigs/metrics-server
可通过Metrics API在Kubernetes中获得资源使用率指标,例如容器CPU和内存使用率。这些度量标准既可以由用户直接访问(例如,通过使用`kubectl top`命令),也可以由集群中的控制器(例如,Horizontal Pod Autoscaler)用于进行决策。
测试:
kubectl get --raw /apis/metrics.k8s.io/v1beta1/nodes
kubectl top node
0x03 autoscaling/v1(CPU指标实践)
# 创建hpa策略
[root@k8s-master01 hpa]# vi cpu-hpa.yaml
apiVersion: autoscaling/v1
kind: HorizontalPodAutoscaler
metadata:
 name: hellok8s-hpa
spec:
 maxReplicas: 10
 minReplicas: 1
 scaleTargetRef:
   apiVersion: apps/v1
   kind: Deployment
   name: hellok8s
 targetCPUUtilizationPercentage: 50

# apply
[root@k8s-master01 hpa]# kubectl apply -f cpu-hpa.yaml
horizontalpodautoscaler.autoscaling/hellok8s-hpa created
scaleTargetRef:表示当前要伸缩对象是谁
targetCPUUtilizationPercentage:当整体的资源利用率超过50%的时候,会进行扩容。
也可以直接通过一条命令实现:
kubectl autoscale deploy hellok8s --cpu-percent=50 --min=1 --max=10

发表评论