Prometheus-Operator:快速部署

1. 项目目标

(1)了解Prometheus-Operator的优势

(2)熟练掌握Prometheus-Operator部署

(3)操作Grafana对接Prometheus

2. 项目准备

2.1. 规划节点

主机名

主机IP

节点规划

Prometheus

主机IP

Prometheus-Operator

2.2. 基础准备

系统镜像:CentOS 7.9

github下载网址:prometheus-operator · GitHub

环境准备:kubernetes v1.26

3. 项目实施

3.1. Prometheus-Operator简介

1)什么是Prometheus-Operator

每次对Prometheus配置文件进行升级时,我们需要手动移除已经运行的Pod实例,从而让Kubernetes可以使用最新的配置文件创建Prometheus。 而如果当应用实例的数量更多时,通过手动的方式部署和升级Prometheus过程繁琐并且效率低下。

从本质上来讲Prometheus属于是典型的有状态应用,而其有包含了一些自身特有的运维管理和配置管理方式。而这些都无法通过Kubernetes原生提供的应用管理概念实现自动化。为了简化这类应用程序的管理复杂度,CoreOS率先引入了Operator的概念,并且首先推出了针对在Kubernetes下运行和管理Etcd的Etcd Operator。并随后推出了Prometheus Operator。

2)Prometheus Operator的工作原理

从概念上来讲Operator就是针对管理特定应用程序的,在Kubernetes基本的Resource和Controller的概念上,以扩展Kubernetes api的形式。帮助用户创建,配置和管理复杂的有状态应用程序。从而实现特定应用程序的常见操作以及运维自动化。

在Kubernetes中我们使用Deployment、DamenSet,StatefulSet来管理应用Workload,使用Service,Ingress来管理应用的访问方式,使用ConfigMap和Secret来管理应用配置。我们在集群中对这些资源的创建,更新,删除的动作都会被转换为事件(Event),Kubernetes的Controller Manager负责监听这些事件并触发相应的任务来满足用户的期望。这种方式我们成为声明式,用户只需要关心应用程序的最终状态,其它的都通过Kubernetes来帮助我们完成,通过这种方式可以大大简化应用的配置管理复杂度。

而除了这些原生的Resource资源以外,Kubernetes还允许用户添加自己的自定义资源(Custom Resource)。并且通过实现自定义Controller来实现对Kubernetes的扩展。

如下所示,是Prometheus Operator的架构示意图:

Prometheus Operator架构

Prometheus的本职就是一组用户自定义的CRD资源以及Controller的实现,Prometheus Operator负责监听这些自定义资源的变化,并且根据这些资源的定义自动化的完成如Prometheus Server自身以及配置的自动化管理工作。

3)相比原生Prometheus其优势?

Prometheus Operator 是一个为 Kubernetes 设计的 Prometheus 监控系统的自动化管理工具,它在 Prometheus 的基础上提供了一系列的优势和增强功能:

  1. 自动化部署:Prometheus Operator 可以自动创建和管理 Prometheus 实例,简化了部署过程。
  2. 声明式配置:通过 Kubernetes 的自定义资源定义(CRDs),Prometheus Operator 允许使用声明式配置来管理 Prometheus 实例,ServiceMonitors,Alertmanagers 等。
  3. 自动发现:Prometheus Operator 支持自动发现 Kubernetes 服务和 Pod,减少了手动配置的需要。
  4. 水平扩展:Prometheus Operator 支持 Prometheus 实例的水平扩展,可以根据需求自动调整实例数量。
  5. 高可用性:Prometheus Operator 支持在 Kubernetes 集群中自动部署多个 Prometheus 实例,以实现高可用性。
  6. 集成 Alertmanager:Prometheus Operator 可以自动配置和管理 Alertmanager 实例,简化了告警系统的设置和管理。
  7. 监控规则管理:通过 PrometheusRule CRD,Prometheus Operator 允许定义告警规则,这些规则可以自动被 Prometheus 加载。
  8. ServiceMonitor CRD:允许定义要监控的 Kubernetes 服务,Prometheus Operator 将自动生成适当的监控配置。
  9. 维护简便:Prometheus Operator 封装了 Prometheus 的运维经验,提供了友好的管理接口,简化了日常的维护工作。
  10. 社区支持:由于 Prometheus Operator 是一个活跃的开源项目,它拥有一个强大的社区支持,这意味着用户可以从社区中获得帮助和分享最佳实践。
  11. 与 Grafana 的集成:Prometheus Operator 通常与 Grafana 一起使用,用于可视化监控数据,它简化了 Grafana Dashboard 的配置和使用。
  12. 适应 Kubernetes 生态:Prometheus Operator 作为 Kubernetes 生态的一部分,与 Kubernetes 的其他组件和工具(如 kube-prometheus-stack)有很好的集成。

