前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >prometheus-operator 监控 k8s 外部集群

prometheus-operator 监控 k8s 外部集群

原创
作者头像
张琳兮
修改2020-09-23 17:30:02
1.7K0
修改2020-09-23 17:30:02
举报
文章被收录于专栏:首富手记首富手记

prometheus-operator 监控 k8s 外部集群

其实监控 k8s 外部集群和监控内部集群没啥区别,大概思路就是把外部资源通过 endpoint的方式给他虚拟成 k8s 集群内部的一个资源,其实下面操作就是有点为了用k8s 而用 k8s 了,有点吃力不讨好的架势,但是我们这里为了学习,可以玩耍

prometheus-operator 监控 etcd

无论是 Kubernetes 集群外的还是使用 Kubeadm 安装在集群内部的 etcd 集群,我们这里都将其视作集群外的独立集群,因为对于二者的使用方法没什么特殊之处。

对于 etcd 集群一般情况下,为了安全都会开启 https 证书认证的方式,所以要想让 Prometheus 访问到 etcd 集群的监控数据,就需要提供相应的证书校验。由于我们集群是通过二进制安装的。所以我清楚的知道 etcd 证书存放的位置,kubeadm 安装的可以通过kubectl get pod etcd-master -n kube-system -o yaml找到证书etcd 证书对应存放的位置

代码语言:txt
复制
# ll ca.pem client.pem client-key.pem
-rw-r--r--. 1 root root 1326 8月  20 21:16 ca.pem
-rw-------. 1 root root 1675 8月  20 21:16 client-key.pem
-rw-r--r--. 1 root root 1359 8月  20 21:16 client.pem

我们将需要使用到的证书通过 secret 对象保存到集群中去

代码语言:txt
复制
# # kubectl -n monitoring create secret generic etcd-certs  --from-file=./ca.pem --from-file=./client.pem --from-file=./client-key.pem
secret/etcd-certs created

添加证书到 pod 中

代码语言:txt
复制
# cat prometheus/prometheus-prometheus.yaml
...
  podMonitorSelector: {}
  replicas: 2
  secrets:
  - etcd-certs
  resources:
    requests:
      memory: 400Mi
...

更新完成后,我们就可以在 Prometheus 的 Pod 中获取到上面创建的 etcd 证书文件了,具体的路径我们可以进入 Pod 中查看:

代码语言:txt
复制
/etc/prometheus/secrets/etcd-certs $ pwd
/etc/prometheus/secrets/etcd-certs
/etc/prometheus/secrets/etcd-certs $ ls
ca.pem          client-key.pem  client.pem

创建 ServiceMonitor

现在 Prometheus 访问 etcd 集群的证书已经准备好了,接下来创建 ServiceMonitor 对象即可(prometheus-serviceMonitorEtcd.yaml)

代码语言:txt
复制
apiVersion: monitoring.coreos.com/v1
kind: ServiceMonitor
metadata:
  name: etcd-k8s
  namespace: monitoring
  labels:
    k8s-app: etcd-k8s
spec:
  jobLabel: k8s-app
  endpoints:
  - port: port
    interval: 30s
    scheme: https
    tlsConfig:
      caFile: /etc/prometheus/secrets/etcd-certs/ca.crt
      certFile: /etc/prometheus/secrets/etcd-certs/healthcheck-client.crt
      keyFile: /etc/prometheus/secrets/etcd-certs/healthcheck-client.key
      insecureSkipVerify: true
  selector:
    matchLabels:
      k8s-app: etcd
  namespaceSelector:
    matchNames:
    - kube-system

上面我们在 monitoring 命名空间下面创建了名为 etcd-k8s 的 ServiceMonitor 对象,基本属性和前面章节中的一致,匹配 kube-system 这个命名空间下面的具有 k8s-app=etcd 这个 label 标签的 Service,jobLabel 表示用于检索 job 任务名称的标签,和前面不太一样的地方是 endpoints 属性的写法,配置上访问 etcd 的相关证书,endpoints 属性下面可以配置很多抓取的参数,比如 relabel、proxyUrl,tlsConfig 表示用于配置抓取监控数据端点的 tls 认证,由于证书 serverName 和 etcd 中签发的可能不匹配,所以加上了 insecureSkipVerify=true

image-20200907105741840
image-20200907105741840

关于 ServiceMonitor 属性的更多用法可以查看文档:https://github.com/coreos/prometheus-operator/blob/master/Documentation/api.md 了解更多

直接创建这个 ServiceMonitor 对象:

代码语言:txt
复制
# kubectl apply -f prometheus/prometheus-serviceMonitorEtcd.yaml
servicemonitor.monitoring.coreos.com/etcd-k8s created

创建 service 和 endpoint

ServiceMonitor 创建完成了,但是现在还没有关联的对应的 Service 对象,所以需要我们去手动创建一个 Service 对象(prometheus-etcdService.yaml):

代码语言:txt
复制
apiVersion: v1
kind: Service
metadata:
  name: etcd-k8s
  namespace: kube-system
  labels:
    k8s-app: etcd
spec:
  type: ClusterIP
  clusterIP: None
  ports:
  - name: port
    port: 2379
    protocol: TCP

---
apiVersion: v1
kind: Endpoints
metadata:
  name: etcd-k8s
  namespace: kube-system
  labels:
    k8s-app: etcd
subsets:
- addresses:
  - ip: 192.168.4.77
  - ip: 192.168.4.74
  - ip: 192.168.4.75
  ports:
  - name: port
    port: 2379
    protocol: TCP

我们这里创建的 Service 没有采用前面通过 label 标签的形式去匹配 Pod 的做法,因为前面我们说过很多时候我们创建的 etcd 集群是独立于集群之外的,这种情况下面我们就需要自定义一个 Endpoints,要注意 metadata 区域的内容要和 Service 保持一致,Service 的 clusterIP 设置为 None.

Endpoints 的 subsets 中填写 etcd 集群的地址即可,

代码语言:txt
复制
# kubectl apply -f prometheus-etcdService.yaml
service/etcd-k8s created
endpoints/etcd-k8s created

等过一会我们就可以在 prometheus 的 dashboard 中看到 etcd 被监控到了

image-20200907110826673
image-20200907110826673

数据采集到后,可以在 grafana 中导入编号为3070的 dashboard,获取到 etcd 的监控图表。

image-20200907111001939
image-20200907111001939

监空集群外部主机信息

其实道理和上面的大大致相同,总结大概的几个步骤

1,在需要监控的机器上部署 exporter

2,在 k8s 集群内部创建 serviceMonitor

3,然后创建 svc ,创建 endpoint

4,在 grafana 创建 dashboard

5,添加配置告警信息

具体操作大家可以自己来实践。这里不过多赘述。21

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • prometheus-operator 监控 k8s 外部集群
    • prometheus-operator 监控 etcd
      • 创建 ServiceMonitor
      • 创建 service 和 endpoint
    • 监空集群外部主机信息
    相关产品与服务
    容器服务
    腾讯云容器服务(Tencent Kubernetes Engine, TKE)基于原生 kubernetes 提供以容器为核心的、高度可扩展的高性能容器管理服务,覆盖 Serverless、边缘计算、分布式云等多种业务部署场景,业内首创单个集群兼容多种计算节点的容器资源管理模式。同时产品作为云原生 Finops 领先布道者,主导开源项目Crane,全面助力客户实现资源优化、成本控制。
    领券
    问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档