一、基于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 <none> 9093/TCP 42d
alertmanager-operated ClusterIP None <none> 9093/TCP,9094/TCP,9094/UDP 42d
kube-state-metrics ClusterIP None <none> 8443/TCP,9443/TCP 42d
prometheus-adapter ClusterIP 11.1.178.197 <none> 443/TCP 42d
prometheus-k8s NodePort 11.1.253.224 <none> 9090:8098/TCP 42d
prometheus-operated ClusterIP None <none> 9090/TCP 42d
prometheus-operator ClusterIP None <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、面板搭建
4 grafana权限管理
-
添加用户及用户组
-
为dashboard添加权限管理
首先,Dashboard的权限是继承自所在Folder的权限,所以你会看到部分已有权限后面有一个小锁的标志,代表权限不能修改,如若修改,只能通过修改对应Folder的权限;也就是说,所谓Grafana Dashboard的权限控制,即Folder(文件夹)的权限控制;
如果想要给单个dashboard添加相应权限,可在"Dashboard settings"--> "Permissions"-->“Add Permission”,为某用户或小组添加权限;