快捷菜单
常用功能一站直达
更多功能请点顶栏「快捷菜单」
《实战-prometheus部署到k8s-2022.4.29(测试成功)》https://onedayxyy.cn/topic/fhkgp

😎实验环境
1k8s:v1.22.2(1 master,2 node)
2containerd: v1.5.5
3prometneus: docker.io/prom/prometheus:v2.34.0
4grafana/grafana:8.4.6😎实验软件
直接拷贝文档代码即可!
链接:https://pan.baidu.com/s/1Gdvi4Xu1yQqVG6jeuprrRg?pwd=9cgh
提取码:9cgh
2020.5.4-grafana-code

同样的我们将 grafana 安装到 Kubernetes 集群中,第一步去查看 grafana 的 docker 镜像的介绍,我们可以在 dockerhub 上去搜索,也可以在官网去查看相关资料,镜像地址如下:https://hub.docker.com/r/grafana/grafana/,我们可以看到介绍中运行 grafana 容器的命令非常简单:
1$ docker run -d --name=grafana -p 3000:3000 grafana/grafana
但是还有一个需要注意的是 Changelog 中v5.1.0版本的更新介绍:
1Major restructuring of the container
2Usage of chown removed
3File permissions incompatibility with previous versions
4user id changed from 104 to 472
5group id changed from 107 to 472
6Runs as the grafana user by default (instead of root)
7All default volumes removed特别需要注意第3条,userid 和 groupid 都有所变化,所以我们在运行的容器的时候需要注意这个变化。
本次测试目录如下:
1[root@master1 ~]#mkdir grafana
2[root@master1 ~]#cd grafana/1[root@master1 grafana]#ssh node1
2Last login: Sat Apr 30 12:56:43 2022 from master1
3[root@node1 ~]#mkdir -p /data/k8s/grafana[root@master1 grafana]#vim grafana-deployment.yaml
1# grafana-deployment.yaml
2apiVersion: apps/v1
3kind: Deployment
4metadata:
5 name: grafana
6 namespace: monitor
7spec:
8 selector:
9 matchLabels:
10 app: grafana
11 template:
12 metadata:
13 labels:
14 app: grafana
15 spec:
16 volumes:
17 - name: storage
18 persistentVolumeClaim:
19 claimName: grafana-pvc
20 securityContext: #注意:这里以root身份运行!
21 runAsUser: 0
22 containers:
23 - name: grafana
24 image: grafana/grafana:8.4.6
25 imagePullPolicy: IfNotPresent
26 ports:
27 - containerPort: 3000
28 name: grafana
29 env:
30 - name: GF_SECURITY_ADMIN_USER
31 value: admin
32 - name: GF_SECURITY_ADMIN_PASSWORD #这里最好用secret引用过来!
33 value: admin321
34 readinessProbe:
35 failureThreshold: 10
36 httpGet:
37 path: /api/health
38 port: 3000
39 scheme: HTTP
40 periodSeconds: 10
41 successThreshold: 1
42 timeoutSeconds: 30
43 livenessProbe:
44 failureThreshold: 3
45 httpGet:
46 path: /api/health
47 port: 3000
48 scheme: HTTP
49 periodSeconds: 10
50 successThreshold: 1
51 timeoutSeconds: 1
52 resources:
53 limits:
54 cpu: 150m
55 memory: 512Mi
56 requests:
57 cpu: 150m
58 memory: 512Mi
59 volumeMounts:
60 - mountPath: /var/lib/grafana #grafana的数据目录:数据库及插件等!
61 name: storage
62---
63apiVersion: v1
64kind: Service
65metadata:
66 name: grafana
67 namespace: monitor
68spec:
69 type: NodePort
70 ports:
71 - port: 3000
72 selector:
73 app: grafana[root@master1 grafana]#vim grafana-pvc.yaml
1#grafana-pvc.yaml
2apiVersion: v1
3kind: PersistentVolume
4metadata:
5 name: grafana-local
6 labels:
7 app: grafana
8spec:
9 accessModes:
10 - ReadWriteOnce
11 capacity:
12 storage: 2Gi
13 storageClassName: local-storage
14 local:
15 path: /data/k8s/grafana #一定要先在宿主机node1上提前创建这个目录!!!
16 nodeAffinity: #pv也是可以配置节点亲和性的哦!!!
17 required:
18 nodeSelectorTerms:
19 - matchExpressions:
20 - key: kubernetes.io/hostname
21 operator: In
22 values:
23 - node1 #这里是自己的node1节点
24 persistentVolumeReclaimPolicy: Retain
25---
26apiVersion: v1
27kind: PersistentVolumeClaim
28metadata:
29 name: grafana-pvc
30 namespace: monitor
31spec:
32 selector:
33 matchLabels:
34 app: grafana
35 accessModes:
36 - ReadWriteOnce
37 resources:
38 requests:
39 storage: 2Gi
40 storageClassName: local-storage我们使用了最新的镜像 grafana/grafana:8.4.6,然后添加了健康检查、资源声明。
另外两个比较重要的环境变量GF_SECURITY_ADMIN_USER 和 GF_SECURITY_ADMIN_PASSWORD,用来配置 grafana 的管理员用户和密码的。由于 grafana 将 dashboard、插件这些数据保存在 /var/lib/grafana 这个目录下面的,所以我们这里如果需要做数据持久化的话,就需要针对这个目录进行 volume 挂载声明。
由于上面我们刚刚提到的 Changelog 中 grafana 的 userid 和 groupid 有所变化,所以我们这里增加一个 securityContext 的声明来进行声明使用 root 用户运行。
最后,我们需要对外暴露 grafana 这个服务,所以我们需要一个对应的 Service 对象,当然用 NodePort 或者再建立一个 ingress 对象都是可行的。
1(1)先创建grafana-pvc.yaml
2[root@master1 grafana]#kubectl apply -f grafana-pvc.yaml
3persistentvolume/grafana-local created
4persistentvolumeclaim/grafana-pvc created
5[root@master1 grafana]#kubectl get pv grafana-local
6NAME CAPACITY ACCESS MODES RECLAIM POLICY STATUS CLAIM STORAGECLASS REASON AGE
7grafana-local 2Gi RWO Retain Bound monitor/grafana-pvc local-storage 16s
8[root@master1 grafana]#kubectl get pvc -nmonitor grafana-pvc
9NAME STATUS VOLUME CAPACITY ACCESS MODES STORAGECLASS AGE
10grafana-pvc Bound grafana-local 2Gi RWO local-storage 40s
11
12
13(2)再创建grafana-deployment.yaml
14[root@master1 grafana]#kubectl apply -f grafana-deployment.yaml
15deployment.apps/grafana created
16
17service/grafana created
18#创建完成后,我们可以查看 grafana 对应的 Pod 是否正常:
19[root@master1 grafana]#kubectl get po -l app=grafana -nmonitor -owide
20NAME READY STATUS RESTARTS AGE IP NODE NOMINATED NODE READINESS GATES
21grafana-86d545fc5-42jhd 1/1 Running 0 99s 10.244.1.90 node1 <none> <none>

