k8s结合Metrics-Server实现自动伸
Metrics-Server概念介绍:
Metrics-Server是集群核心监控数据的聚合器,在k8s早期版本中,对资源的监控使用的是heapster的资源监控工具。但是从 Kubernetes 1.8 开始,Kubernetes 通过 Metrics API 获取资源使用指标,例如容器 CPU 和内存使用情况。这些度量指标可以由用户直接访问,例如通过使用kubectl top 命令,或者使用集群中的控制器,,因为k8s的api-server将所有的数据持久化到了etcd中,显然k8s本身不能处理这种频率的采集,而且这种监控数据变化快且都是临时数据,因此需要有一个组件单独处理他们
环境:
[root@master ~]# docker -v
Docker version 19.03.5, build 633a0ea
[root@master ~]# kubelet --version
Kubernetes v1.18.0
一、修改配置安装Metrics-Server
1.检查 API Server 是否开启了 Aggregator Routing:查看 API Server 是否具有 --enable-aggregator-routing=true 选项。
仔细查看,一般都默认true
--enable-aggregator-routing=true
2.修改每个 API Server 的 kube-apiserver.yaml 配置开启 Aggregator Routing:修改 manifests 配置后API Server 会自动重启生效。
vim /etc/kubernetes/manifests/kube-apiserver.yaml
21 - --enable-bootstrap-token-auth=true
22 - --enable-aggregator-routing=true #在21行下方添加此行内容
23 - --etcd-cafile=/etc/kubernetes/pki/etcd/ca.crt
二、安装metrics-server(v0.3.6)
[root@master ~]# wget https://github.com/kubernetes-sigs/metricsserver/releases/download/v0.3.6/components.yaml
修改配置文件
[root@master ~]# vim components.yaml
85 - name: metrics-server
86 image: k8s.gcr.io/metrics-server-amd64:v0.3.6
#将86行换为修改为阿里云的镜像地址
86 image: registry.aliyuncs.com/google_containers/metrics-server-amd64:v0.3.6
#在90行下方添加
88 args:
89 - --cert-dir=/tmp
90 - --secure-port=4443
91 - /metrics-server #添加内容
92 - --kubelet-preferred-address-types=InternalIP #添加内容
93 - --kubelet-insecure-tls #添加内容
安装
[root@master ~]# kubectl apply -f components.yaml
[root@master ~]# kubectl get pods -n kube-system | grep metrics-server
metrics-server-59dd47f7d9-57lk9 1/1 Running 1 5d22h
[root@master ~]# kubectl top nodes
NAME CPU(cores) CPU% MEMORY(bytes) MEMORY%
master 141m 7% 1123Mi 65%
node1 38m 3% 701Mi 40%
node2 45m 4% 999Mi 57%
三、生成测试pod
apiVersion: apps/v1
kind: Deployment
metadata:
name: demo-hpa
spec:
selector:
matchLabels:
demo: demo-hpa
replicas: 1
template:
metadata:
labels:
demo: demo-hpa
spec:
containers:
- name: demo-hpa
image: nginx
ports:
- containerPort: 80
resources:
limits:
cpu: 200m
requests:
cpu: 100m
---
apiVersion: autoscaling/v2beta1
kind: HorizontalPodAutoscaler
metadata:
name: hpa
labels:
demo: hpa
spec:
maxReplicas: 10
minReplicas: 1
scaleTargetRef:
apiVersion: apps/v1
kind: Deployment
name: demo-hpa
metrics:
- type: Resource
resource:
name: cpu
targetAverageUtilization: 20
[root@master ~]# kubectl apply -f hpa.yaml
deployment.apps/demo-hpa created
horizontalpodautoscaler.autoscaling/hpa created
[root@master ~]# kubectl get hpa
NAME REFERENCE TARGETS MINPODS MAXPODS REPLICAS AGE
hpa Deployment/demo-hpa 0%/20% 1 10 1 116s