k8s全栈监控之metrics-server和prometheus-operator

一、概述

  • 使用metric-server收集数据给k8s集群内使用,如kubectl,hpa,scheduler等
  • 使用prometheus-operator部署prometheus,存储监控数据
  • 使用kube-state-metrics收集k8s集群内资源对象数据
  • 使用node_exporter收集集群中各节点的数据
  • 使用prometheus收集apiserver,scheduler,controller-manager,kubelet组件数据
  • 使用alertmanager实现监控报警
  • 使用grafana实现数据可视化

1、部署metrics-server

mkdir  k8s-monitor
cd  k8s-monitor
git clone https://github.com/kubernetes-incubator/metrics-server.git
cd metrics-server  
# 修改配置(当前版本有bug)
sed -ri '[email protected]/google_containers/metrics-server-amd64:(.*)@mirrorgooglecontainers/metrics-server-amd64:\1@g' metrics-server/deploy/1.8+/metrics-server-deployment.yaml
sed -ri 's@--source=kubernetes.summary_api:.*@--source=kubernetes.summary_api:https://kubernetes.default?kubeletHttps=true\&kubeletPort=10250\&insecure=true@' metrics-server/deploy/1.8+/metrics-server-deployment.yaml


如果使用kubeadm部署的,可能会有个这样的报错:
x509: certificate signed by unknown authority

需要修改一下metrics-server的deployment文件,即metrics-server-deployment.yaml
 containers:
      - name: metrics-server
        image: k8s.gcr.io/metrics-server-amd64:v0.3.1
        imagePullPolicy: Always
        command:
        - /metrics-server
        - --kubelet-insecure-tls
        - --kubelet-preferred-address-types=InternalIP,Hostname,InternalDNS,ExternalDNS,ExternalIP
volumeMounts: - name: tmp-dir mountPath: /tmp
kubectl create -f metrics-server/deploy/1.8+/

验证:

it's cool,但是这种方式不是很好。

注:metrics-server默认使用node的主机名,但是coredns里面没有物理机主机名的解析,一种是部署的时候添加一个参数:

- --kubelet-preferred-address-types=InternalIP,Hostname,InternalDNS,ExternalDNS,ExternalIP

第二种是使用dnsmasq构建一个上游的dns服务,参照https://www.cnblogs.com/cuishuai/p/9856843.html。

2、部署prometheus-operator

扫描二维码关注公众号,回复: 3897380 查看本文章

prometheus-operator是一个整合prometheus和operator的项目,prometheus是一个集数据收集存储,数据查询,数据图表显示于一身的开源监控组件。operator是由coreos开源一套在k8s上管理应用的软件,通过operator可以方便的实现部署,扩容,删除应用等功能。

prometheus-operator利用k8s的CustomResourceDefinitions功能实现了只需要像写原生kubectl支持的yaml文件一样,轻松收集应用数据,配置报警规则等,包含如下CRDs :

  • Prometheus 用于部署Prometheus 实例
  • ServiceMonitor 用于配置数据收集,创建之后会根据DNS自动发现并收集数据
  • PrometheusRule 用于配置Prometheus 规则,处理规整数据和配置报警规则
  • Alertmanager 用于部署报警实例
下载相关文件
git clone https://github.com/mgxian/k8s-monitor.git
cd  k8s-monitor
#创建namespace,monitoring
kubectl apply -f monitoring-namespace.yaml
#部署prometheus-operator
kubectl apply -f prometheus-operator.yaml

部署k8s组件
kubectl apply -f kube-k8s-service.yaml

部署node_exporter
kubectl apply -f node_exporter.yaml

部署kube-state-metrics
kubectl apply -f kube-state-metrics.yaml

部署prometheus
kubectl apply -f prometheus.yaml

收集数据
kubectl apply -f kube-servicemonitor.yaml

部署grafana
kubectl apply -f grafana.yaml

部署altermanager
kubectl apply -f alertmanager.yaml

查看部署:

prometheus和grafana都是采用的nodePort方式暴漏的服务,所以可以直接访问。

grafana默认的用户名密码:admin/admin

QA:

1、集群是使用kubeadm部署的,controller-manager和schedule都是监听的127.0.0.1,导致prometheus收集不到相关的数据?

可以在初始化之前修改其监听地址:

controllerManagerExtraArgs:
address: 0.0.0.0
schedulerExtraArgs:
address: 0.0.0.0

如果集群已经构建好了:

sed -e "s/- --address=127.0.0.1/- --address=0.0.0.0/" -i /etc/kubernetes/manifests/kube-controller-manager.yaml
sed -e "s/- --address=127.0.0.1/- --address=0.0.0.0/" -i /etc/kubernetes/manifests/kube-scheduler.yaml

2、metrics-server不能使用,报错不能解析node节点的主机名?

需要修改deployment文件,

- --kubelet-preferred-address-types=InternalIP,Hostname,InternalDNS,ExternalDNS,ExternalIP

3、metrics-server报错,x509,证书是非信任的?

 command:
        - /metrics-server
        - --kubelet-insecure-tls

4、完整的配置文件

containers:
      - name: metrics-server
        image: k8s.gcr.io/metrics-server-amd64:v0.3.1
        command:
        - /metrics-server
        - --metric-resolution=30s
        - --kubelet-insecure-tls
        - --kubelet-preferred-address-types=InternalIP,Hostname,InternalDNS,ExternalDNS,ExternalIP

猜你喜欢

转载自www.cnblogs.com/cuishuai/p/9857120.html