0、前言
Kubernetes Operator 是一种基于 Kubernetes 的扩展机制,用于简化复杂系统的部署、管理和运维工作,它的本质是“封装、自动化和复用领域知识(如系统运维、应用管理等知识)”。
在 Kubernetes 集群的运维管理中,监控是必不可少的一环。Prometheus 作为一款优秀的开源监控系统,结合 Operator 方式进行部署,可以更便捷地实现对 K8S 的监控。
这种自动监控 K8S 集群的能力,使得基于 Operator 部署 Prometheus 成为一种高效、便捷且符合 Kubernetes 原生理念的监控解决方案,极大地降低了在 Kubernetes 环境中搭建和维护监控系统的复杂性,同时也提高了监控系统的可靠性和可扩展性,以下是基于 Operator 部署 Prometheus 实现 K8S 监控的详细步骤。
一、下载源代码
首先,我们需要下载 Prometheus Operator 相关的源代码。通过以下命令进行下载:
wget https://github.com/prometheus-operator/kube-prometheus/archive/refs/tags/v0.11.0.tar.gz
由于网络原因,若上述链接解析不成功,可能是链接本身存在问题或网络连接异常。请检查链接的合法性,确保其正确无误,并可尝试更换网络环境或使用代理等工具进行重试。下载完成后,进行解压:
tar xf kube-prometheus-0.11.0.tar.gz
解压后,我们进入到对应的文件目录下:
cd kube-prometheus-0.11.0
二、安装 Prometheus - Operator
在安装 Prometheus - Operator 之前,请确保你的 Kubernetes 集群环境已正确配置并运行。接下来,执行以下命令进行安装:
[root@master231 /k8s/manifests/monitor、kube-prometheus-0.11.0]# kubectl apply --server-side -f manifests/setup
kubectl wait \
--for condition=Established \
--all CustomResourceDefinition \
--namespace=monitoring
kubectl apply -f manifests/
(会创建一大堆资源)
该命令会向 Kubernetes 集群中应用一系列的资源清单,用于完成 Prometheus Operator 的初步搭建及相关依赖的创建。
然后,等待所有自定义资源定义(CustomResourceDefinition)处于稳定状态:
此命令会创建诸多资源,包括但不仅限于各种服务(Service)、部署(Deployment)、Pod 等,它们共同构成了 Prometheus 监控系统的各个组成部分。
三、构建所需的镜像(如有需要)
若你的集群环境需要使用自定义的镜像或者离线部署等情况,可能需要提前构建所需的镜像。例如,以下是部分可能需要构建的镜像文件示例:
alertmanager-v0.24.0.tar.gz
blackbox-exporter-v0.21.0.tar.gz
configmap-reload-v0.5.0.tar.gz
grafana-v8.5.5.tar.gz
kube-rbac-proxy-v0.12.0.tar.gz
kube-state-metrics-v2.5.0.tar.gz
node-exporter-v1.3.1.tar.gz
prometheus-adapter-v0.9.1.tar.gz
prometheus-config-reloader-v0.57.0.tar.gz
prometheus-operator-v0.57.0.tar.gz
prometheus-v2.36.1.tar.gz
根据实际需求,将这些镜像文件导入到你的镜像仓库中,以便后续部署过程中能够正确拉取使用。
四、检查 Prometheus 是否部署成功
部署完成后,检查各组件的运行状态是关键步骤。执行以下命令查看 monitoring 命名空间下所有 Pod 的状态:
kubectl get pods -n monitoring -o wide
若所有 Pod 的 READY 状态均显示为对应数值 / 对应数值(如 2/2、3/3 等)且 STATUS 为 Running,表示 Prometheus 及其相关组件部署成功且运行正常。例如,正常输出可能如下:
NAME READY STATUS RESTARTS AGE IP NODE NOMINATED NODE READINESS GATES
alertmanager-main-0 2/2 Running 0 90s 10.100.203.157 worker232 <none> <none>
alertmanager-main-1 2/2 Running 0 90s 10.100.140.86 worker233 <none> <none>
alertmanager-main-2 2/2 Running 0 90s 10.100.203.156 worker232 <none> <none>
blackbox-exporter-746c64fd88-6qnjm 3/3 Running 0 96s 10.100.203.152 worker232 <none> <none>
grafana-5fc7f9f55d-9r4zq 1/1 Running 0 95s 10.100.203.153 worker232 <none> <none>
kube-state-metrics-6c8846558c-hfb54 3/3 Running 0 95s 10.100.203.154 worker232 <none> <none>
node-exporter-ccnrb 2/2 Running 0 94s 10.0.0.232 worker232 <none> <none>
node-exporter-kp5nb 2/2 Running 0 94s 10.0.0.233 worker233 <none> <none>
node-exporter-rmrx7 2/2 Running 0 94s 10.0.0.231 master231 <none> <none>
prometheus-adapter-6455646bdc-lf5bg 1/1 Running 0 93s 10.100.140.84 worker233 <none> <none>
prometheus-adapter-6455646bdc-nrfzx 1/1 Running 0 93s 10.100.203.155 worker232 <none> <none>
prometheus-k8s-0 2/2 Running 0 90s 10.100.140.87 worker233 <none> <none>
prometheus-k8s-1 2/2 Running 0 89s 10.100.203.158 worker232 <none> <none>
prometheus-operator-f59c8b954-9lq59 2/2 Running 0 93s
五、修改 Grafana 的服务配置
为了方便访问 Grafana 的 Web 界面,我们可对 Grafana 的服务(Service)进行修改,将其类型更改为 NodePort。以下是具体操作:
查看并编辑 Grafana 的服务配置文件(manifests/grafana-service.yaml):
cat manifests/grafana-service.yaml
apiVersion: v1
kind: Service
metadata:
...
name: grafana
namespace: monitoring
spec:
type: NodePort
...
[root@master231 kube-prometheus-0.11.0]#
将其中的 spec.type 字段修改为 NodePort。然后应用修改后的配置:
kubectl apply -f manifests/grafana-service.yaml
执行完成后,再次查看服务详情:
kubectl get -f manifests/grafana-service.yaml
输出示例:
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
grafana NodePort 10.200.30.3 <none> 3000:30902/TCP 4m6s
此时,我们可以通过各节点的 IP 地址加上分配的 NodePort 端口(此处为 30902)来访问 Grafana 的 Web 界面,例如:http://<节点 IP>:30902。
六、暴露 Prometheus 的服务 WebUI
为了方便访问 Prometheus 的 WebUI,我们可采用多种方式对其进行暴露,以下是基于 NodePort 方式的示例操作。
查看并编辑 Prometheus 的服务配置文件(manifests/prometheus-service.yaml):
cat manifests/prometheus-service.yaml
apiVersion: v1
kind: Service
metadata:
...
name: prometheus-k8s
namespace: monitoring
spec:
type: NodePort
ports:
- name: web
port: 9090
nodePort: 9090
targetPort: web
...
[root@master231 kube-prometheus-0.11.0]#
将 spec.type 字段修改为 NodePort,并可指定 nodePort 端口号(如将 Prometheus 的 web 端口对应的 nodePort 设置为 9090)。然后应用修改后的配置:
kubectl apply -f manifests/prometheus-service.yaml
再次查看服务详情:
kubectl get -f manifests/prometheus-service.yaml
输出示例:
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
prometheus-k8s NodePort 10.200.246.30 <none> 9090:9090/TCP,8080:39234/TCP 75m
此时,我们可以通过各节点的 IP 地址加上指定的 NodePort 端口(此处为 9090)来访问 Prometheus 的 WebUI,例如:http://<节点 IP>:9090。另外,也可以根据实际需求,采用 LoadBalancer、Ingress 或 port - forward 等其他方式进行服务暴露。
七、总结
利用 Prometheus Operator 简化了在 Kubernetes 环境中部署和管理 Prometheus 的过程,实现了对 K8S 集群的自动监控。
通过调整服务配置,使得监控系统的 Web 界面(如 Grafana 和 Prometheus)能够方便地被访问,便于后续的监控数据查看与分析。
通过以上步骤,我们基于 Operator 成功部署了 Prometheus,并实现了对 K8S 集群的监控。后续可根据实际需求,进一步配置和优化监控规则、告警策略等,以满足不同的监控场景。
希望这篇博文对你有所帮助,如有任何疑问或需要进一步的解释,请随时在评论区留言。