基于Prometheus+grafana+mysql的k8s集群监控

一、基于Prometheus的k8s集群信息监控

1、部署

  • 获取官方源码
git clone https://github.com/coreos/kube-prometheus.git
复制代码
  • 部署CRD和监控
# CRD
cd kube-prometheus/manifests/setup
kubectl apply -f .

cd kube-prometheus/manifests
kubectl apply -f .
复制代码

查看CRD kubectl get crd | grep coreos

alertmanagers.monitoring.coreos.com     2021-12-15T06:56:28Z
podmonitors.monitoring.coreos.com       2021-12-15T06:56:28Z
prometheuses.monitoring.coreos.com      2021-12-15T06:56:28Z
prometheusrules.monitoring.coreos.com   2021-12-15T06:56:28Z
servicemonitors.monitoring.coreos.com   2021-12-15T06:56:28Z
复制代码

查看pod kubectl get pod -n monitoring

alertmanager-main-0                   2/2     Running   0          42d
alertmanager-main-1                   2/2     Running   0          42d
alertmanager-main-2                   2/2     Running   0          42d
kube-state-metrics-78b46c84d8-klllv   3/3     Running   0          42d
prometheus-adapter-5cd5798d96-kj6r5   1/1     Running   0          42d
prometheus-k8s-0                      3/3     Running   1          42d
prometheus-operator-99dccdc56-lf6vm   1/1     Running   0          42d
复制代码

查看service kubectl get svc -n monitoring

alertmanager-main       ClusterIP   11.1.126.171           9093/TCP                     42d
alertmanager-operated   ClusterIP   None                   9093/TCP,9094/TCP,9094/UDP   42d
kube-state-metrics      ClusterIP   None                   8443/TCP,9443/TCP            42d
prometheus-adapter      ClusterIP   11.1.178.197           443/TCP                      42d
prometheus-k8s          NodePort    11.1.253.224           9090:8098/TCP                42d
prometheus-operated     ClusterIP   None                   9090/TCP                     42d
prometheus-operator     ClusterIP   None                   8080/TCP                     42d
复制代码
  • 修改Prometheus为NodePort:
prometheus-service.yaml
​
apiVersion: v1
kind: Service
metadata:
  labels:
    prometheus: k8s
  name: prometheus-k8s
  namespace: monitoring
spec:
  type: NodePort
  ports:
  - name: web
    port: 9090
    nodePort: 8098
    targetPort: 9090
  selector:
    app: prometheus
    prometheus: k8s
  sessionAffinity: ClientIP
​
复制代码

2、Prometheus持久化存储

Prometheus以pod的方式运行,一旦pod挂掉会导致容器中存储的数据丢失,历史数据无法查询,所以需要持久化 节点配置ChubaoFS CSI 官方链接:chubaofs.readthedocs.io/zh_CN/lates…

部署chubao csi插件

kubectl apply -f deploy/csi-rbac.yaml
kubectl apply -f deploy/csi-controller-deployment.yaml
kubectl apply -f deploy/csi-node-daemonset.yaml
复制代码

创建StorageClass

masterAddr需要修改为自己的配置

kind: StorageClass
apiVersion: storage.k8s.io/v1
metadata:
  name: chubaofs-sc-pro
provisioner: csi.chubaofs.com
reclaimPolicy: Delete
parameters:
  masterAddr: "****"
  owner: "****"
  consulAddr: "*****"
  logLevel: "info"
复制代码

节点加label

chubaofs-csi-controller=enabled
chubaofs-csi-node=enabled
复制代码

配置Prometheus

 prometheus-prometheus.yaml
 
 storage:                  #----添加持久化配置,指定StorageClass为上面创建的fast
    volumeClaimTemplate:
      spec:
        storageClassName: chubaofs-sc-test #---指定为fast
        resources:
          requests:
            storage: 200Gi
复制代码

部署:

