资源指标(metrics)和自定义指标(prometheus)

k8s的资源指标分类:

  • 资源指标  metrics-server内建API
  • 自定义指标  prometheus来采集,需要组件k8s-prometheus-adapter

新一代架构:

  核心指标流水线: 由kubelet、metrics-server以及由API server提供的api组成;CPU累计使用率、内存的实时使用率、pod的资源占用率及容器的磁盘占用率

  监控流水线:需要在集群上部署监控工具,用于从系统收集各种指标数据并提供终端用户、存储 系统以及HPA,他们包含核心指标及许多非核心指标;非核心指标本身不能被k8s所解析,需要第三方工具

♦  https://github.com/kubernetes/kubernetes/tree/master/cluster/addons    k8s插件

一、核心指标获取

metrics-server: API server

♦  kubectl api-versions 中默认不包含metrics.k8s.io/v1beta1;使用时需要添加kube-aggregator前缀

♦  metrics部署文件: https://github.com/kubernetes-incubator/metrics-server/tree/master/deploy/1.8%2B

下载到本地并应用之后就可以使用 kubectl api-versions查询,看到metrics.k8s.io/v1beta1已经存在了

应用之前需要修改metrics-server-deployment.yaml文件,添加如下:

  • Warming: metrics-server这个容器不能通过CoreDNS 10.96.0.10:53 解析各Node的主机名,metrics-server连节点时默认是连接节点的主机名,需要加个参数,让它连接节点的IP:“–kubelet-preferred-address-types=InternalIP”

        因为10250是https端口,连接它时需要提供证书,所以加上–kubelet-insecure-tls,表示不验证客户端证书,此前的版本中使用–source=这个参数来指定不验证客户端证书

执行kukectl apply -f ./  

 然后就可以使用kubetctl top nodes来获取信息了

♦   也可以使用kubectl proxy --port=xxxx代理后使用curl http://localhost:xxxx/apis/metrics.k8s.io/v1beta1/  接口来获取数据

 

二、自定义指标  --- Prometheus

♦   node_exporter用来暴露node信息,还有其他的exporter

♦   PromQL查询语句,不能直接被k8s直接解析,需要通过kube-state-metrics组件转k8s-promethues-adpater转为Custom Metrics API

 

 

安装node-exporter:
# kubectl apply -f node-exporter-ds.yml # kubectl apply -f node-exporter-service.yaml ♦ Prometheus需要先创建pv ♦ pv始终处于“Terminating”状态,而且delete不掉。直接删除k8s中的记录:kubectl patch pv xxx -p '{"metadata":{"finalizers":null}}' ♦ Prometheus service 需要修改type:NodePort以便外部访问
安装prometheus: # kubectl apply
-f prometheus-rbac.yaml # kubectl apply -f prometheus-configmap.yaml # kubectl apply -f prometheus-service.yaml # kubectl apply -f prometheus-statefulset.yaml

到目前为止们就可以使用http://nodeip:serviceport登陆prometheus了
  

安装k8s-prometheus-adapter:
https://github.com/DirectXMan12/k8s-prometheus-adapter
把adapterdeploy文件下载到本地服务器
首先需要自建证书:
Create a secret called cm-adapter-serving-certs with two values: serving.crt and serving.key. These are the serving certificates used by the adapter for serving HTTPS traffic.
# cd /etc/kubernetes/pki
# (umask 077;openssl genrsa -out serving.key 2048)

# openssl req -new -key serving.key -out serving.csr -subj "/CN=serving"
# openssl x509 -days 1000 -req -in serving.csr -CA ca.crt -CAkey ca.key -CAcreateserial -out serving.crt
# openssl x509 -in serving.crt -text -noout
创建secret:
# kubectl create secret generic cm-adapter-serving-certs --from-file=serving.crt=./serving.crt --from-file=serving.key=./serving.key
修改custom-metrics-config-map.yaml custom-metrics-apiserver-deployment.yaml中namespace为自己规划的namespace,然后运行
# kubectl apply -f custom-metrics-config-map.yaml
# kubectl apply -f custom-metrics-apiserver-deployment.yaml
创建grafana,grafana.yaml influxdb.yaml中namespace为自己规划的namespace,并且gfannao中的添加“type: NodePort”,然后运行
# kubectl apply -f influxdb.yaml
# kubectl apply -f grafana.yaml
grafana接入prometheus数据
首先找到grafana的service暴露出来的端口通过http://ip:port进入grafana主页,左侧设置按键Configration->Data Sources->Add data source

  然后点击save&Test,点击上方Dashboards默认存在几个dashborad,点击右侧import即可导入。

  

  然后在dashboard home中点击刚刚导入的dashboard即可看到视图, 也可以自行到grafana模板中心下载自己想要的模板导入,或者自定义模板都可以

  

 

 

 三、HPA --- 基于资源值指标的伸缩,默认是使用v1控制器,也可以指定使用v2版本

 指定Deployment、ReplicaSet或ReplicationController,并创建已经定义好资源的自动伸缩器。使用自动伸缩器可以根据需要自动增加或减少系统中部署的pod数量.

部署一个deploy服务
# kubectl run ngx-autoscale --image=nginx --replicas=1 --requests='cpu=20m,memory=256Mi' --limits='cpu=30m,memory=256Mi' --labels='app=myapp' --expose --port=80 -n develop
# kubectl patch svc ngx-autoscale -p '{"spec":{"type":"NodePort"}}' -n develop

 # kubectl autoscale deploy deploy-autoscale-test --min=1 --max=4 --cpu-percent=60 -n develop

 

 使用ab压力测试工具测试

  # ab -c 100 -n 50000 http://34.240.13.92:32541/index.html

 

 测试完成之后,pod会自动伸缩,有一定的延迟。

♦ 也可以根据自定义的merics参数来定义参考值

 

 

posted @ 2019-08-12 15:11  阿拉米苏  阅读(8876)  评论(0编辑  收藏  举报