Prometheus Operator 是一个 Kubernetes 的运算符(Operator),它用于简化在 Kubernetes 上部署、管理和操作 Prometheus 及相关组件的过程。
Prometheus Operator 提供了一种声明式的方式来定义和管理 Prometheus 实例、ServiceMonitors、Alertmanagers 和其他与 Prometheus 相关的资源。它使用自定义资源定义(Custom Resource Definitions,CRDs)来扩展 Kubernetes API,并通过控制器(Controller)管理这些资源的生命周期。
以下是 Prometheus Operator 的一些主要功能和概念:
使用 Prometheus Operator 可以简化 Prometheus 的运维过程,并提供了一种基于 Kubernetes 原生特性的方式来管理和监控应用程序。它使得在 Kubernetes 集群中部署和管理 Prometheus 变得更加方便、灵活和可靠。
其中Prometheus资源描述了 Prometheus部署,而ServiceMonitor
和PodMonitor
资源 描述prometheus监控的服务
kube-prometheus版本 | kubenetes版本 |
---|---|
release-0.4 | 1.16、1.17 |
release-0.5 | 1.18 |
release-0.6 | 1.18、1.19 |
release-0.7 | 1.19、1.20 |
release-0.8 | 1.20、1.21 |
release-0.9 | 1.21、1.22 |
release-0.10 | 1.22、1.23 |
release-0.11 | 1.23、1.24 |
main | 1.24 |
参考连接:https://github.com/prometheus-operator/kube-prometheus#compatibility
# kubectl get nodes
NAME STATUS ROLES AGE VERSION
k8s-master-50.57 Ready control-plane,master 77d v1.20.5
k8s-node-50.58 Ready <none> 77d v1.20.5
k8s-node-50.59 Ready <none> 77d v1.20.5
git clone -b release-0.8 https://github.com/prometheus-operator/kube-prometheus.git
### 由gitee下载
git clone -b release-0.8 https://gitee.com/root_007/kube-prometheus.git
# ll
总用量 184
-rw-r--r-- 1 root root 679 8月 3 13:58 build.sh
-rw-r--r-- 1 root root 3039 8月 3 13:58 code-of-conduct.md
-rw-r--r-- 1 root root 1422 8月 3 13:58 DCO
drwxr-xr-x 2 root root 4096 8月 3 13:58 docs
-rw-r--r-- 1 root root 2051 8月 3 13:58 example.jsonnet
drwxr-xr-x 7 root root 4096 8月 3 13:58 examples
drwxr-xr-x 3 root root 28 8月 3 13:58 experimental
-rw-r--r-- 1 root root 237 8月 3 13:58 go.mod
-rw-r--r-- 1 root root 59996 8月 3 13:58 go.sum
drwxr-xr-x 3 root root 68 8月 3 13:58 hack
drwxr-xr-x 3 root root 29 8月 3 13:58 jsonnet
-rw-r--r-- 1 root root 206 8月 3 13:58 jsonnetfile.json
-rw-r--r-- 1 root root 4857 8月 3 13:58 jsonnetfile.lock.json
drwxr-xr-x 2 root root 6 8月 3 13:58 kube-prometheus
-rw-r--r-- 1 root root 4437 8月 3 13:58 kustomization.yaml
-rw-r--r-- 1 root root 11325 8月 3 13:58 LICENSE
-rw-r--r-- 1 root root 2101 8月 3 13:58 Makefile
drwxr-xr-x 3 root root 4096 8月 3 13:58 manifests
-rw-r--r-- 1 root root 126 8月 3 13:58 NOTICE
-rw-r--r-- 1 root root 38246 8月 3 13:58 README.md
drwxr-xr-x 2 root root 187 8月 3 13:58 scripts
-rw-r--r-- 1 root root 928 8月 3 13:58 sync-to-internal-registry.jsonnet
drwxr-xr-x 3 root root 17 8月 3 13:58 tests
-rw-r--r-- 1 root root 808 8月 3 13:58 test.sh
# tree manifests/
manifests/
├── alertmanager-alertmanager.yaml
├── alertmanager-podDisruptionBudget.yaml
├── alertmanager-prometheusRule.yaml
├── alertmanager-secret.yaml
├── alertmanager-serviceAccount.yaml
├── alertmanager-serviceMonitor.yaml
├── alertmanager-service.yaml
├── blackbox-exporter-clusterRoleBinding.yaml
├── blackbox-exporter-clusterRole.yaml
├── blackbox-exporter-configuration.yaml
├── blackbox-exporter-deployment.yaml
├── blackbox-exporter-serviceAccount.yaml
├── blackbox-exporter-serviceMonitor.yaml
├── blackbox-exporter-service.yaml
├── grafana-dashboardDatasources.yaml
├── grafana-dashboardDefinitions.yaml
├── grafana-dashboardSources.yaml
├── grafana-deployment.yaml
├── grafana-serviceAccount.yaml
├── grafana-serviceMonitor.yaml
├── grafana-service.yaml
├── kube-prometheus-prometheusRule.yaml
├── kubernetes-prometheusRule.yaml
├── kubernetes-serviceMonitorApiserver.yaml
├── kubernetes-serviceMonitorCoreDNS.yaml
├── kubernetes-serviceMonitorKubeControllerManager.yaml
├── kubernetes-serviceMonitorKubelet.yaml
├── kubernetes-serviceMonitorKubeScheduler.yaml
├── kube-state-metrics-clusterRoleBinding.yaml
├── kube-state-metrics-clusterRole.yaml
├── kube-state-metrics-deployment.yaml
├── kube-state-metrics-prometheusRule.yaml
├── kube-state-metrics-serviceAccount.yaml
├── kube-state-metrics-serviceMonitor.yaml
├── kube-state-metrics-service.yaml
├── node-exporter-clusterRoleBinding.yaml
├── node-exporter-clusterRole.yaml
├── node-exporter-daemonset.yaml
├── node-exporter-prometheusRule.yaml
├── node-exporter-serviceAccount.yaml
├── node-exporter-serviceMonitor.yaml
├── node-exporter-service.yaml
├── prometheus-adapter-apiService.yaml
├── prometheus-adapter-clusterRoleAggregatedMetricsReader.yaml
├── prometheus-adapter-clusterRoleBindingDelegator.yaml
├── prometheus-adapter-clusterRoleBinding.yaml
├── prometheus-adapter-clusterRoleServerResources.yaml
├── prometheus-adapter-clusterRole.yaml
├── prometheus-adapter-configMap.yaml
├── prometheus-adapter-deployment.yaml
├── prometheus-adapter-roleBindingAuthReader.yaml
├── prometheus-adapter-serviceAccount.yaml
├── prometheus-adapter-serviceMonitor.yaml
├── prometheus-adapter-service.yaml
├── prometheus-clusterRoleBinding.yaml
├── prometheus-clusterRole.yaml
├── prometheus-operator-prometheusRule.yaml
├── prometheus-operator-serviceMonitor.yaml
├── prometheus-podDisruptionBudget.yaml
├── prometheus-prometheusRule.yaml
├── prometheus-prometheus.yaml
├── prometheus-roleBindingConfig.yaml
├── prometheus-roleBindingSpecificNamespaces.yaml
├── prometheus-roleConfig.yaml
├── prometheus-roleSpecificNamespaces.yaml
├── prometheus-serviceAccount.yaml
├── prometheus-serviceMonitor.yaml
├── prometheus-service.yaml
└── setup
├── 0namespace-namespace.yaml
├── prometheus-operator-0alertmanagerConfigCustomResourceDefinition.yaml
├── prometheus-operator-0alertmanagerCustomResourceDefinition.yaml
├── prometheus-operator-0podmonitorCustomResourceDefinition.yaml
├── prometheus-operator-0probeCustomResourceDefinition.yaml
├── prometheus-operator-0prometheusCustomResourceDefinition.yaml
├── prometheus-operator-0prometheusruleCustomResourceDefinition.yaml
├── prometheus-operator-0servicemonitorCustomResourceDefinition.yaml
├── prometheus-operator-0thanosrulerCustomResourceDefinition.yaml
├── prometheus-operator-clusterRoleBinding.yaml
├── prometheus-operator-clusterRole.yaml
├── prometheus-operator-deployment.yaml
├── prometheus-operator-serviceAccount.yaml
└── prometheus-operator-service.yaml
1 directory, 82 files
kubectl apply -f manifests/setup/
kubectl apply -f manifests/
首先创建名称空间和CRDs,避免在部署其他组件时出现竞争
# kubectl get pod -n monitoring
NAME READY STATUS RESTARTS AGE
alertmanager-main-0 2/2 Running 0 21m
alertmanager-main-1 2/2 Running 0 21m
alertmanager-main-2 2/2 Running 0 21m
blackbox-exporter-55c457d5fb-4ldl5 3/3 Running 0 21m
grafana-9df57cdc4-qqqdl 1/1 Running 0 21m
kube-state-metrics-657b8c7649-sprs5 3/3 Running 0 3m23s
node-exporter-n4qp9 2/2 Running 0 21m
node-exporter-nm9hm 2/2 Running 0 21m
node-exporter-rzxbb 2/2 Running 0 21m
prometheus-adapter-59df95d9f5-hj75h 1/1 Running 0 21m
prometheus-adapter-59df95d9f5-qcpbq 1/1 Running 0 21m
prometheus-k8s-0 2/2 Running 1 21m
prometheus-k8s-1 2/2 Running 1 21m
prometheus-operator-7775c66ccf-qfsxh 2/2 Running 0 21m
# 出现如上状态,表示安装成功
注:镜像下载失败参考https://github.com/DaoCloud/public-image-mirror该项目做映射,或者使用其他的下载方式,当然如果有魔法可以使用魔法打败魔法
# kubectl get crd | grep monitoring.coreos.com
alertmanagerconfigs.monitoring.coreos.com 2023-08-03T06:12:40Z
alertmanagers.monitoring.coreos.com 2023-08-03T06:12:40Z
podmonitors.monitoring.coreos.com 2023-08-03T06:12:40Z
probes.monitoring.coreos.com 2023-08-03T06:12:40Z
prometheuses.monitoring.coreos.com 2023-08-03T06:12:40Z
prometheusrules.monitoring.coreos.com 2023-08-03T06:12:41Z
servicemonitors.monitoring.coreos.com 2023-08-03T06:12:41Z
thanosrulers.monitoring.coreos.com 2023-08-03T06:12:41Z
CRD说明:
alertmanagerconfigs:
alertmanagers:
podmonitors:
probes:
prometheuses:
prometheusrules:
servicemonitors:
thanosrulers:
# 这里属于一个Demo,咱们就通过kubectl port-forward 做个端口映射,生产环境可以通过NodePort或者Ingress进行对外暴露
[root@k8s-master-50.57 ~/prometheus/aa/kube-prometheus/manifests] eth0 = 192.168.50.57
# kubectl --namespace monitoring port-forward svc/prometheus-k8s --address 0.0.0.0 19090:9090
Forwarding from 0.0.0.0:19090 -> 9090
那接下来,咱们就访问一下Prometheus吧!如下图:
[root@k8s-master-50.57 ~/prometheus/aa/kube-prometheus/manifests] eth0 = 192.168.50.57
# kubectl --namespace monitoring port-forward svc/grafana --address 0.0.0.0 13000:3000
Forwarding from 0.0.0.0:13000 -> 3000
那接下来,咱们就访问一下Grafana吧!如下图:
注:默认账号密码:admin/admin
[root@k8s-master-50.57 ~/prometheus/aa/kube-prometheus/manifests] eth0 = 192.168.50.57
# kubectl --namespace monitoring port-forward svc/alertmanager-main --address 0.0.0.0 19093:9093
Forwarding from 0.0.0.0:19093 -> 9093
那接下来,咱们就访问一下Alertmanager吧!如下图:
修改grafana的service类型为NodePort
apiVersion: v1
kind: Service
metadata:
labels:
app.kubernetes.io/component: grafana
app.kubernetes.io/name: grafana
app.kubernetes.io/part-of: kube-prometheus
app.kubernetes.io/version: 7.5.4
name: grafana
namespace: monitoring
spec:
type: NodePort
ports:
- name: http
port: 3000
targetPort: http
selector:
app.kubernetes.io/component: grafana
app.kubernetes.io/name: grafana
app.kubernetes.io/part-of: kube-prometheus
[root@k8s-master-50.57 ~/prometheus/aa/kube-prometheus/manifests] eth0 = 192.168.50.57
# kubectl get svc -n monitoring | grep grafana
grafana NodePort 200.96.25.92 <none> 3000:30966/TCP 44m
修改prometheus的service类型为NodePort
apiVersion: v1
kind: Service
metadata:
labels:
app.kubernetes.io/component: prometheus
app.kubernetes.io/name: prometheus
app.kubernetes.io/part-of: kube-prometheus
app.kubernetes.io/version: 2.26.0
prometheus: k8s
name: prometheus-k8s
namespace: monitoring
spec:
type: NodePort
ports:
- name: web
port: 9090
targetPort: web
selector:
app: prometheus
app.kubernetes.io/component: prometheus
app.kubernetes.io/name: prometheus
app.kubernetes.io/part-of: kube-prometheus
prometheus: k8s
sessionAffinity: ClientIP
[root@k8s-master-50.57 ~/prometheus/aa/kube-prometheus/manifests] eth0 = 192.168.50.57
# kubectl get svc -n monitoring | grep prometheus-k8s
prometheus-k8s NodePort 200.108.12.8 <none> 9090:32024/TCP 46m
输入Prometheus连接信息
点击Test出现Data source is working即为成功
拷贝dashboard面板ID,当然也可以下载该dashboard对应的json文件
然后到Grafana控制台进行导入模版
点击Load
本次案例使用的是ID,当然也可以使用加载json文件的方式。
导入成功了,咱们可以看下效果,如下图!
本文章讲解了如何通过Prometheues Opeartor方式进行快速部署Prometheues以及Grafana模版使用等内容,下期内容:讲解Promethues自定义监控项,请敬请期待!