暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

Kubernetes中Grafana+grafana-kubernetes plugin的安装使用

蛮懒 2020-05-24
1107

背景介绍

Prometheus采集Kubernetes 集群中的一些监控数据指标,使用promQL语句查询数据并在Prometheus自带的Dashboard中进行了展示,由于Prometheus图表功能相对较弱,所以本文通过grafana对Prometheus采集到的数据进行展示。

grafana支持 Graphite、zabbix、InfluxDB、Prometheus、OpenTSDB、Elasticsearch 等作为数据源,有丰富的插件支持数据的可视化展示。

docker安装方式

docker run -d --name=grafana -p 3000:3000 -v  $GRAFANA_PATH:/var/lib/grafana grafana/grafana

Kubernetes安装方式

grafana 将 dashboard、插件等数据保存在/var/lib/grafana目录下,因此可通过pvc对象做数据持久化,grafana-pv-pvc.yaml文件编写如下:

apiVersion: v1
kind: PersistentVolume
metadata:
name: grafana
spec:
capacity:
storage: 1Gi
accessModes:
- ReadWriteOnce
persistentVolumeReclaimPolicy: Recycle
nfs:
    server: NFS服务IP
path: NFS共享路径
---
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
name: grafana
namespace: kube-ops
spec:
accessModes:
- ReadWriteOnce
resources:
requests:
      storage: 1Gi

grafana-deployment.yaml文件编辑如下:

apiVersion: apps/v1
kind: Deployment
metadata:
name: grafana
namespace: kube-ops
labels:
app: grafana
spec:
selector:
matchLabels:
app: grafana
revisionHistoryLimit: 10
template:
metadata:
labels:
app: grafana
spec:
containers:
- name: grafana
image: grafana/grafana:5.4.3
imagePullPolicy: IfNotPresent
ports:
- containerPort: 3000
name: grafana
env:
- name: GF_SECURITY_ADMIN_USER
              value: grafana的账号
- name: GF_SECURITY_ADMIN_PASSWORD
              value: grafana的密码
readinessProbe:
failureThreshold: 10
httpGet:
path: /api/health
port: 3000
scheme: HTTP
initialDelaySeconds: 60
periodSeconds: 10
successThreshold: 1
timeoutSeconds: 30
livenessProbe:
failureThreshold: 3
httpGet:
path: /api/health
port: 3000
scheme: HTTP
periodSeconds: 10
successThreshold: 1
timeoutSeconds: 1
resources:
limits:
cpu: 100m
memory: 256Mi
requests:
cpu: 100m
memory: 256Mi
volumeMounts:
- mountPath: /var/lib/grafana
name: storage
securityContext:
fsGroup: 1000
runAsUser: 1000
volumes:
- name: storage
persistentVolumeClaim:
claimName: grafana
---
apiVersion: v1
kind: Service
metadata:
name: grafana
namespace: kube-ops
labels:
app: grafana
spec:
type: NodePort
ports:
- port: 3000
targetPort: grafana
      nodePort: 30333
selector:
    app: grafana

通过探针livenessProbe及readinessProbe来监控检查;

通过resources对cpu、内存资源进行声明;

通过env定义环境变量GF_SECURITY_ADMIN_USER(管理员)和GF_SECURITY_ADMIN_PASSWORD(管理员密码)进行之后web页面的登录;

通过securityContext来指定grafana的userid和groupid;

最后创建service对象,通过NodePort对外暴露 grafana 服务;


直接运行命令kubectl create -f grafana-pv-pvc.yaml创建pvc对象,

通过如下命令验证pv中claim字段绑定了pvc

kubectl get pv
kubectl get pvc -n kube-ops
直接运行命令kubectl create -f grafana-deployment.yaml创建pod,

通过命令kubectl get pods -n kube-ops进行验证

通过查看日志:kubectl logs -f grafana-5f7b965b55-wxvvk -n kube-ops

由于yaml中添加securityContext指定了用户名及用户组,执行pod构建之前
我们可以先将挂载目录执行chown操作,
当然也可以通过一次性job在pod中对/var/lib/grafana的所有者进行修改,
具体yaml文件如下:
apiVersion: batch/v1
kind: Job
metadata:
name: grafana-chown
namespace: kube-ops
spec:
template:
spec:
restartPolicy: Never
containers:
- name: grafana-chown
command: ["chown", "-R", "1000:1000", "/var/lib/grafana"]
image: busybox
imagePullPolicy: IfNotPresent
volumeMounts:
- name: storage
mountPath: /var/lib/grafana
securityContext:
fsGroup: 1000
runAsUser: 1000
volumes:
- name: storage
persistentVolumeClaim:
claimName: grafana

利用一个 busybox 镜像将/var/lib/grafana目录更改成了1000这个 user 和 group

