Kubernetes监控etcd集群(自带metrics接口)

摘要:
Kubernetes用operator部署prometheus上面采用Kubernetes部署prometheus我们可以使用prometheus来监控自带metrics接口的应用。etcd是Kubernetes的数据库,自带接口,我们可以用etcd作为实例来看看怎么操作。
Kubernetes用operator部署prometheus

上面采用Kubernetes部署prometheus

我们可以使用prometheus来监控自带metrics接口的应用。

etcd是Kubernetes的数据库,自带接口,我们可以用etcd作为实例来看看怎么操作。

Kubernetes监控etcd集群(自带metrics接口)第1张

Kubernetes监控etcd集群(自带metrics接口)第2张

一、监控etcd集群

1.1、查看接口信息

二进制和kubeadm安装方式不同,他们etcd的存放证书位置也不同

二进制

[root@k8s-master01 ~]# curl --cert /etc/etcd/ssl/etcd.pem --key /etc/etcd/ssl/etcd-key.pem  https://192.168.1.201:2379/metrics -k 
# 这样也行
curl -L http://localhost:2379/metrics

kubeadm

[root@k8s-master01 ~]# find / -name "etcd"
/etc/kubernetes/pki/etcd


curl --cert /etc/kubernetes/pki/etcd/server.crt --key /etc/kubernetes/pki/etcd/server.key  https://localhost:2379/metrics -k

Kubernetes监控etcd集群(自带metrics接口)第3张

1.2、创建service和Endpoints

创建ep和svc代理外部的etcd服务,其他自带metrics接口的服务也是如此!

apiVersion: v1
kind: Endpoints
metadata:
  labels:
    app: etcd-k8s
  name: etcd-k8s
  namespace: kube-system   #注意命名空间
subsets:
- addresses:     # etcd节点对应的主机ip,有几台就写几台
  - ip: 192.168.0.100
  ports:
  - name: etcd-port
    port: 2379   # etcd端口
    protocol: TCP
---
apiVersion: v1
kind: Service 
metadata:
  labels:
    app: etcd-k8s
  name: etcd-k8s
  namespace: kube-system
spec:
  ports:
  - name: etcd-port
    port: 2379
    protocol: TCP
    targetPort: 2379
  type: ClusterIP

1.3、测试是否代理成功

#再次curl,把IP换成svc的IP测试,输出相同内容即创建成功
[root@k8s-master01 ~]# kubectl get svc -n kube-system etcd-k8s
NAME      TYPE        CLUSTER-IP      EXTERNAL-IP   PORT(S)    AGE
etcd-ep   ClusterIP   10.103.53.103   <none>        2379/TCP   8m54s

# 再次请求接口
[root@k8s-master01 ~]#curl --cert /etc/kubernetes/pki/etcd/server.crt --key /etc/kubernetes/pki/etcd/server.key  https://10.96.156.166:2379/metrics -k

有上面测试数值,代表接口已经暴露出来,现在包证书挂载上去。

1.4、创建secret

# 1、这里我们k8s-master01节点进行创建,ca为k8sca证书,剩下2个为etcd证书,这是我证书所在位置
  cert-file: '/etc/kubernetes/pki/etcd/etcd.pem'
  key-file: '/etc/kubernetes/pki/etcd/etcd-key.pem'
  trusted-ca-file: '/etc/kubernetes/pki/etcd/etcd-ca.pem'
  
# 2、接下来我们需要创建一个secret,让prometheus pod节点挂载
kubectl create secret generic etcd-ssl --from-file=/etc/kubernetes/pki/etcd/etcd-ca.pem --from-file=/etc/kubernetes/pki/etcd/etcd.pem --from-file=/etc/kubernetes/pki/etcd/etcd-key.pem -n monitoring

# 3、创建完成后可以检查一下
[root@k8s-master01 prometheus-down]# kubectl describe secrets -n monitoring etcd-ssl
Name:         etcd-ssl
Namespace:    monitoring
Labels:       <none>
Annotations:  <none>

Type:  Opaque

Data
====
etcd-ca.pem:   1367 bytes
etcd-key.pem:  1679 bytes
etcd.pem:      1509 bytes

1.5、编辑prometheus,把证书挂载进去

# 1、通过edit直接编辑prometheus 或者修改yaml文件
[root@k8s-master01 ~]# kubectl edit prometheus k8s -n monitoring
# 在replicas底下加上secret名称
replicas:2
secrets:
- etcd-ssl #添加secret名称

# 进入容器查看,就可以看到证书挂载进去了
[root@k8s-master01 prometheus-down]# kubectl exec -it -n monitoring prometheus-k8s-0 /bin/sh

