K8S集群部署kube-Prometheus监控etcd
背景介绍
- 除了 Kubernetes 集群中的一些资源对象、节点以及组件需要监控,有的时候我们可能还需要根据实际的业务需求去添加自定义的监控项,添加一个自定义监控的步骤也是非常简单的,主要有以下三个步骤:
第一步建立一个 ServiceMonitor 对象,用于 Prometheus 添加监控项;
第二步为 ServiceMonitor对象关联 metrics 数据接口的一个 Service 对象;
第三步确保 Service 对象可以正确获取到 Metrics 数据;
部署之前确保k8s集群中已经安装kube-prometheus
添加自定义etcd监控资源
etcd监控数据暴露接口方式:
1)通过2379端口暴露,需要https认证
2)通过2381端口暴露,直接http方式,不需要证书
- 手动查看etcd暴露的metrics接口数据
有数据说明正常
## 2379端口暴露数据
curl --cert /etc/kubernetes/pki/etcd/server.crt --key /etc/kubernetes/pki/etcd/server.key https://127.0.0.1:2379/metrics -k |more
## 2381端口暴露数据
curl http://127.0.0.1:2381/metrics |more
#选择其中一种即可
- 创建etcd service
cat prometheus-etcdService.yaml
apiVersion: v1
kind: Endpoints
metadata:
labels:
k8s-app: etcd1
name: etcd # endpoints name必须和下面service name保持一致
namespace: kube-system
subsets:
- addresses:
- ip: 10.100.221.80 # etcd集群节点ip地址
- ip: 10.100.221.83
- ip: 10.100.221.84
ports:
- name: etcd
port: 2379
protocol: TCP
---
apiVersion: v1
kind: Service
metadata:
labels:
k8s-app: etcd1
name: etcd
namespace: kube-system
spec:
ports:
- name: etcd
port: 2379
protocol: TCP
targetPort: 2379
sessionAffinity: None
type: ClusterIP
验证service创建是否成功
使用etcd service ip能够访问到etcd数据,说明没问题
curl --cert /etc/kubernetes/pki/etcd/server.crt --key /etc/kubernetes/pki/etcd/server.key https://10.105.220.135:2379/metrics -k |more
- 创建etcd servicemonitor
#创建之前先将servicemonitor需要的证书挂载到容器内
# 创建证书
kubectl create secret generic etcd-certs \
--from-file=/etc/kubernetes/pki/etcd/server.crt \
--from-file=/etc/kubernetes/pki/etcd/server.key \
--from-file=/etc/kubernetes/pki/etcd/ca.crt \
-n monitoring
#修改 prometheus-prometheus.yaml 在末尾添加:
……
spec:
……
secrets:
- etcd-certs
重启prometheus
kubectl replace -f prometheus/prometheus-prometheus.yaml
重启可以进入容器查看证书是否挂载成功
创建etcd servicemonitor
cat etcd-serviceMonitor.yaml
apiVersion: monitoring.coreos.com/v1
kind: ServiceMonitor
metadata:
labels:
k8s-app: etcd1
name: etcd
namespace: monitoring
spec:
endpoints:
- interval: 30s
port: etcd
scheme: https
tlsConfig:
caFile: /etc/prometheus/secrets/etcd-certs/ca.crt
certFile: /etc/prometheus/secrets/etcd-certs/server.crt
keyFile: /etc/prometheus/secrets/etcd-certs/server.key
selector:
matchLabels:
k8s-app: etcd1
namespaceSelector:
matchNames:
- kube-system
部署serviceMonitor
kubectl apply -f etcd-serviceMonitor.yaml
验证部署结果
prometheus上查看到etcd Targets表示成功
4. 导入etcd grafana模板推荐两个模板 3070或者9733(中文版)
完成