|NO.Z.00322|——————————|CloudNative|——|KuberNetes&运维.V40|——|白盒监控.v02|etcd.v02|

一、监控有metrics接口的业务应用:以etcd为例
### --- 监控etcd
~~~     查看etcd的端口:2379

[root@k8s-master01 etcd]# netstat -lntp | grep etcd
tcp        0      0 192.168.1.11:2379       0.0.0.0:*               LISTEN      1348/etcd           
tcp        0      0 127.0.0.1:2379          0.0.0.0:*               LISTEN      1348/etcd           
### --- curl.etcd.IP端口2379:是否有监控数据
~~~     注:--cert:指定证书 --key:指定证书

[root@k8s-master01 etcd]# curl --cert /etc/etcd/ssl/etcd.pem --key /etc/etcd/ssl/etcd-key.pem  https://192.168.1.11:2379/metrics -k | more
### --- 方案二:
~~~     注:是没有service的,需要创建service

[root@k8s-master01 etcd]# curl -L http://localhost:2379/metrics | more
  % Total    % Received % Xferd  Average Speed   Time    Time     Time  Current
                                 Dload  Upload   Total   Spent    Left  Speed
  0     0    0     0    0     0      0      0 --:--:-- --:--:-- --:--:--     0
# HELP etcd_cluster_version Which version is running. 1 for 'cluster_version' label with current cluster version
# TYPE etcd_cluster_version gauge
etcd_cluster_version{cluster_version="3.4"} 1
# HELP etcd_debugging_auth_revision The current revision of auth store.
# TYPE etcd_debugging_auth_revision gauge
etcd_debugging_auth_revision 1
# HELP etcd_debugging_disk_backend_commit_rebalance_duration_seconds The latency distributions of commit.rebalance called by bboltdb backend.
二、创建service和Endpoints
### --- 创建ep和svc代理外部的etcd服务,其他自带metrics接口的服务也是如此

[root@k8s-master01 etcd]# vim etcd-serviceMonitor.yaml
apiVersion: v1
kind: Endpoints
metadata:
  labels:
    app: etcd-monitor
  name: etcd
  namespace: kube-system
subsets:
- addresses:                        # etcd节点对应的主机ip,有几台就写几台
  - ip: 192.168.1.11
  - ip: 192.168.1.14
  - ip: 192.168.1.15
  ports:
  - name: etcd
    port: 2379                      # etcd端口
    protocol: TCP
---
apiVersion: v1
kind: Service 
metadata:
  labels:
    app: etcd-monitor
  name: etcd
  namespace: kube-system
spec:
  ports:
  - name: etcd
    port: 2379
    protocol: TCP
    targetPort: 2379
  type: ClusterIP
### --- 创建etcd的svc和ep

[root@k8s-master01 etcd]# kubectl create -f etcd-serviceMonitor.yaml 
endpoints/etcd-monitor created
service/etcd-monitor created
### --- 查看创建etcd的svc和ep

[root@k8s-master01 etcd]# kubectl get svc,ep  -n kube-system -l app=etcd-monitor
NAME                   TYPE        CLUSTER-IP       EXTERNAL-IP   PORT(S)    AGE
service/etcd-monitor   ClusterIP   10.100.203.114   <none>        2379/TCP   104s

NAME                     ENDPOINTS                                               AGE
endpoints/etcd-monitor   192.168.1.11:2379,192.168.1.14:2379,192.168.1.15:2379   104s
三、测试是否代理成功
### --- 把etcd宿主机的IP换成service的地址,输出相同内容即创建成功

[root@k8s-master01 etcd]# kubectl get svc,ep  -n kube-system -l app=etcd-monitor
NAME                   TYPE        CLUSTER-IP       EXTERNAL-IP   PORT(S)    AGE
service/etcd-monitor   ClusterIP   10.100.203.114   <none>        2379/TCP   2m47s

NAME                     ENDPOINTS                                               AGE
endpoints/etcd-monitor   192.168.1.11:2379,192.168.1.14:2379,192.168.1.15:2379   2m47s
### --- 请求接口

[root@k8s-master01 etcd]# curl --cert /etc/etcd/ssl/etcd.pem --key /etc/etcd/ssl/etcd-key.pem  https://10.100.203.114:2379/metrics -k | more
四、更新Prometheus版本:挂载secrets
### --- 创建secret

[root@k8s-master01 prometheus]# kubectl -n monitoring create  secret generic etcd-certs --from-file=/etc/etcd/ssl/etcd.pem --from-file=/etc/etcd/ssl/etcd-key.pem --from-file=/etc/etcd/ssl/etcd-ca.pem 
secret/etcd-certs created
### --- 查看是否创建成功

