Prometheus是部署一种开源的监控和警报工具,用于收集和记录应用程序和系统的实战度量数据。它特别适用于在Kubernetes集群中监控容器化应用程序。操作Kubernetes集群中通常与Prometheus一起使用的进阶组件是Prometheus Operator和Grafana。
以下是部署在Kubernetes中使用Prometheus的主要步骤:
安装Prometheus Operator:Prometheus Operator是一种Kubernetes控制器,用于简化Prometheus的实战部署和管理。您可以通过在Kubernetes中部署Prometheus Operator来自动设置和管理Prometheus实例。操作
配置Prometheus实例:Prometheus Operator将通过Kubernetes的进阶自定义资源定义(CRD)创建和管理Prometheus实例。您可以使用PrometheusRule CRD定义监控规则,部署并使用ServiceMonitor CRD定义需要监控的实战目标(例如Kubernetes服务)。
配置和导入Dashboard:Grafana通常与Prometheus一起使用,操作用于可视化监控指标。您可以在Grafana中导入Prometheus的预定义仪表板或自定义仪表板来查看和分析度量数据。
监控应用程序和系统:Prometheus通过HTTP端点从目标应用程序和系统中拉取度量数据。您可以在应用程序中暴露Prometheus格式的度量数据,并在ServiceMonitor中定义用于监控的目标。
警报配置:Prometheus还支持配置警报规则,以便在达到特定阈值或条件时触发警报。警报规则可以定义为PrometheusRule CRD。
请注意,Prometheus和Prometheus Operator的配置和使用在实际环境中可能会因版本和具体的Kubernetes发行版而有所不同。为了获得更详细和准确的指导,请查阅官方文档和适用于您特定环境的教程。
图片
以下这些工具可以用于在 Kubernetes 集群中实现监控和指标收集,以便于监视集群中的各种资源和应用的性能。
heapster-》metrics-server-》prometheus-operator -》kube-prometheus-》kube-prometheus-stack
这些工具的组合可以帮助您搭建一个完整的监控系统,用于监视 Kubernetes 集群中的资源利用率、应用的性能、服务的可用性等指标。请注意,随着时间的推移,Kubernetes 社区的工具和技术也可能会有变化和演进,因此在使用这些工具时,建议查阅相关文档以获得最新信息和最佳实践。
"kube-prometheus" 和 "kube-prometheus-stack" 本质上是同一个项目,只是在不同的时间和版本中使用了不同的名称。"kube-prometheus-stack" 是 "kube-prometheus" 项目的更新版本,它提供了更多的功能、改进和修复。
总结起来,"kube-prometheus-stack" 是 "kube-prometheus" 项目的更新版本,提供更多的功能和改进,是一个便捷的综合性监控解决方案,适合在 Kubernetes 环境中快速部署和使用。
"Prometheus Operator" 和 "kube-prometheus"(或 "kube-prometheus-stack")都是用于在 Kubernetes 集群中部署和管理 Prometheus 监控系统的工具。它们有一些相似之处,但也存在一些区别。以下是它们的主要特点和区别的对比:
Prometheus Operator:
kube-prometheus 或 kube-prometheus-stack:
综合来看,Prometheus Operator 专注于 Prometheus 和相关资源的管理和自动化配置,而 kube-prometheus 或 kube-prometheus-stack 则是一个更加综合的解决方案,适合快速启动一个完整的监控系统,尤其对于刚开始使用 Prometheus 的用户来说,可以减少配置的复杂性。您可以根据实际需求和情况选择合适的工具。
图片
Prometheus Operator 是一个用于在 Kubernetes 集群中自动化部署和管理 Prometheus 监控系统的控制器。它采用了声明式配置的方式,通过 Kubernetes 自定义资源定义(Custom Resource Definitions,CRDs)来定义和管理 Prometheus、ServiceMonitor、Alertmanager、PrometheusRule 等资源对象。以下是 Prometheus Operator 的架构说明:
ServiceMonitor 作用和示例讲解:
ServiceMonitor 是 Prometheus Operator 中的一个自定义资源定义(CRD),用于定义要监控的应用程序服务。它的作用是指定哪些服务需要被 Prometheus 监控,以及如何进行监控。ServiceMonitor 在 Prometheus Operator 中的使用非常重要,因为它能够自动发现被监控的服务,并生成适当的监控配置。
下面是一个 ServiceMonitor 的示例讲解:
假设有一个名为 "my-app" 的应用程序在 Kubernetes 集群中运行,我们希望 Prometheus 监控该应用程序的性能指标。首先,我们需要创建一个 ServiceMonitor 自定义资源来定义该应用程序的监控配置。
apiVersion: monitoring.coreos.com/v1kind: ServiceMonitormetadata: name: my-app-monitor namespace: defaultspec: selector: matchLabels: app: my-app endpoints: - port: web interval: 30s
在上述示例中:
通过创建这个 ServiceMonitor 对象,Prometheus Operator 将自动发现带有标签 app: my-app 的 Pod,并在 Prometheus 配置中生成相应的监控作业(job)。这样,Prometheus 就会定期抓取这些 Pod 的指标数据,以进行监控和告警。
通过使用 Prometheus Operator,您可以通过简单的声明式配置来自动管理和扩展 Prometheus 监控系统,从而使监控的部署和维护更加简单和可靠。
最开始是Heapster+cAdvisor方式监控,这是Prometheus Operator出现之前的k8s监控方案。后来出现了Prometheus Operator,但是目前Prometheus Operator已经不包含完整功能,完整的解决方案已经变为kube-prometheus(或kube-prometheus-stack)。
"kube-prometheus" 和 "kube-prometheus-stack" 本质上是同一个项目,只是在不同的时间和版本中使用了不同的名称。"kube-prometheus-stack" 是 "kube-prometheus" 项目的更新版本,它提供了更多的功能、改进和修复。
kube-prometheus-stack GitHub地址:https://github.com/prometheus-community/helm-charts/tree/main/charts/kube-prometheus-stack
k8s 环境安装之前写过很多文档,可以参考我以下几篇文章:
下载地址:https://github.com/kubernetes/helm/releases
# 下载包wget https://get.helm.sh/helm-v3.7.1-linux-amd64.tar.gz# 解压压缩包tar -xf helm-v3.7.1-linux-amd64.tar.gz# 制作软连接ln -s /opt/helm/linux-amd64/helm /usr/local/bin/helm# 验证helm versionhelm help
第一种方法是下载 manifests 包里的yaml,再通过 kubectl 部署。
下载地址:https://github.com/prometheus-operator/kube-prometheus
git clone https://github.com/prometheus-operator/kube-prometheus.gitcd kube-prometheus
【注】在 release-0.11 版本之后新增了 NetworkPolicy 默认是允许自己访问,如果了解 NetworkPolicy 可以修改一下默认的规则,可以用查看 ls manifests/*networkPolicy*,如果不修改的话则会影响到修改 NodePort 类型也无法访问,如果不会 Networkpolicy 可以直接删除就行。
国外镜像源某些镜像无法拉取,我们这里修改prometheus-operator,prometheus,alertmanager,kube-state-metrics,node-exporter,prometheus-adapter的镜像源为国内镜像源。我这里使用的是中科大的镜像源。
# 查找grep -rn 'quay.io' *# 批量替换sed -i 's/quay.io/quay.mirrors.ustc.edu.cn/g' `grep "quay.io" -rl *`# 再查找grep -rn 'quay.io' *grep -rn 'image: ' *
为了可以从外部访问 prometheus,alertmanager,grafana,我们这里修改 promethes,alertmanager,grafana的 service 类型为 NodePort 类型。
# 设置对外访问端口,增加如下两行,完整配置也贴出来了。# type: NodePort# nodePort: 30090vi manifests/prometheus-service.yaml
完整配置
apiVersion: v1kind: Servicemetadata: labels: app.kubernetes.io/component: prometheus app.kubernetes.io/instance: k8s app.kubernetes.io/name: prometheus app.kubernetes.io/part-of: kube-prometheus app.kubernetes.io/version: 2.46.0 name: prometheus-k8s namespace: monitoringspec: type: NodePort ports: - name: web port: 9090 targetPort: web nodePort: 30090 - name: reloader-web port: 8080 targetPort: reloader-web selector: app.kubernetes.io/component: prometheus app.kubernetes.io/instance: k8s app.kubernetes.io/name: prometheus app.kubernetes.io/part-of: kube-prometheus sessionAffinity: ClientIP
完整配置
# 设置对外访问端口,增加如下两行,完整配置也贴出来了。# type: NodePort# nodePort: 30300vi manifests/grafana-service.yaml
完整配置
apiVersion: v1kind: Servicemetadata: labels: app.kubernetes.io/component: grafana app.kubernetes.io/name: grafana app.kubernetes.io/part-of: kube-prometheus app.kubernetes.io/version: 9.5.3 name: grafana namespace: monitoringspec: type: NodePort ports: - name: http port: 3000 targetPort: http nodePort: 30300 selector: app.kubernetes.io/component: grafana app.kubernetes.io/name: grafana app.kubernetes.io/part-of: kube-prometheus
# 设置对外访问端口,增加如下两行,完整配置也贴出来了。# type: NodePort# nodePort: 30093vi manifests/grafana-service.yaml
完整配置
apiVersion: v1kind: Servicemetadata: labels: app.kubernetes.io/component: alert-router app.kubernetes.io/instance: main app.kubernetes.io/name: alertmanager app.kubernetes.io/part-of: kube-prometheus app.kubernetes.io/version: 0.25.0 name: alertmanager-main namespace: monitoringspec: type: NodePort ports: - name: web port: 9093 targetPort: web nodePort: 30093 - name: reloader-web port: 8080 targetPort: reloader-web selector: app.kubernetes.io/component: alert-router app.kubernetes.io/instance: main app.kubernetes.io/name: alertmanager app.kubernetes.io/part-of: kube-prometheus sessionAffinity: ClientIP
kubectl apply --server-side -f manifests/setupkubectl wait \ --for cnotallow=Established \ --all CustomResourceDefinition \ --namespace=monitoringkubectl apply -f manifests/# 查看kubectl get all -n monitoring
图片
【温馨提示】如果上面下载镜像失败,可以使用以下地址下载,当然也可以去hub.docker.com下载。
这里也提供镜像包
链接:https://pan.baidu.com/s/10ksK1OtKwlvZqbExKmZgLw?pwd=bcu6提取码:bcu6
Prometheus:http://ip:30090/
图片
Grafana :http://ip:30300/默认账号/密码:admin/admin
图片
Alertmanager:http://ip:30093/
图片
kubectl delete --ignore-not-found=true -f manifests/ -f manifests/setup
# 添加repohelm repo add prometheus-community https://prometheus-community.github.io/helm-chartshelm repo update# 查询helm search repo prometheus-community/prometheus# 拉包helm pull prometheus-community/kube-prometheus-stack --versinotallow=48.4.0# 解包tar -xf kube-prometheus-stack-48.4.0.tgz
查看所需要的镜像,最好提前下载镜像,要不然很大可能会因为下载镜像失败而安装失败。
grep -A3 'image:' kube-prometheus-stack/values.yaml
图片
helm install mykube-prometheus-stack kube-prometheus-stack \ -n kube-prometheus-stack --create-namespace \ --set prometheus-node-exporter.hostRootFsMount=false \ --set prometheus.ingress.enabled=true \ --set prometheus.ingress.hosts='{ prometheus.k8s.local}' \ --set prometheus.ingress.paths='{ /}' \ --set prometheus.ingress.pathType=Prefix \ --set alertmanager.ingress.enabled=true \ --set alertmanager.ingress.hosts='{ alertmanager.k8s.local}' \ --set alertmanager.ingress.paths='{ /}' \ --set alertmanager.ingress.pathType=Prefix \ --set grafana.ingress.enabled=true \ --set grafana.ingress.hosts='{ grafana.k8s.local}' \ --set grafana.ingress.paths='{ /}' \ --set grafana.ingress.pathType=Prefix
helm uninstall mykube-prometheus-stack -n kube-prometheus-stack
责任编辑:武晓燕 来源: 大数据与云原生技术分享 k8sPrometheusOperator(责任编辑:百科)
港铁公司(0066.HK)去年大幅亏损48.09亿港元 全年普通股息合共每股1.23港元