前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Prometheus Operator手动部署

Prometheus Operator手动部署

作者头像
YP小站
发布2020-06-04 15:23:10
1.9K0
发布2020-06-04 15:23:10
举报
文章被收录于专栏:YP小站

一、prometheus-operator 介绍和功能

prometheus-operator 介绍

当今Cloud Native概念流行,对于容器、服务、节点以及集群的监控变得越来越重要。Prometheus 作为 Kubernetes 监控的事实标准,有着强大的功能和良好的生态。但是它不支持分布式,不支持数据导入、导出,不支持通过 API 修改监控目标和报警规则,所以在使用它时,通常需要写脚本和代码来简化操作。

Prometheus Operator 为监控 Kubernetes service、deployment、daemonsets 和 Prometheus 实例的管理提供了简单的定义等,简化在 Kubernetes 上部署、管理和运行 Prometheus 和 Alertmanager 集群。

prometheus-operator 功能

  1. 创建/销毁:在 Kubernetes namespace 中更加容易地启动一个 Prometheues 实例,一个特定应用程序或者团队可以更容易使用 Prometheus Operator。
  2. 便捷配置:通过 Kubernetes 资源配置 Prometheus 的基本信息,比如版本、存储、副本集等。
  3. 通过标签标记目标服务:基于常见的 Kubernetes label 查询自动生成监控目标配置;不需要学习 Prometheus 特定的配置语言。

二、下载 prometheus-operator 配置

下载官方prometheus-operator v0.29.0版本代码,官方把所有文件都放在一起,这里我分类下

代码语言:javascript
复制
$ git clone https://github.com/coreos/prometheus-operator.git -b release-0.29
$ cd contrib/kube-prometheus/manifests/

# 新建对应的服务目录
$ mkdir -p operator node-exporter alertmanager grafana kube-state-metrics prometheus serviceMonitor adapter

# 把对应的服务配置文件移动到相应的服务目录
$ mv *-serviceMonitor* serviceMonitor/
$ mv 0prometheus-operator* operator/
$ mv grafana-* grafana/
$ mv kube-state-metrics-* kube-state-metrics/
$ mv alertmanager-* alertmanager/
$ mv node-exporter-* node-exporter/
$ mv prometheus-adapter* adapter/
$ mv prometheus-* prometheus/

# 新创建了两个目录,存放钉钉配置和其它配置
mkdir other dingtalk-hook

上面配置都存放到我个人github私有仓库中 https://github.com/yangpeng14/prometheus-operator-configure

三、部署operator

默认镜像,下面是提供我个人的dockerhub地址

官方镜像地址

个人 DockerHub 地址

quay.io/coreos/configmap-reload:v0.0.1

yangpeng2468/configmap-reload:v0.0.1

quay.io/coreos/k8s-prometheus-adapter-amd64:v0.4.1

yangpeng2468/k8s-prometheus-adapter-amd64:v0.4.1

quay.io/coreos/kube-rbac-proxy:v0.4.1

yangpeng2468/kube-rbac-proxy:v0.4.1

quay.io/coreos/kube-state-metrics:v1.5.0

yangpeng2468/kube-state-metrics:v1.5.0

quay.io/prometheus/prometheus:latest

yangpeng2468/prometheus:latest

quay.io/prometheus/node-exporter:v0.17.0

yangpeng2468/node-exporter:v0.17.0

quay.io/coreos/prometheus-operator:v0.29.0

yangpeng2468/prometheus-operator:v0.29.0

quay.io/coreos/prometheus-config-reloader:v0.29.0

yangpeng2468/prometheus-config-reloader:v0.29.0

quay.io/prometheus/prometheus:v2.7.2

yangpeng2468/prometheus:v2.7.2

quay.io/prometheus/alertmanager:v0.16.1

yangpeng2468/alertmanager:v0.16.1

k8s.gcr.io/addon-resizer:1.8.4

yangpeng2468/addon-resizer:1.8.4

首先创建namespace monitoring

kubectl apply -f 00namespace-namespace.yaml

部署operator

kubectl apply -f operator/

查看是否正常部署

代码语言:javascript
复制
$ kubectl -n monitoring get pod

NAME                                   READY     STATUS    RESTARTS   AGE
prometheus-operator-56954c76b5-qm9ww   1/1       Running   0          24s

查看是否正常部署自定义资源定义(CRD)

代码语言:javascript
复制
$ kubectl get crd -n monitoring

NAME                                    CREATED AT
alertmanagers.monitoring.coreos.com     2019-04-16T06:22:20Z
prometheuses.monitoring.coreos.com      2019-04-16T06:22:20Z
prometheusrules.monitoring.coreos.com   2019-04-16T06:22:20Z
servicemonitors.monitoring.coreos.com   2019-04-16T06:22:21Z

四、部署整套CRD

代码语言:javascript
复制
# 把etcd证书保存到secrets中
kubectl -n monitoring create secret generic etcd-certs --from-file=/opt/kubernetes/ssl/server.pem --from-file=/opt/kubernetes/ssl/server-key.pem --from-file=/opt/kubernetes/ssl/ca.pem
 
# 加载自定义配置
cd other
kubectl create secret generic additional-configs --from-file=prometheus-additional.yaml -n monitoring
 
kubectl apply -f adapter/
kubectl apply -f alertmanager/
kubectl apply -f node-exporter/
kubectl apply -f kube-state-metrics/
kubectl apply -f grafana/
kubectl apply -f prometheus/
kubectl apply -f serviceMonitor/
 
 
# 查看是否正常部署
kubectl -n monitoring get all -o wide

五、部署遇到的坑

坑一