[root@k8s-master01 etcd]#  kubectl describe secrets -n monitoring etcd-certs
Name:         etcd-certs
Namespace:    monitoring
Labels:       <none>
Annotations:  <none>

Type:  Opaque

Data
====
etcd-ca.pem:   1367 bytes
etcd-key.pem:  1675 bytes
etcd.pem:      1501 bytes
### --- 更新Prometheus的版本

[root@k8s-master01 prometheus]# vim  prometheus-prometheus.yaml
apiVersion: monitoring.coreos.com/v1
kind: Prometheus
metadata:
  labels:
    prometheus: k8s
  name: k8s
  namespace: monitoring
spec:
  alerting:
    alertmanagers:
    - name: alertmanager-main
      namespace: monitoring
      port: web
  image: quay.io/prometheus/prometheus:v2.15.2
  nodeSelector:
    kubernetes.io/os: linux
  podMonitorNamespaceSelector: {}
  podMonitorSelector: {}
  replicas: 1
  resources:
    requests:
      memory: 400Mi
  ruleSelector:
    matchLabels:
      prometheus: k8s
      role: alert-rules
  securityContext:
    fsGroup: 2000
    runAsNonRoot: true
    runAsUser: 1000
  serviceAccountName: prometheus-k8s
  serviceMonitorNamespaceSelector: {}
  serviceMonitorSelector: {}
  version: v2.15.2
  secrets:
  - etcd-certs
### --- 注:挂载了一个secrets

~~~     注释一:挂载secrets
  secrets:
  - etcd-certs
#replace-Prometheus
### --- 进入Prometheus容器查看挂载是否成功

[root@k8s-master01 prometheus]# kubectl get po -n monitoring -owide
NAME                                   READY   STATUS    RESTARTS   AGE    IP               NODE           NOMINATED NODE   READINESS GATES
prometheus-k8s-0                       3/3     Running   1          19m    172.27.14.224    k8s-node02     <none>           <none>
~~~     # 挂载到了这个目录下

[root@k8s-master01 prometheus]# kubectl exec -ti prometheus-k8s-0  -n monitoring -- sh
/prometheus $ ls -l /etc/prometheus/secrets/etcd-certs/  
total 0
lrwxrwxrwx    1 root     root            18 May 26 13:24 etcd-ca.pem -> ..data/etcd-ca.pem
lrwxrwxrwx    1 root     root            19 May 26 13:24 etcd-key.pem -> ..data/etcd-key.pem
lrwxrwxrwx    1 root     root            15 May 26 13:24 etcd.pem -> ..data/etcd.pem
五、创建servicemonitor
### --- 编辑servicemonitor.yaml文件

[root@k8s-master01 etcd]# vim etcd-servicemonitor.yaml 
apiVersion: monitoring.coreos.com/v1
kind: ServiceMonitor
metadata:
  labels:
    k8s-app: etcd
  name: etcd
  namespace: monitoring
spec:
  endpoints:
  - interval: 30s
    port: etcd
    scheme: https
    tlsConfig:
      caFile: /etc/prometheus/secrets/etcd-certs/etcd-ca.pem
      certFile: /etc/prometheus/secrets/etcd-certs/etcd.pem
      keyFile: /etc/prometheus/secrets/etcd-certs/etcd-key.pem
      insecureSkipVerify: true
  selector:
    matchLabels:
      app: etcd-monitor
  namespaceSelector:
    matchNames:
    - kube-system
### --- 创建servicemonitor

[root@k8s-master01 etcd]# kubectl create -f etcd-servicemonitor.yaml 
servicemonitor.monitoring.coreos.com/etcd created
### --- 查看创建的servicemonitor

[root@k8s-master01 etcd]# kubectl get servicemonitor -n monitoring
NAME                      AGE
etcd                      94s

 
 
 
 
 
 
 
 
 

Walter Savage Landor:strove with none,for none was worth my strife.Nature I loved and, next to Nature, Art:I warm'd both hands before the fire of life.It sinks, and I am ready to depart
                                                                                                                                                   ——W.S.Landor

 

 

posted on   yanqi_vip  阅读(30)  评论(0编辑  收藏  举报

相关博文:
阅读排行:
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· SQL Server 2025 AI相关能力初探
· AI编程工具终极对决:字节Trae VS Cursor,谁才是开发者新宠?
· 开源Multi-agent AI智能体框架aevatar.ai,欢迎大家贡献代码
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
< 2025年3月 >
23 24 25 26 27 28 1
2 3 4 5 6 7 8
9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28 29
30 31 1 2 3 4 5

导航

统计

点击右上角即可分享
微信分享提示