prometheus-operator/prometheus-operator
GitHub: prometheus-operator/prometheus-operator
Kubernetes 原生的 Prometheus 管理控制器,通过 CRD 声明式简化监控栈部署与配置。
Stars: 9882 | Forks: 3850
# Prometheus Operator
[](https://github.com/prometheus-operator/prometheus-operator/actions)
[](https://goreportcard.com/report/prometheus-operator/prometheus-operator)
[](https://kubernetes.slack.com)
## 概述
Prometheus Operator 为 [Prometheus](https://prometheus.io/) 及相关监控组件提供了 [Kubernetes](https://kubernetes.io/) 原生的部署和管理功能。本项目的目的是简化和自动化 Kubernetes 集群中基于 Prometheus 的监控栈的配置。
Prometheus Operator 包括但不限于以下功能:
* **Kubernetes Custom Resources**:使用 Kubernetes 自定义资源来部署和管理 Prometheus、Alertmanager 及相关组件。
* **简化的部署配置**:通过原生的 Kubernetes 资源配置 Prometheus 的基础设置,如版本、持久化、保留策略和副本。
* **Prometheus Target Configuration**:基于熟悉的 Kubernetes 标签查询自动生成监控目标配置;无需学习特定的 Prometheus 配置语言。
关于 Prometheus Operator 的介绍,请参阅 [入门](https://github.com/prometheus-operator/prometheus-operator/blob/main/Documentation/developer/getting-started.md) 指南。
## 项目状态
Operator 本身被视为已可投入生产环境。关于每个 CRD 的状态,请参考 Custom Resource Definition (CRD) 版本:
* `monitoring.coreos.com/v1`:**稳定** 的 CRD 和 API,更改将以向后兼容的方式进行。
* `monitoring.coreos.com/v1beta1`:**不稳定** 的 CRD 和 API,可能会发生更改,但团队正致力于避免这种情况。我们鼓励接受破坏性变更风险的用户在生产环境中使用。
* `monitoring.coreos.com/v1alpha1`:**不稳定** 的 CRD 和 API,更改可能频繁发生,我们建议避免在关键任务环境中使用。
## Prometheus Operator vs. kube-prometheus vs. 社区 Helm chart
### Prometheus Operator
Prometheus Operator 使用 Kubernetes [自定义资源](https://kubernetes.io/docs/concepts/extend-kubernetes/api-extension/custom-resources/) 来简化 Prometheus、Alertmanager 及相关监控组件的部署和配置。
### kube-prometheus
[kube-prometheus](https://github.com/prometheus-operator/kube-prometheus) 提供了基于 Prometheus 和 Prometheus Operator 的完整集群监控栈的示例配置。这包括部署多个 Prometheus 和 Alertmanager 实例,用于收集节点指标的 metrics exporter(如 node_exporter),链接 Prometheus 到各种 metrics 端点的抓取目标配置,以及用于通知集群中潜在问题的示例告警规则。
### Helm chart
[prometheus-community/kube-prometheus-stack](https://github.com/prometheus-community/helm-charts/tree/main/charts/kube-prometheus-stack)
Helm chart 提供了与 kube-prometheus 类似的功能集。该 chart 由 Prometheus 社区维护。
更多信息,请参阅 [chart 的 readme](https://github.com/prometheus-community/helm-charts/tree/main/charts/kube-prometheus-stack#kube-prometheus-stack)
## 前置条件
Prometheus Operator 至少需要 Kubernetes 版本 `1.16.0`。如果您刚开始使用 Prometheus Operator,强烈建议使用最新的 [稳定版本](https://github.com/prometheus-operator/prometheus-operator/releases/latest)。
## CustomResourceDefinitions
Prometheus Operator 的一个核心功能是监控 Kubernetes API Server 中特定对象的变化,并确保当前的 Prometheus 部署与这些对象相匹配。
Operator 作用于以下 [Custom Resource Definitions (CRDs)](https://kubernetes.io/docs/tasks/access-kubernetes-api/extend-api-custom-resource-definitions/):
* **`Prometheus`**,定义了所需的 Prometheus 部署。
* **`PrometheusAgent`**,定义了所需的 Prometheus 部署,但以 Agent 模式运行。
* **`Alertmanager`**,定义了所需的 Alertmanager 部署。
* **`ThanosRuler`**,定义了所需的 Thanos Ruler 部署。
* **`ServiceMonitor`**,声明式地指定了应如何监控 Kubernetes 服务组。
Operator 根据 API Server 中对象的当前状态自动生成 Prometheus 抓取配置。
* **`PodMonitor`**,声明式地指定了应如何监控 Pod 组。
Operator 根据 API Server 中对象的当前状态自动生成 Prometheus 抓取配置。
* **`Probe`**,声明式地指定了应如何监控 Ingress 组或静态目标。Operator 根据定义自动生成 Prometheus 抓取配置。
* **`ScrapeConfig`**,声明式地指定了要添加到 Prometheus 的抓取配置。此 CustomResourceDefinition 有助于抓取 Kubernetes 集群外部的资源。
* **`PrometheusRule`**,定义了一组所需的 Prometheus 告警和/或记录规则。
Operator 生成可供 Prometheus 实例使用的规则文件。
* **`AlertmanagerConfig`**,声明式地指定了 Alertmanager 配置的子部分,允许将告警路由到自定义接收器,并设置抑制规则。
Prometheus Operator 自动检测 Kubernetes API Server 中上述任何对象的变化,并确保匹配的部署和配置保持同步。
要了解有关 Prometheus Operator 引入的 CRD 的更多信息,请查看 [设计](https://prometheus-operator.dev/docs/getting-started/design/) 页面。
## 动态准入控制
为了防止无效的 Prometheus 告警和记录规则导致已部署的 Prometheus 实例发生故障,提供了一个 [admission webhook](https://kubernetes.io/docs/reference/access-authn-authz/extensible-admission-controllers/) 用于在初始创建或更新时验证 `PrometheusRule` 资源。
有关此功能的更多信息,请参阅 [用户指南](https://prometheus-operator.dev/docs/platform/webhook/)。
## 快速入门
**注意:** 此快速入门不提供完整的监控栈;如果那是您正在寻找的,请参阅 [kube-prometheus](https://github.com/prometheus-operator/kube-prometheus) 项目。如果您想要完整的监控栈,但已经应用了 `bundle.yaml`,请先删除该 bundle(`kubectl delete -f bundle.yaml`)。
要在集群内快速试用 *仅* Prometheus Operator,**选择一个发布版本** 并运行以下命令,该命令会在 `default` 命名空间中部署 Operator:
```
kubectl create -f bundle.yaml
```
如果要在不同的命名空间中部署 Prometheus Operator,您还需要 `kustomize`:
```
NAMESPACE=my_namespace kustomize edit set namespace $NAMESPACE && kubectl create -k .
```
要在集群外运行 Operator:
```
make
scripts/run-external.sh
```
## 移除
要移除 Operator 和 Prometheus,首先删除您在每个命名空间中创建的任何自定义资源。Operator 将自动关闭并移除 Prometheus 和 Alertmanager pod 以及关联的 ConfigMap。
```
for n in $(kubectl get namespaces -o jsonpath={..metadata.name}); do
kubectl delete --all --namespace=$n prometheus,servicemonitor,podmonitor,alertmanager
done
```
几分钟后,您可以继续移除 Operator 本身。
```
kubectl delete -f bundle.yaml
```
Operator 会在您创建 Prometheus 或 Alertmanager 资源的每个命名空间中自动创建服务,并定义三个自定义资源定义。您现在可以清理这些内容。
```
for n in $(kubectl get namespaces -o jsonpath={..metadata.name}); do
kubectl delete --ignore-not-found --namespace=$n service prometheus-operated alertmanager-operated
done
kubectl delete --ignore-not-found customresourcedefinitions \
prometheuses.monitoring.coreos.com \
servicemonitors.monitoring.coreos.com \
podmonitors.monitoring.coreos.com \
alertmanagers.monitoring.coreos.com \
prometheusrules.monitoring.coreos.com \
alertmanagerconfigs.monitoring.coreos.com \
scrapeconfigs.monitoring.coreos.com
```
## 测试
参见 [TESTING](TESTING.md)
## AI 使用政策
有关在为项目贡献时使用 AI 工具的信息,请参阅贡献指南中的 [AI 使用政策](CONTRIBUTING.md#ai-use-policy)。
## 安全
如果您发现与 Prometheus Operator 相关的尚未公开披露的安全漏洞,请不要通过打开 GitHub issue 报告,而是请发送电子邮件给 [MAINTAINERS.md](MAINTAINERS.md) 文件中找到的项目维护者。
报告来自自动安全扫描器的问题时,请参考 [Prometheus 文档](https://prometheus.io/docs/operating/security/#automated-security-scanners)。
## 故障排除
查看 [故障排除文档](Documentation/platform/troubleshooting.md) 以了解常见问题和常见问题解答 (FAQ)。
## 致谢
prometheus-operator 组织的 Logo 由 [Bianca Cheng Costanzo](https://github.com/bia) 创建并贡献。
标签:Alertmanager, API集成, DNS解析, EVTX分析, Golang, Operator, 代理支持, 可观测性, 告警, 子域名突变, 安全编程, 应用部署, 开源项目, 指标采集, 提示注入, 日志审计, 服务发现, 监控, 自动化运维, 自定义请求头, 自定义资源, 集群管理