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

Helm安装Prometheus Operator

作者头像
py3study
发布2020-09-29 09:56:20
5.4K0
发布2020-09-29 09:56:20
举报
文章被收录于专栏:python3python3

一、概述

使用 helm 安装 Prometheus Operator。使用 helm 安装后,会在 Kubernetes 集群中创建、配置和管理 Prometheus 集群,chart 中包含多种组件:

架构

Prometheus Operator 架构图如下:

1.png
1.png

上面架构图中,各组件以不同的方式运行在 Kubernetes 集群中:

  • Operator: 根据自定义资源(Custom Resource Definition / CRDs)来部署和管理 Prometheus Server,同时监控这些自定义资源事件的变化来做相应的处理,是整个系统的控制中心。
  • Prometheus:声明 Prometheus deployment 期望的状态,Operator 确保这个 deployment 运行时一直与定义保持一致。
  • Prometheus Server: Operator 根据自定义资源 Prometheus 类型中定义的内容而部署的 Prometheus Server 集群,这些自定义资源可以看作是用来管理 Prometheus Server 集群的 StatefulSets 资源。
  • ServiceMonitor:声明指定监控的服务,描述了一组被 Prometheus 监控的目标列表。该资源通过 Labels 来选取对应的 Service Endpoint,让 Prometheus Server 通过选取的 Service 来获取 Metrics 信息。
  • Service:简单的说就是 Prometheus 监控的对象。
  • Alertmanager:定义 AlertManager deployment 期望的状态,Operator 确保这个 deployment 运行时一直与定义保持一致。

二、安装

环境说明

操作系统:centos 7.6

ip地址:192.168.31.148

k8s版本:v1.16.3

主机名:k8s-master

配置:2核4g

helm:v2.16.6

操作系统:centos 7.6

ip地址:192.168.31.179

k8s版本:v1.16.3

主机名:k8s-node01

配置:4核8g

安装

Prometheus Operator 所有的组件都打包成 Helm Chart,安装部署非常方便。

helm install --name prometheus-operator --set rbacEnable=true --namespace=monitoring stable/prometheus-operator

查看资源

--

查看状态

# kubectl get pod -n monitoring
NAME                                                          READY   STATUS    RESTARTS   AGE
pod/alertmanager-prometheus-operator-alertmanager-0           2/2     Running   0          98m
pod/prometheus-operator-grafana-857dfc5fc8-vdnff              2/2     Running   0          99m
pod/prometheus-operator-kube-state-metrics-66b4c95cd9-mz8nt   1/1     Running   0          99m
pod/prometheus-operator-operator-56964458-8sspk               2/2     Running   0          99m
pod/prometheus-operator-prometheus-node-exporter-dcf5p        1/1     Running   0          99m
pod/prometheus-operator-prometheus-node-exporter-nv6ph        1/1     Running   0          99m
pod/prometheus-prometheus-operator-prometheus-0               3/3     Running   1          98m

确保pod状态运行正常

方法1:修改访问类型为NodePort

将type类型值改为NodePort

kubectl edit svc prometheus-operator-grafana -n monitoring    
kubectl edit svc prometheus-operator-alertmanager -n monitoring   
kubectl edit svc prometheus-operator-prometheus -n monitoring

查看修改后的访问类型

# kubectl get svc -n monitoring
NAME                                           TYPE        CLUSTER-IP     EXTERNAL-IP   PORT(S)                      AGE
alertmanager-operated                          ClusterIP   None           <none>        9093/TCP,9094/TCP,9094/UDP   100m
prometheus-operated                            ClusterIP   None           <none>        9090/TCP                     100m
prometheus-operator-alertmanager               NodePort    10.1.238.78    <none>        9093:31765/TCP               102mprometheus-operator-grafana                    NodePort    10.1.125.228   <none>        80:30284/TCP                 102mprometheus-operator-kube-state-metrics         ClusterIP   10.1.187.129   <none>        8080/TCP                     102m
prometheus-operator-operator                   ClusterIP   10.1.242.61    <none>        8080/TCP,443/TCP             102m
prometheus-operator-prometheus                 NodePort    10.1.156.181   <none>        9090:30268/TCP               102m
prometheus-operator-prometheus-node-exporter   ClusterIP   10.1.226.134   <none>        9100/TCP                     102m

修改 kubelet 打开只读端口

prometheus 需要访问 kubelet 的 10255 端口获取 metrics。但是默认情况下 10255 端口是不开放的,会导致 prometheus 上有 unhealthy。打开只读端口需要编辑所有节点的vi /var/lib/kubelet/config.yaml (我这里有图形界面可以用gedit命令)文件,加入以下内容

