k8s:结合Metrics-Server实现弹性伸缩

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

上一篇:函数作用域复盘


下一篇:使用 TFTP 服务传输文件