通过http://NodeIP:30333访问grafana服务


Grafana Datasource配置

点击Add data source进入添加数据源界面。数据源(以前面搭建的prometheus为例)

设置数据源name:prometheus,最主要的是下面HTTP区域是配置数据源的访问模式。

  • 服务器(Server)访问模式(默认):

    所有请求都将从浏览器发送到 Grafana 后端的服务器,后者又将请求转发到数据源(可以避免一些跨域问题)其实就是在 Grafana 后端做了一次转发,需要从Grafana 后端服务器访问该 URL。

  • 浏览器(Browser)访问模式:

    所有请求都将从浏览器直接发送到数据源(存在跨域问题),需要从浏览器直接访问该 URL。

由于Prometheus 通过NodePort 的方式对外暴露服务,此处可以使用浏览器访问模式直接访问 Prometheus 的外网地址(走外网),也可以通过http://prometheus:9090直接访问(Prometheus 和 Grafana 都处于同一个 namespace下kube-ops,在集群内部可直接通过 DNS 的形式访问,走内网流量),然后其他的配置信息就根据实际情况填写即可,点击最下方的Save & Test提示成功证明我们的数据源配置正确。

数据源添加完成后,就可以来添加 Dashboard 了。

Grafana Dashboard

使用Kubernetes cluster monitoring (via Prometheus)(dashboard id 为162)来展示 Kubernetes 集群的监控信息,在左侧侧边栏 Create 中点击import导入对应的json文件即可

Grafana中Kubernetes集群监控插件:grafana-kubernetes-app

kubectl exec -it grafana-79477fbb7c-v4prs /bin/bash -n kube-ops

执行grafana-cli plugins install grafana-kubernetes-app,会展示下载URL,由于容器内部网络不通Internet无法下载插件到目标目录,所以在外面手动下载插件并解压至/var/lib/grafana挂载的本地目录的plugins目录下,确保目录所有者与前面一致,重启grafana pod,切换到grafana的plugins页面出现Kubernetes的插件,点击进来启动即可,然后点击Next up旁边的链接配置集群

填写k8s集群访问地址:https://kubernetes.default,

指定集群访问的证书,勾选上TLS Client Auth和With CA Cert两项,截图如下,集群认证配置文件~/.kube/config中属性certificate-authority-data、client-certificate-data、client-key-data分别对应CA 证书、Client 证书、Client 私钥(内容是base64编码)

通过echo "XXXX" | base64 -d 进行解码

配置完成后,确保k8s集群中已经安装了kube-state-metrics、node-exporter、prometheus这三个工具后,直接点击Deploy,然后点击Save,就可以获取到集群的监控资源信息。


如果kube-state-metrics、node-exporter尚未安装,需要提前安装,下面给出两个工具对应的yaml文件
kube-state-metrics-deployment.yaml
apiVersion: apps/v1
kind: DaemonSet
metadata:
name: kube-state-metrics
namespace: kube-ops
labels:
k8s-app: kube-state-metrics
spec:
selector:
matchLabels:
name: kube-state-metrics
template:
metadata:
name: kube-state-metrics
labels:
name: kube-state-metrics
spec:
containers:
- name: kube-state-metrics
image: bitnami/kube-state-metrics:1.9.6
imagePullPolicy: IfNotPresent
ports:
- containerPort: 8080
name: http-metrics
hostPort: 8080
readinessProbe:
httpGet:
port: 8080
path: /healthz
initialDelaySeconds: 10
timeoutSeconds: 10
resources:
limits:
memory: 200Mi
requests:
cpu: 100m
memory: 200Mi
restartPolicy: Always
hostNetwork: true
hostPID: true
node-exporter-deployment.yaml
apiVersion: apps/v1
kind: DaemonSet
metadata:
name: node-exporter
namespace: kube-ops
labels:
k8s-app: node-exporter
spec:
selector:
matchLabels:
name: node-exporter
template:
metadata:
name: node-exporter
labels:
name: node-exporter
spec:
volumes:
- name: proc
hostPath:
path: /proc
- name: sys
hostPath:
path: /sys
containers:
- name: node-exporter
image: quay.io/prometheus/node-exporter:v0.15.0
imagePullPolicy: IfNotPresent
args:
- --path.procfs=/proc_host
- --path.sysfs=/host_sys
ports:
- containerPort: 9100
name: node-exporter
hostPort: 9100
resources:
limits:
memory: 200Mi
requests:
cpu: 100m
memory: 200Mi
volumeMounts:
- mountPath: /host_sys
name: sys
readOnly: true
- mountPath: /proc_host
name: proc
readOnly: true
restartPolicy: Always
hostNetwork: true
hostPID: true
prometheus的安装直接参看文章:http://suo.im/6mKhLZ




文章转载自蛮懒,如果涉嫌侵权,请发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论