3.2. 部署Prometheus-Operator

1)查看自己的kubernetes集群环境
[root@prometheus ]# kubectl get nodes
NAME        STATUS   ROLES    AGE   VERSION
10.0.1.10   Ready    master   42m   v1.26.0

2)下载kube-prometheus
git clone  -b release-0.13  https://github.com/prometheus-operator/kube-prometheus.git

根据自己的环境更改release版本号

3)部署
[root@prometheus ~]# cd kube-prometheus/
[root@prometheus ~]# kubectl apply --server-side -f manifests/setup
[root@prometheus ~]# kubectl wait \
	--for condition=Established \
	--all CustomResourceDefinition \
	--namespace=monitoring
[root@prometheus ~]# kubectl apply -f manifests/
4)查看pod状态
[root@prometheus ~]# kubectl get pod -n monitoring
NAME                                   READY   STATUS    RESTARTS   AGE
alertmanager-main-0                    2/2     Running   0          28m
alertmanager-main-1                    2/2     Running   0          28m
alertmanager-main-2                    2/2     Running   0          28m
blackbox-exporter-59dddb7bb6-sj8lt     3/3     Running   0          28m
grafana-79f47474f7-nxnkv               1/1     Running   0          28m
kube-state-metrics-5884fb96b-6vx92     3/3     Running   0          28m
node-exporter-pwnj7                    2/2     Running   0          28m
prometheus-adapter-6c4cc5465b-htb7z    1/1     Running   0          28m
prometheus-adapter-6c4cc5465b-s9hv7    1/1     Running   0          28m
prometheus-k8s-0                       2/2     Running   0          28m
prometheus-k8s-1                       2/2     Running   0          28m
prometheus-operator-57cf88fbcb-hxjdp   2/2     Running   0          28m

全部pod running了就代表部署成功。

5)访问Prometheus
[root@prometheus ~]# kubectl get svc -n monitoring
NAME                    TYPE        CLUSTER-IP      EXTERNAL-IP   PORT(S)                      AGE
alertmanager-main       ClusterIP   10.68.101.241   <none>        9093/TCP,8080/TCP            34m
alertmanager-operated   ClusterIP   None            <none>        9093/TCP,9094/TCP,9094/UDP   34m
blackbox-exporter       ClusterIP   10.68.86.56     <none>        9115/TCP,19115/TCP           34m
grafana                 ClusterIP   10.68.11.125    <none>        3000/TCP                     34m
kube-state-metrics      ClusterIP   None            <none>        8443/TCP,9443/TCP            34m
node-exporter           ClusterIP   None            <none>        9100/TCP                     34m
prometheus-adapter      ClusterIP   10.68.185.106   <none>        443/TCP                      34m
prometheus-k8s          ClusterIP   10.68.102.244   <none>        9090/TCP,8080/TCP            34m
prometheus-operated     ClusterIP   None            <none>        9090/TCP                     34m
prometheus-operator     ClusterIP   None            <none>        8443/TCP                     34m
[root@prometheus ~]# kubectl edit svc -n monitoring prometheus-k8s
端口映射port-forward方法

Prometheus:

kubectl --namespace monitoring port-forward svc/prometheus-k8s --address 0.0.0.0 19090:9090

Grafana:

kubectl --namespace monitoring port-forward svc/grafana --address 0.0.0.0 13000:3000

默认账号密码:admin/admin

Alertmanager:

kubectl --namespace monitoring port-forward svc/alertmanager-main --address 0.0.0.0 19093:9093

NodePort暴露端口方法

Prometheus:

apiVersion: v1
kind: Service
metadata:
  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: monitoring