port: 10250
readOnlyPort: 10255          #增加此行

重启 kubelet 服务

systemctl restart kubelet.service

查看grafana随机端口

# kubectl get svc -n monitoring|grep grafana
prometheus-operator-grafana                    NodePort    10.1.125.228   <none>        80:30284/TCP                 106m

可以看到,它的随机端口为:30284

访问grafana,地址为:http://nodeip:30284/

默认的用户名/密码为:admin/prom-operator,登陆后,点击Manage,如下图:

1.png
1.png

效果如下:

1.png
1.png

方法2:通过 Ingress 来暴漏服务 

安装Ingress

kubectl apply -f https://kuboard.cn/install-script/v1.17.x/nginx-ingress.yaml

新建文件prometheus-ingress.yaml:

apiVersion: extensions/v1beta1
kind: Ingress
metadata:
  namespace: monitoring
  name: prometheus-ingress
spec:
  rules:
  - host: grafana.domain.com
    http:
      paths:
      - backend:
          serviceName: prometheus-operator-grafana 
          servicePort: 80
  - host: prometheus.domain.com
    http:
      paths:
      - backend:
          serviceName: prometheus-operator-prometheus
          servicePort: 9090
  - host: alertmanager.domain.com
    http:
      paths:
      - backend:
          serviceName: prometheus-operator-alertmanager
          servicePort: 9093

执行命令

kubectl apply -f prometheus-ingress.yaml

修改hosts文件:

192.168.31.179 grafana.domain.com
192.168.31.179 prometheus.domain.com
192.168.31.179 alertmanager.domain.com

注意:192.168.31.179 是Node节点ip

访问以下几个url,是否正常。

http://grafana.domain.com
http://prometheus.domain.com
http://alertmanager.domain.com

效果如下:

1.png
1.png
1.png
1.png
1.png
1.png

三、修改k8s配置

Prometheus Operator某些图表没有数据,需要修改配置文件才行。

etcd

prometheus 通过 4001 端口访问 etcd metrics,但是 etcd 默认监听 2379。解决方法是在 /etc/kubernetes/manifests/etcd.yaml

增加k8s-app: etcd-server

apiVersion: v1
kind: Pod
metadata:
  creationTimestamp: null
  labels:
    k8s-app: etcd-server
    component: etcd
    tier: control-plane

重启kubelet

systemctl restart kubelet.service

注意:经验证,此方法无效。etcd依然没有图表数据。

kube-controller-manager

由于 kube-controller-manager 和 kube-scheduler 默认监听 127.0.0.1 ,prometheus 无法通过本机地址获取数据,需要修改kube-controller-manager 和 kube-scheduler 监听地址。

解决办法如下:/etc/kubernetes/manifests/kube-controller-manager.yaml 增加 k8s-app: kube-controller-manager

apiVersion: v1
kind: Pod
metadata:
  creationTimestamp: null
  labels:
    k8s-app: kube-controller-manager
    component: kube-controller-manager
    tier: control-plane

重启kubelet

systemctl restart kubelet.service

访问图表

1.png
1.png

kube-scheduler

/etc/kubernetes/manifests/kube-scheduler.yaml增加 k8s-app: kube-scheduler

apiVersion: v1
kind: Pod
metadata:
  creationTimestamp: null
  labels:
    k8s-app: kube-scheduler
    component: kube-scheduler
    tier: control-plane

重启kubelet

systemctl restart kubelet.service

访问图表

1.png
1.png

本文参考链接:

https://www.cnblogs.com/majiang/p/11431577.html

https://blog.csdn.net/choerodon/article/details/98587027

本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2020-09-28 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

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

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

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 一、概述
    • 架构
    • 二、安装
      • 环境说明
        • 安装
          • 查看资源
            • 方法1:修改访问类型为NodePort
              • 修改 kubelet 打开只读端口
            • 方法2:通过 Ingress 来暴漏服务 
            • 三、修改k8s配置
              • etcd
                • kube-controller-manager
                  • kube-scheduler
                  相关产品与服务
                  容器服务
                  腾讯云容器服务(Tencent Kubernetes Engine, TKE)基于原生 kubernetes 提供以容器为核心的、高度可扩展的高性能容器管理服务,覆盖 Serverless、边缘计算、分布式云等多种业务部署场景,业内首创单个集群兼容多种计算节点的容器资源管理模式。同时产品作为云原生 Finops 领先布道者,主导开源项目Crane,全面助力客户实现资源优化、成本控制。
                  领券
                  问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档