看到上面的日志信息就证明我们的 grafana 的 Pod 已经正常启动起来了。
这个时候我们可以查看 Service 对象:
1[root@master1 grafana]#kubectl get svc -nmonitor
2NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
3grafana NodePort 10.100.237.2 <none> 3000:30338/TCP 3m22s
4prometheus NodePort 10.101.131.61 <none> 9090:32700/TCP 4d9h
5redis ClusterIP 10.103.59.18 <none> 6379/TCP,9121/TCP 24h现在我们就可以在浏览器中使用 http://<任意节点IP:30338> 来访问 grafana 这个服务了:
admin/admin321


由于上面我们配置了管理员的,所以第一次打开的时候会跳转到登录界面,然后就可以用上面我们配置的两个环境变量的值来进行登录了,登录完成后就可以进入到下面 Grafana 的首页。
然后点击Add data source进入添加数据源界面。我们这个地方配置的数据源是 Prometheus,我们这里 Prometheus 和 Grafana 都处于 monitor这同一个 namespace 下面,所以我们这里的数据源地址:http://prometheus:9090(因为在同一个 namespace 下面所以直接用 Service 名也可以),然后其他的配置信息就根据实际情况了,比如 Auth 认证,我们这里没有,所以跳过即可,点击最下方的 Save & Test 提示成功证明我们的数据源配置正确:





注意:Browser这种方式将被废弃!(如果是Browser的话,URL就需要添加:http://nodeIp:nortPOrt形式了)
Server:服务端,Browser:客户端;

点击Save&test:

查看:

为了能够快速对系统进行监控,我们可以直接复用别人的 Grafana Dashboard。在 Grafana 的官方网站上就有很多非常优秀的第三方 Dashboard,我们完全可以直接导入进来即可。比如我们想要对所有的集群节点进行监控,也就是 node-exporter 采集的数据进行展示,这里我们就可以导入 https://grafana.com/grafana/dashboards/8919 这个 Dashboard。
Import,在 Grafana Dashboard 的文本框中输入 8919 即可导入:

保存后即可进入导入的 Dashboard 页面。

结束。
日历 · 精选 · 友链 · 更多
如果内容对你有帮助,欢迎请我喝杯咖啡 ☕



One的公众号
爱折腾博客的小白