二进制部署k8s管理组件和新版本kubeadm部署的都会发现在prometheus server的页面上发现kube-controller和kube-schedule的target为0/0。因为serviceMonitor是根据label去选取svc的,可以查看对应的serviceMonitor是选取的ns范围是kube-system

代码语言:javascript
复制
# 解决方法
kubectl apply -f other/kube-controller-manager-svc-ep.yaml
kubectl apply -f other/kube-scheduler-svc-ep.yaml

# vim kube-controller-manager-svc-ep.yaml
apiVersion: v1
kind: Service
metadata:
  namespace: kube-system
  name: kube-controller-manager
  labels:
    k8s-app: kube-controller-manager
spec:
  type: ClusterIP
  clusterIP: None
  ports:
  - name: http-metrics
    port: 10252
    targetPort: 10252
    protocol: TCP

---
apiVersion: v1
kind: Endpoints
metadata:
  labels:
    k8s-app: kube-controller-manager
  name: kube-controller-manager
  namespace: kube-system
subsets:
- addresses:
  - ip: 172.16.3.9   # master ip 地址
  ports:
  - name: http-metrics
    port: 10252
    protocol: TCP
    
# vim kube-scheduler-svc-ep.yaml
apiVersion: v1
kind: Service
metadata:
  namespace: kube-system
  name: kube-scheduler
  labels:
    k8s-app: kube-scheduler
spec:
  type: ClusterIP
  clusterIP: None
  ports:
  - name: http-metrics
    port: 10251
    targetPort: 10251
    protocol: TCP

---
apiVersion: v1
kind: Endpoints
metadata:
  labels:
    k8s-app: kube-scheduler
  name: kube-scheduler
  namespace: kube-system
subsets:
- addresses:
  - ip: 172.16.3.9 # master ip 地址
  ports:
  - name: http-metrics
    port: 10251
    protocol: TCP

坑二

访问prometheus server的web页面发现即使创建了svc和注入对应ep的信息在target页面还是被prometheus server请求被拒绝

  1. 修改 kube-controller-manager 配置文件 把 --address=127.0.0.1 换成 --address=0.0.0.0
  2. 修改 kube-scheduler 配置文件 把 --address=127.0.0.1 换成 --address=0.0.0.0
  3. 修改完后重启这两个服务

坑三

prometheus targets 页面查看 monitoring/coredns/0 没有监控项,是因为 kube-dns service中没有设置监控端口 9153

代码语言:javascript
复制
# 解决方法 添加监控端口 9153

$ kubectl edit svc -n kube-system kube-dns
 
  - name: metrics
    port: 9153
    protocol: TCP
    targetPort: 9153

六、数据持续存储、监控etcd集群、监控自动发化、自定义报警

参考下面文章链接配置

  1. 自定义报警

使用钉钉推送消息安装配置方法 https://github.com/yangpeng14/prometheus-operator-configure/tree/master/dingtalk-hook

  1. 自定义报警

配置自定义报警配置并加载 https://www.qikqiak.com/post/prometheus-operator-custom-alert/

代码语言:javascript
复制
# 创建配置
$ vim prometheus-additional.yaml

- job_name: 'crm'
  scrape_interval: 5s
  metrics_path: '/api/private/metrics'
  static_configs:
    - targets: ['www.example.com']

# 加载配置
$ kubectl create secret generic additional-configs --from-file=prometheus-additional.yaml -n monitoring

# 钉钉推送消息安装配置方法
https://github.com/yangpeng14/prometheus-operator-configure/tree/master/dingtalk-hook
  1. prometheus 和 alertmanager 使用NFS存储

Prometheus Operator 自动发现以及数据持久化 https://www.qikqiak.com/post/prometheus-operator-advance/

预先安装 nfs 和 nfs-client-provisioner

nfs-client-provisioner 安装配置 https://github.com/yangpeng14/prometheus-operator-configure/tree/master/nfs-client-provisioner

  1. 监控etcd

Prometheus Operator 监控 etcd 集群 https://www.qikqiak.com/post/prometheus-operator-monitor-etcd/

集群是二进制方式独立部署的 etcd 集群,同样将对应的证书保存到集群中的一个 secret 对象中去即可

kubectl -n monitoring create secret generic etcd-certs --from-file=/opt/kubernetes/ssl/server.pem --from-file=/opt/kubernetes/ssl/server-key.pem --from-file=/opt/kubernetes/ssl/ca.pem

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2020-01-07,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 YP小站 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 一、prometheus-operator 介绍和功能
    • prometheus-operator 介绍
      • prometheus-operator 功能
      • 二、下载 prometheus-operator 配置
        • 下载官方prometheus-operator v0.29.0版本代码,官方把所有文件都放在一起,这里我分类下
        • 三、部署operator
          • 默认镜像,下面是提供我个人的dockerhub地址
            • 首先创建namespace monitoring
              • 部署operator
                • 查看是否正常部署
                  • 查看是否正常部署自定义资源定义(CRD)
                  • 四、部署整套CRD
                  • 五、部署遇到的坑
                    • 坑一
                      • 坑二
                        • 坑三
                        • 六、数据持续存储、监控etcd集群、监控自动发化、自定义报警
                          • 参考下面文章链接配置
                          相关产品与服务
                          Prometheus 监控服务
                          Prometheus 监控服务(TencentCloud Managed Service for Prometheus,TMP)是基于开源 Prometheus 构建的高可用、全托管的服务,与腾讯云容器服务(TKE)高度集成,兼容开源生态丰富多样的应用组件,结合腾讯云可观测平台-告警管理和 Prometheus Alertmanager 能力,为您提供免搭建的高效运维能力,减少开发及运维成本。
                          领券
                          问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档