Operator
Operator 是由 CoreOS https://coreos.com/ 公司开发的, 用来扩展 Kubernetes API, 特定的应用程序控制器, 它用来创建, 配置和管理复杂的有状态应用, 如数据库, 缓存和监控系统. Operator 基于 Kubernetes 的资源和控制器概念之上构建, 但同时又包含了应用程序特定的一些专业知识, 比如创建一个数据库的 Operator, 则必须对创建的数据库的各种运维方式非常了解, 创建 Operator 的关键是 CRD(自定义资源)的设计.
CRD 是对 Kubernetes API 的扩展, Kubernetes 中的每个资源都是一个 API 对象的集合, 例如我们在 YAML 文件里定义的那些 spec 都是对 Kubernetes 中的资源对象的定义, 所有的自定义资源可以跟 Kubernetes 中内建的资源一样使用 kubectl 操作.
Operator 是将运维人员对软件操作的知识给代码化, 同时利用 Kubernetes 强大的抽象来管理大规模的软件应用. 目前 CoreOS 官方提供了几种 Operator 的实现, 其中就包括我们今天的主角: Prometheus Operator,Operator 的核心实现就是基于 Kubernetes 的以下两个概念:
资源: 对象的状态定义
控制器: 观测, 分析和行动, 以调节资源的分布
当然我们如果有对应的需求也完全可以自己去实现一个 Operator, 接下来我们就来给大家详细介绍下 Prometheus-Operator 的使用方法.
介绍
首先我们先来了解下 Prometheus-Operator 的架构图:
上图是 Prometheus-Operator 官方提供的架构图, 其中 Operator 是最核心的部分, 作为一个控制器, 他会去创建 Prometheus,ServiceMonitor,AlertManager 以及 PrometheusRule4 个 CRD 资源对象, 然后会一直监控并维持这 4 个资源对象的状态.
主要部分:
Operate: 系统主要控制器, 根据自定义的资源 (Custom Resource Definition,CRDs) 来负责管理与部署;
Prometheus Server: 由 Operator 依据一个自定义资源 Prometheus 类型中所描述的内容而部署的 Prometheus Server 集, 可以将这个自定义资源看作是一种特别用来管理 Prometheus Server 的 StatefulSet 资源;
ServiceMonitor: 一个 Kubernetes 自定义资料, 该资源描述了 Prometheus Server 的 Target 列表, Operator 会监听这个资源的变化来动态更新 Prometheus Server 的 Scrape targets. 而该资源主要透过 Selector 来依据 Labels 选取对应的 Service Endpoint, 并让 Prometheus Serve 透过 Service 进行拉取 Metrics 资料;
Service: kubernetes 中的 Service 资源, 这边主要用来对应 Kubernetes 中 Metrics Server Pod, 然后提供给 ServiceMonitor 选取让 Prometheus Server 拉取资料, 在 Prometheus 术语中可以称为 Target, 即被 Prometheus 监测的对象, 如一個部署在 Kubernetes 上的 Node Exporter Service.
Alertmanager: 接收从 Prometheus 来的 event, 再根据定义的 notification 组决定要通知的方法.
其中创建的 prometheus 这种资源对象就是作为 Prometheus Server 存在, 而 ServiceMonitor 就是 exporter 的各种抽象, exporter 前面我们已经学习了, 是用来提供专门提供 metrics 数据接口的工具, Prometheus 就是通过 ServiceMonitor 提供的 metrics 数据接口去 pull 数据的, 当然 alertmanager 这种资源对象就是对应的 AlertManager 的抽象, 而 PrometheusRule 是用来被 Prometheus 实例使用的报警规则文件.
这样我们要在集群中监控什么数据, 就变成了直接去操作 Kubernetes 集群的资源对象了, 是不是方便很多了. 上图中的 Service 和 ServiceMonitor 都是 Kubernetes 的资源, 一个 ServiceMonitor 可以通过 labelSelector 的方式去匹配一类 Service,Prometheus 也可以通过 labelSelector 去匹配多个 ServiceMonitor.
安装 prometheus-operator
采用 helm chart 方式安装
官网地址: https://github.com/coreos/prometheus-operator
- $kubectl create ns monitoring
- helm repo add coreos https://s3-eu-west-1.amazonaws.com/coreos-charts/stable/
- helm install coreos/prometheus-operator --name prometheus-operator --namespace monitoring
安装 kube-prometheus
官网地址: https://github.com/coreos/kube-prometheus
- helm install coreos/kube-prometheus --name kube-prometheus --namespace monitoring
- # 采用域名方式访问, 添加 grafana 的 ingress
- cat>grafana-ingress.YAML<<EOF
- apiVersion: extensions/v1beta1
- kind: Ingress
- metadata:
- name: kube-prometheus-grafana
- namespace: monitoring
- spec:
- rules:
- - host: grafana.domain.com
- http:
- paths:
- - path: /
- backend:
- serviceName: kube-prometheus-grafana
- servicePort: 80
- EOF
- kubectl apply -f grafana-ingress.YAML
- #deployments kube-prometheus-exporter-kube-state 的 images 无法下载, 改为国内镜像
- # 将 images 地址前缀为 registry.cn-hangzhou.aliyuncs.com/google_containers
- kubectl edit deploy kube-prometheus-exporter-kube-state -n monitoring
- # 关闭 grafana 匿名身份验证
- kubectl edit deploy kube-prometheus-grafana -n monitoring
- # 将 env GF_AUTH_ANONYMOUS_ENABLED 改到 false
- - name: GF_AUTH_ANONYMOUS_ENABLED
- value: "false"
检查 pod 状态
登录 Grafana(admin/admin)
来源: https://www.cnblogs.com/Dev0ps/p/11126942.html