cd /home/work/zhanglei/kube-prometheus-0.3.0/manifests/setup && kubectl apply -f .
cd /home/work/zhanglei/kube-prometheus-0.3.0/manifests && kubectl apply -f .
复制代码

3、通过Prometheus-operator监控集群外的节点

用来监控一些其他插件的指标数据,采用serviceMonitor的方式监控,本文主要是用来监控一个共享GPU的插件中每个容器的GPU显存分配及使用情况。

  • 首先添加定义svc,通过10255端口暴露监控指标
apiVersion: v1
kind: Service
metadata:
  labels:
    k8s-app: kubelet
  name: test-exporter
  #namespace: monitoring
  namespace: kube-system
spec:
  clusterIP: None
  ports:
  - name: port
    port: 10255
    targetPort: port

---
apiVersion: v1
kind: Endpoints
metadata:
  name: test-exporter
  #namespace: monitoring
  namespace: kube-system
  labels:
    k8s-app: kubelet
subsets:
- addresses:
  - ip: 100.200.200.200
  - ip: 100.200.200.201
  ports:
  - name: port
    port: 10255
    protocol: TCP
复制代码
  • 然后在serviceMonitor中添加需要监控的ep
...
  endpoints:
    - port: port
      interval: 30s
      scheme: http
      path: /metrics/cadvisor
...
复制代码

二、搭建grafana监控面板

grafana的部署可以直接使用prometheus-oerator中的,也可以使用docker run直接部署。本文是docker run直接部署的。

1、部署

docker run -d -p 3000:3000 grafana/grafana
复制代码

【注意】这种方式部署的,完成面板搭建之后记得备份容器镜像,一面容器挂掉导致数据丢失。

2.2 docker部署修改配置文件

  • 匿名登录

    当grafana嵌入其他系统中使用时,想要隐去登录操作,此时需要修改配置文件

    [auth.anonymous]
    # enable anonymous access
    # 去掉注释,改为true,允许匿名访问
    enabled = true
    ​
    # specify organization name that should be used for unauthenticated users
    # 匿名用户属于的组织
    org_name = Main Org.
    ​
    # specify role for unauthenticated users
    # 匿名用户的角色/权限
    org_role = Viewer
    复制代码

    如果是用docker方式启动的,通过挂载的方式修改grafana的配置文件

     普通启动,挂载数据盘
    docker run  -d --name grafana -p 3000:3000   -v /data/grafana:/var/lib/grafana  grafana/grafana
    ​
    ## 复制出配置文件
    docker cp grafan:/etc/grafana/grafana.ini /data/grafana-data/etc/
    ## 修改配置文件,比如加上域名,比如修改端口为80,比如。。。
    ​
    ## kill重启
    docker kill grafana
    docker rm grafana
    docker run --user root  -d --name grafana -p 3000:3000  -v /data/grafana-data/etc:/etc/grafana/ 
    复制代码
  • 跨域访问

    grafana嵌入其他系统中通常需要跨域访问,此时也需要修改配置文件

    /etc/grafana/grafana.ini配置文件修改allow_embedding = true
    ​
    kiosk=tv
    复制代码

3、面板搭建

参考:kalacloud.com/blog/grafan…

4 grafana权限管理

  • 添加用户及用户组

    参考:blog.csdn.net/qq_34355232…

  • 为dashboard添加权限管理

    首先,Dashboard的权限是继承自所在Folder的权限,所以你会看到部分已有权限后面有一个小锁的标志,代表权限不能修改,如若修改,只能通过修改对应Folder的权限;也就是说,所谓Grafana Dashboard的权限控制,即Folder(文件夹)的权限控制

基于Prometheus+grafana+mysql的k8s集群监控_第1张图片

如果想要给单个dashboard添加相应权限,可在"Dashboard settings"--> "Permissions"-->“Add Permission”,为某用户或小组添加权限;
 

 

你可能感兴趣的:(mysql,linux,docker,后端,程序人生)