资源监控、弹性伸缩
- 一、资源监控
- 二、Pod水平伸缩
一、资源监控
Metrics Server是一个集群范围的资源使用情况的数据聚合器。作为一个应用部署在集群中。
Metric server从每个节点上Kubelet API收集指标,通过Kubernetes聚合器注册在Master APIServer
早期版本使用cAdvisor采集数据,现已将cAdvisor集成到kubelet组件里面。当然我们可以使用kubectl top
来查看监控信息
metrics项目地址:
https://github.com/kubernetes-sigs/metrics-server
部署metrics-server
wget https://github.com/kubernetes-sigs/metrics-server/releases/download/metrics-server-helm-chart-3.8.0/components.yaml
修改yaml文件,默认image使用google,image无法拉取,这里我们使用aliyun
133 containers:
134 - args:
135 - --cert-dir=/tmp
136 - --secure-port=4443
137 - --kubelet-preferred-address-types=InternalIP,ExternalIP,Hostname
138 - --kubelet-use-node-status-port
139 - --metric-resolution=15s
140 - --kubelet-insecure-tls
141 #image: k8s.gcr.io/metrics-server/metrics-server:v0.6.0
142 image: registry.aliyuncs.com/google_containers/metrics-server:v0.6.0
143 imagePullPolicy: IfNotPresent
kubectl apply -f components.yaml
执行后pod一直未处于就绪状态
查看pod状态信息,发现就绪检查失败。因为证书的原因,修改启动参数不验证https证书即可
重新执行yaml文件,pod启动成功
使用kubectl top 获取采集信息
[root@k8s-master ~]# kubectl top node k8s-node1
NAME CPU(cores) CPU% MEMORY(bytes) MEMORY%
k8s-node1 336m 16% 965Mi 51%
[root@k8s-master ~]# kubectl top node k8s-node2
NAME CPU(cores) CPU% MEMORY(bytes) MEMORY%
k8s-node2 357m 17% 961Mi 51%
[root@k8s-master ~]# kubectl top pod my-busybox
NAME CPU(cores) MEMORY(bytes)
my-busybox 0m 0Mi
二、Pod水平伸缩
HPA(Horizontal Pod Autoscaler)pod水平伸缩,可以基于cpu使用率、内存使用率自动扩缩 ReplicationController、Deployment和 StatefulSet 中的 Pod 数量,当然也可以基于其他监控程序的指标来执行扩缩容。
kubectl top/hpa -> apiserver -> metrics-server -> kubelet -> pod
要实现水平扩缩容必须满足两个条件:
- 集群必须安装metrics监控组件
- Pod必须配置resource.request(pod limit)
首先我们创建一个deployment,必须配置request字段
apiVersion: apps/v1
kind: Deployment
metadata:
name: nginx-deployment
labels:
app: nginx
spec:
replicas: 1
selector:
matchLabels:
app: demo
template:
metadata:
labels:
app: demo
spec:
containers:
- name: nginx
image: nginx:1.14.2
ports:
- containerPort: 80
resources:
limits:
cpu: "0.5"
memory: 100Mi
requests:
cpu: "0.2"
memory: 50Mi
配置autoscale,最小1个副本最多4个副本,当cpu-percent超过80进行扩容
创建svc暴露服务,方便访问nginx
使用ab工具压测测试,-w
观察pod数量、HPA指标
HPA获取到cpu-percent超过80%,扩容,副本加1
查看pod状态
我们再看下pod和endpoint状态
过一段时间负载下来后会自动进行缩容,时间大约5分钟。这块儿底层逻辑不太清楚,猜测这个时间应该是逻辑中去检测的时间