91酷站字体下载频道

prometheus-operator 监控 k8s 外部集群

2020-10-23 17:17 发布

来自: 51CTO技术博客/ Lin /
发布者: 91酷站官网,如需商业用途或转载请与91酷站官网联系,谢谢配合。

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 证书对应存放的位置

# 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 对象保存到集群中去

# # 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 中

# cat prometheus/prometheus-prometheus.yaml
...
  podMonitorSelector: {}
  replicas: 2
  secrets:
  - etcd-certs
  resources:
    requests:
      memory: 400Mi
...

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

/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)

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

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

  直接创建这个 ServiceMonitor 对象:

# kubectl apply -f prometheus/prometheus-serviceMonitorEtcd.yaml
servicemonitor.monitoring.coreos.com/etcd-k8s created

创建 service 和 endpoint

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

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 集群的地址即可,

# kubectl apply -f prometheus-etcdService.yaml
service/etcd-k8s created
endpoints/etcd-k8s created

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

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

监空集群外部主机信息

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

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

  2,在 k8s 集群内部创建 serviceMonitor

  3,然后创建 svc ,创建 endpoint

  4,在 grafana 创建 dashboard

  5,添加配置告警信息

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

  

严禁发布广告
91酷站字体下载频道

联系
我们
返回顶部