# 查看文件是否存在
/prometheus $ ls /etc/prometheus/secrets/etcd-ssl/
etcd-ca.pem   etcd-key.pem  etcd.pem

1.6、创建ServiceMonitor

[root@k8s-master01 ~]# cat etcd-servicemonitor.yaml
apiVersion: monitoring.coreos.com/v1
kind: ServiceMonitor
metadata:
  name: etcd-k8s
  namespace: monitoring
  labels:
    app: etcd-k8s
spec:
  jobLabel: app
  endpoints:
    - interval: 30s
      port: etcd-port  # 这个port对应 Service.spec.ports.name
      scheme: https
      tlsConfig:
        caFile: /etc/prometheus/secrets/etcd-ssl/etcd-ca.pem #证书路径 (在prometheus pod里路径)
        certFile: /etc/prometheus/secrets/etcd-ssl/etcd.pem
        keyFile: /etc/prometheus/secrets/etcd-ssl/etcd-key.pem
        insecureSkipVerify: true  # 关闭证书校验
  selector:
    matchLabels:
      app: etcd-k8s  # 跟scv的lables保持一致
  namespaceSelector:
    matchNames:
    - kube-system    # 跟svc所在namespace保持一致
# 匹配Kube-system这个命名空间下面具有app=etcd-k8s这个label标签的Serve,job label用于检索job任务名称的标签。由于证书serverName和etcd中签发的证书可能不匹配,所以添加了insecureSkipVerify=true将不再对服务端的证书进行校验

1.7、页面查看etcd节点都获取到数据

此处数据获取有点慢,需要等待一下

Kubernetes监控etcd集群(自带metrics接口)第4张

1.8、grafana模板导入

数据采集完成后,接下来可以在grafana中导入dashboard

# 打开官网来的如下图所示,点击下载JSO文件

grafana官网:https://grafana.com/grafana/dashboards/3070

中文版ETCD集群插件:https://grafana.com/grafana/dashboards/9733

Kubernetes监控etcd集群(自带metrics接口)第5张

Kubernetes监控etcd集群(自带metrics接口)第6张

已经成功

免责声明:文章转载自《Kubernetes监控etcd集群(自带metrics接口)》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇PeerJS 0.1.7:一个用于浏览器内P2P的WebRTC封装器分享MYSQL中的各种高可用技术(源自姜承尧大牛)下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

相关文章

golang使用etcd实现分布式锁

1 package main 2 3 import ( 4 "context" 5 "fmt" 6 "time" 7 8 "go.etcd.io/etcd/clientv3" 9 ) 10 11 func main() { 12 var ( 13 client *clientv...

EMQ X+TDengine 搭建 MQTT 物联网可视化平台

物联网数据采集涉及到大量设备接入、海量的时序数据传输,EMQ X MQTT 服务器 与 TDengine 大数据平台的组合技术栈完全能够胜任场景中的海量时间序列监测数据的传输、存储和计算。 数据入库后,往往需要其他方式如数据可视化系统将数据按照规则统计、展现出来,实现数据的监控、指标统计等业务需求,以便充分发挥数据的价值,TDengine 搭配开源软件 G...

实践Kong for Kubernetes(K8S),kong最新2.1版本和kong-ingress-controller:0.9.1版本

先决条件 Kubernetes集群:您可以使用Minikube或GKE集群。Kong与Kubernetes的所有发行版兼容。 kubectl访问权限:您应该已经kubectl安装并配置为与Kubernetes集群通信。 为Kubernetes安装Kong 使用以下安装方法之一安装Kong for Kubernetes: YAML清单 helm K...

洛谷训练新手村之“BOSS战入门综合练习1”题解

P1478 陶陶摘苹果(升级版) 题目链接:https://www.luogu.com.cn/problem/P1478 题目大意:陶陶有s点体力值,每个苹果消耗体力值,问s体力值最多能摘多少苹果。 解题思路:首先过滤掉摘不到的苹果。其次从小到大排序, 贪心 思想:优先选择消耗体力值小的苹果。 实现代码如下: #include <bits/stdc+...

如何在Ubuntu 20.04 LTS Focal Fossa上安装Grafana

步骤1.首先,通过apt在终端中运行以下以下命令,确保所有系统软件包都是最新的。sudo apt updatesudo apt upgrade第2步。在Ubuntu 20.04上安装Grafana。添加Grafana GPG密钥,该密钥可让您安装已签名的软件包:sudo apt-get install -y gnupg2 curl software-pro...

查看k8s中etcd数据

1.查看ETCD集群中运行的ETCD pod [root@master1 ~]# kubectl get pod -n kube-system | grep etcd etcd-master1 1/1 Running 0 61m etcd-master2...