spec:
  type: NodePort  #修改添加svc的type
  ports:
  - name: web
    port: 9090
    targetPort: web
    nodePort: 30001 #添加修改需要暴露的nodeport
  - 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
[root@prometheus kube-prometheus]# kubectl apply -f manifests/prometheus-service

Grafana:

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: 9.5.3
  name: grafana
  namespace: monitoring
spec:
  type: NodePort  #修改添加svc的type
  ports:
  - name: http
    port: 3000
    targetPort: http
    nodePort: 30002 #添加修改需要暴露的nodeport
  selector:
    app.kubernetes.io/component: grafana
    app.kubernetes.io/name: grafana
    app.kubernetes.io/part-of: kube-prometheus
[root@prometheus kube-prometheus]# kubectl apply -f manifests/grafana-service.yaml

3.3. Grafana对接Prometheus

在左侧菜单栏找到 Administration -> Data sources

添加 Data sources

输入Prometheus连接信息

单击Test,出现Data source is working即为成功

然后到Grafana控制台进行导入模版,单击右侧加号 -> Import dashboard

输入k8s for Prometheus的ID号 15661 -> load

填写options详细信息 -> import

查看k8s的dashboard

4. 项目总结

本博客讲解了Prometheus的简介,以及如何通过Prometheues Opeartor方式进行快速部署Prometheues以及Grafana模版使用等内容。

  • 42
    点赞
  • 14
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
Go语言(也称为Golang)是由Google开发的一种静态强类型、编译型的编程语言。它旨在成为一门简单、高效、安全和并发的编程语言,特别适用于构建高性能的服务器和分布式系统。以下是Go语言的一些主要特点和优势: 简洁性:Go语言的语法简单直观,易于学习和使用。它避免了复杂的语法特性,如继承、重载等,转而采用组合和接口来实现代码的复用和扩展。 高性能:Go语言具有出色的性能,可以媲美C和C++。它使用静态类型系统和编译型语言的优势,能够生成高效的机器码。 并发性:Go语言内置了对并发的支持,通过轻量级的goroutine和channel机制,可以轻松实现并发编程。这使得Go语言在构建高性能的服务器和分布式系统时具有天然的优势。 安全性:Go语言具有强大的类型系统和内存管理机制,能够减少运行时错误和内存泄漏等问题。它还支持编译时检查,可以在编译阶段就发现潜在的问题。 标准库:Go语言的标准库非常丰富,包含了大量的实用功能和工具,如网络编程、文件操作、加密解密等。这使得开发者可以更加专注于业务逻辑的实现,而无需花费太多时间在底层功能的实现上。 跨平台:Go语言支持多种操作系统和平台,包括Windows、Linux、macOS等。它使用统一的构建系统(如Go Modules),可以轻松地跨平台编译和运行代码。 开源和社区支持:Go语言是开源的,具有庞大的社区支持和丰富的资源。开发者可以通过社区获取帮助、分享经验和学习资料。 总之,Go语言是一种简单、高效、安全、并发的编程语言,特别适用于构建高性能的服务器和分布式系统。如果你正在寻找一种易于学习和使用的编程语言,并且需要处理大量的并发请求和数据,那么Go语言可能是一个不错的选择。
Go语言(也称为Golang)是由Google开发的一种静态强类型、编译型的编程语言。它旨在成为一门简单、高效、安全和并发的编程语言,特别适用于构建高性能的服务器和分布式系统。以下是Go语言的一些主要特点和优势: 简洁性:Go语言的语法简单直观,易于学习和使用。它避免了复杂的语法特性,如继承、重载等,转而采用组合和接口来实现代码的复用和扩展。 高性能:Go语言具有出色的性能,可以媲美C和C++。它使用静态类型系统和编译型语言的优势,能够生成高效的机器码。 并发性:Go语言内置了对并发的支持,通过轻量级的goroutine和channel机制,可以轻松实现并发编程。这使得Go语言在构建高性能的服务器和分布式系统时具有天然的优势。 安全性:Go语言具有强大的类型系统和内存管理机制,能够减少运行时错误和内存泄漏等问题。它还支持编译时检查,可以在编译阶段就发现潜在的问题。 标准库:Go语言的标准库非常丰富,包含了大量的实用功能和工具,如网络编程、文件操作、加密解密等。这使得开发者可以更加专注于业务逻辑的实现,而无需花费太多时间在底层功能的实现上。 跨平台:Go语言支持多种操作系统和平台,包括Windows、Linux、macOS等。它使用统一的构建系统(如Go Modules),可以轻松地跨平台编译和运行代码。 开源和社区支持:Go语言是开源的,具有庞大的社区支持和丰富的资源。开发者可以通过社区获取帮助、分享经验和学习资料。 总之,Go语言是一种简单、高效、安全、并发的编程语言,特别适用于构建高性能的服务器和分布式系统。如果你正在寻找一种易于学习和使用的编程语言,并且需要处理大量的并发请求和数据,那么Go语言可能是一个不错的选择。
Go语言(也称为Golang)是由Google开发的一种静态强类型、编译型的编程语言。它旨在成为一门简单、高效、安全和并发的编程语言,特别适用于构建高性能的服务器和分布式系统。以下是Go语言的一些主要特点和优势: 简洁性:Go语言的语法简单直观,易于学习和使用。它避免了复杂的语法特性,如继承、重载等,转而采用组合和接口来实现代码的复用和扩展。 高性能:Go语言具有出色的性能,可以媲美C和C++。它使用静态类型系统和编译型语言的优势,能够生成高效的机器码。 并发性:Go语言内置了对并发的支持,通过轻量级的goroutine和channel机制,可以轻松实现并发编程。这使得Go语言在构建高性能的服务器和分布式系统时具有天然的优势。 安全性:Go语言具有强大的类型系统和内存管理机制,能够减少运行时错误和内存泄漏等问题。它还支持编译时检查,可以在编译阶段就发现潜在的问题。 标准库:Go语言的标准库非常丰富,包含了大量的实用功能和工具,如网络编程、文件操作、加密解密等。这使得开发者可以更加专注于业务逻辑的实现,而无需花费太多时间在底层功能的实现上。 跨平台:Go语言支持多种操作系统和平台,包括Windows、Linux、macOS等。它使用统一的构建系统(如Go Modules),可以轻松地跨平台编译和运行代码。 开源和社区支持:Go语言是开源的,具有庞大的社区支持和丰富的资源。开发者可以通过社区获取帮助、分享经验和学习资料。 总之,Go语言是一种简单、高效、安全、并发的编程语言,特别适用于构建高性能的服务器和分布式系统。如果你正在寻找一种易于学习和使用的编程语言,并且需要处理大量的并发请求和数据,那么Go语言可能是一个不错的选择。
Go语言(也称为Golang)是由Google开发的一种静态强类型、编译型的编程语言。它旨在成为一门简单、高效、安全和并发的编程语言,特别适用于构建高性能的服务器和分布式系统。以下是Go语言的一些主要特点和优势: 简洁性:Go语言的语法简单直观,易于学习和使用。它避免了复杂的语法特性,如继承、重载等,转而采用组合和接口来实现代码的复用和扩展。 高性能:Go语言具有出色的性能,可以媲美C和C++。它使用静态类型系统和编译型语言的优势,能够生成高效的机器码。 并发性:Go语言内置了对并发的支持,通过轻量级的goroutine和channel机制,可以轻松实现并发编程。这使得Go语言在构建高性能的服务器和分布式系统时具有天然的优势。 安全性:Go语言具有强大的类型系统和内存管理机制,能够减少运行时错误和内存泄漏等问题。它还支持编译时检查,可以在编译阶段就发现潜在的问题。 标准库:Go语言的标准库非常丰富,包含了大量的实用功能和工具,如网络编程、文件操作、加密解密等。这使得开发者可以更加专注于业务逻辑的实现,而无需花费太多时间在底层功能的实现上。 跨平台:Go语言支持多种操作系统和平台,包括Windows、Linux、macOS等。它使用统一的构建系统(如Go Modules),可以轻松地跨平台编译和运行代码。 开源和社区支持:Go语言是开源的,具有庞大的社区支持和丰富的资源。开发者可以通过社区获取帮助、分享经验和学习资料。 总之,Go语言是一种简单、高效、安全、并发的编程语言,特别适用于构建高性能的服务器和分布式系统。如果你正在寻找一种易于学习和使用的编程语言,并且需要处理大量的并发请求和数据,那么Go语言可能是一个不错的选择。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值