Prometheus K8S部署

时间:2022-01-08 07:55:35

Prometheus K8S部署

Prometheus K8S部署

Prometheus K8S部署

Prometheus K8S部署

部署方式:https://github.com/kubernetes/kubernetes/tree/master/cluster/addons/prometheus

源码目录:kubernetes/cluster/addons/prometheus

服务发现:https://prometheus.io/docs/prometheus/latest/configuration/configuration/#kubernetes_sd_config

部署条件

1、K8S中部署内部DNS服务

2、已有可使用的动态PV

配置文件

下列是已经修改好的配置文件,可根据条件自行微调

  • # 访问api授权
  • prometheus-rbac.yaml
  • apiVersion: v1
    # 创建 ServiceAccount 授予权限
    kind: ServiceAccount
    metadata:
    name: prometheus
    namespace: kube-system
    labels:
    kubernetes.io/cluster-service: "true"
    addonmanager.kubernetes.io/mode: Reconcile
    ---
    apiVersion: rbac.authorization.k8s.io/v1beta1
    kind: ClusterRole
    metadata:
    name: prometheus
    labels:
    kubernetes.io/cluster-service: "true"
    addonmanager.kubernetes.io/mode: Reconcile
    rules:
    - apiGroups:
    - ""
    # 授予的权限
    resources:
    - nodes
    - nodes/metrics
    - services
    - endpoints
    - pods
    verbs:
    - get
    - list
    - watch
    - apiGroups:
    - ""
    resources:
    - configmaps
    verbs:
    - get
    - nonResourceURLs:
    - "/metrics"
    verbs:
    - get
    ---
    # 角色绑定
    apiVersion: rbac.authorization.k8s.io/v1beta1
    kind: ClusterRoleBinding
    metadata:
    name: prometheus
    labels:
    kubernetes.io/cluster-service: "true"
    addonmanager.kubernetes.io/mode: Reconcile
    roleRef:
    apiGroup: rbac.authorization.k8s.io
    kind: ClusterRole
    name: prometheus
    subjects:
    - kind: ServiceAccount
    name: prometheus
    namespace: kube-system

    配置文件

  • # 管理prometheus配置文件
  • prometheus-configmap.yaml
  • # Prometheus configuration format https://prometheus.io/docs/prometheus/latest/configuration/configuration/
    apiVersion: v1
    kind: ConfigMap
    metadata:
    name: prometheus-config
    namespace: kube-system
    labels:
    kubernetes.io/cluster-service: "true"
    addonmanager.kubernetes.io/mode: EnsureExists
    data:
    # 存放prometheus配置文件
    prometheus.yml: |
    # 配置采集目标
    scrape_configs:
    - job_name: prometheus
    static_configs:
    - targets:
    # 采集自身
    - localhost:9090 # 采集:Apiserver 生存指标
    # 创建的job name 名称为 kubernetes-apiservers
    - job_name: kubernetes-apiservers
    # 基于k8s的服务发现
    kubernetes_sd_configs:
    - role: endpoints
    # 使用通信标记标签
    relabel_configs:
    # 保留正则匹配标签
    - action: keep
    # 已经包含
    regex: default;kubernetes;https
    source_labels:
    - __meta_kubernetes_namespace
    - __meta_kubernetes_service_name
    - __meta_kubernetes_endpoint_port_name
    # 使用方法为https、默认http
    scheme: https
    tls_config:
    # promethus访问Apiserver使用认证
    ca_file: /var/run/secrets/kubernetes.io/serviceaccount/ca.crt
    # 跳过https认证
    insecure_skip_verify: true
    # promethus访问Apiserver使用认证
    bearer_token_file: /var/run/secrets/kubernetes.io/serviceaccount/token # 采集:Kubelet 生存指标
    - job_name: kubernetes-nodes-kubelet
    kubernetes_sd_configs:
    # 发现集群中所有的Node
    - role: node
    relabel_configs:
    # 通过regex获取关键信息
    - action: labelmap
    regex: __meta_kubernetes_node_label_(.+)
    scheme: https
    tls_config:
    ca_file: /var/run/secrets/kubernetes.io/serviceaccount/ca.crt
    insecure_skip_verify: true
    bearer_token_file: /var/run/secrets/kubernetes.io/serviceaccount/token # 采集:nodes-cadvisor 信息
    - job_name: kubernetes-nodes-cadvisor
    kubernetes_sd_configs:
    - role: node
    relabel_configs:
    - action: labelmap
    regex: __meta_kubernetes_node_label_(.+)
    # 重命名标签
    - target_label: __metrics_path__
    replacement: /metrics/cadvisor
    scheme: https
    tls_config:
    ca_file: /var/run/secrets/kubernetes.io/serviceaccount/ca.crt
    insecure_skip_verify: true
    bearer_token_file: /var/run/secrets/kubernetes.io/serviceaccount/token # 采集:service-endpoints 信息
    - job_name: kubernetes-service-endpoints
    # 选定指标
    kubernetes_sd_configs:
    - role: endpoints
    relabel_configs:
    - action: keep
    regex: true
    # 指定源标签
    source_labels:
    - __meta_kubernetes_service_annotation_prometheus_io_scrape
    - action: replace
    regex: (https?)
    source_labels:
    - __meta_kubernetes_service_annotation_prometheus_io_scheme
    # 重命名标签采集
    target_label: __scheme__
    - action: replace
    regex: (.+)
    source_labels:
    - __meta_kubernetes_service_annotation_prometheus_io_path
    target_label: __metrics_path__
    - action: replace
    regex: ([^:]+)(?::\d+)?;(\d+)
    replacement: $1:$2
    source_labels:
    - __address__
    - __meta_kubernetes_service_annotation_prometheus_io_port
    target_label: __address__
    - action: labelmap
    regex: __meta_kubernetes_service_label_(.+)
    - action: replace
    source_labels:
    - __meta_kubernetes_namespace
    target_label: kubernetes_namespace
    - action: replace
    source_labels:
    - __meta_kubernetes_service_name
    target_label: kubernetes_name # 采集:kubernetes-services 服务指标
    - job_name: kubernetes-services
    kubernetes_sd_configs:
    - role: service
    # 黑盒探测,探测IP与端口是否可用
    metrics_path: /probe
    params:
    module:
    - http_2xx
    relabel_configs:
    - action: keep
    regex: true
    source_labels:
    - __meta_kubernetes_service_annotation_prometheus_io_probe
    - source_labels:
    - __address__
    target_label: __param_target
    # 使用 blackbox进行黑盒探测
    - replacement: blackbox
    target_label: __address__
    - source_labels:
    - __param_target
    target_label: instance
    - action: labelmap
    regex: __meta_kubernetes_service_label_(.+)
    - source_labels:
    - __meta_kubernetes_namespace
    target_label: kubernetes_namespace
    - source_labels:
    - __meta_kubernetes_service_name
    target_label: kubernetes_name # 采集: kubernetes-pods 信息
    - job_name: kubernetes-pods
    kubernetes_sd_configs:
    - role: pod
    relabel_configs:
    - action: keep
    regex: true
    source_labels:
    # 只保留采集的信息
    - __meta_kubernetes_pod_annotation_prometheus_io_scrape
    - action: replace
    regex: (.+)
    source_labels:
    - __meta_kubernetes_pod_annotation_prometheus_io_path
    target_label: __metrics_path__
    - action: replace
    regex: ([^:]+)(?::\d+)?;(\d+)
    replacement: $1:$2
    source_labels:
    # 采集地址
    - __address__
    # 采集端口
    - __meta_kubernetes_pod_annotation_prometheus_io_port
    target_label: __address__
    - action: labelmap
    regex: __meta_kubernetes_pod_label_(.+)
    - action: replace
    source_labels:
    - __meta_kubernetes_namespace
    target_label: kubernetes_namespace
    - action: replace
    source_labels:
    - __meta_kubernetes_pod_name
    target_label: kubernetes_pod_name
    alerting:
    # 告警配置文件
    alertmanagers:
    - kubernetes_sd_configs:
    # 采用动态获取
    - role: pod
    tls_config:
    ca_file: /var/run/secrets/kubernetes.io/serviceaccount/ca.crt
    bearer_token_file: /var/run/secrets/kubernetes.io/serviceaccount/token
    relabel_configs:
    - source_labels: [__meta_kubernetes_namespace]
    regex: kube-system
    action: keep
    - source_labels: [__meta_kubernetes_pod_label_k8s_app]
    regex: alertmanager
    action: keep
    - source_labels: [__meta_kubernetes_pod_container_port_number]
    regex:
    action: drop

    配置文件

  • # 将prometheus暴露访问
  • prometheus-service.yaml
  • apiVersion: apps/v1
    kind: StatefulSet
    metadata:
    name: prometheus
    # 部署命名空间
    namespace: kube-system
    labels:
    k8s-app: prometheus
    kubernetes.io/cluster-service: "true"
    addonmanager.kubernetes.io/mode: Reconcile
    version: v2.2.1
    spec:
    serviceName: "prometheus"
    replicas: 1
    podManagementPolicy: "Parallel"
    updateStrategy:
    type: "RollingUpdate"
    selector:
    matchLabels:
    k8s-app: prometheus
    template:
    metadata:
    labels:
    k8s-app: prometheus
    annotations:
    scheduler.alpha.kubernetes.io/critical-pod: ''
    spec:
    priorityClassName: system-cluster-critical
    serviceAccountName: prometheus
    # 初始化容器
    initContainers:
    - name: "init-chown-data"
    image: "busybox:latest"
    imagePullPolicy: "IfNotPresent"
    command: ["chown", "-R", "65534:65534", "/data"]
    volumeMounts:
    - name: prometheus-data
    mountPath: /data
    subPath: ""
    containers:
    - name: prometheus-server-configmap-reload
    image: "jimmidyson/configmap-reload:v0.1"
    imagePullPolicy: "IfNotPresent"
    args:
    - --volume-dir=/etc/config
    - --webhook-url=http://localhost:9090/-/reload
    volumeMounts:
    - name: config-volume
    mountPath: /etc/config
    readOnly: true
    resources:
    limits:
    cpu: 10m
    memory: 10Mi
    requests:
    cpu: 10m
    memory: 10Mi - name: prometheus-server
    # 主要使用镜像
    image: "prom/prometheus:v2.2.1"
    imagePullPolicy: "IfNotPresent"
    args:
    - --config.file=/etc/config/prometheus.yml
    - --storage.tsdb.path=/data
    - --web.console.libraries=/etc/prometheus/console_libraries
    - --web.console.templates=/etc/prometheus/consoles
    - --web.enable-lifecycle
    ports:
    - containerPort: 9090
    readinessProbe:
    # 健康检查
    httpGet:
    path: /-/ready
    port: 9090
    initialDelaySeconds: 30
    timeoutSeconds: 30
    livenessProbe:
    httpGet:
    path: /-/healthy
    port: 9090
    initialDelaySeconds: 30
    timeoutSeconds: 30
    # based on 10 running nodes with 30 pods each
    resources:
    limits:
    cpu: 200m
    memory: 1000Mi
    requests:
    cpu: 200m
    memory: 1000Mi
    # 数据卷
    volumeMounts:
    - name: config-volume
    mountPath: /etc/config
    - name: prometheus-data
    mountPath: /data
    subPath: ""
    terminationGracePeriodSeconds: 300
    volumes:
    - name: config-volume
    configMap:
    name: prometheus-config
    volumeClaimTemplates:
    - metadata:
    name: prometheus-data
    spec:
    # 使用动态PV、修改为已创建的PV动态存储
    storageClassName: managed-nfs-storage
    accessModes:
    - ReadWriteOnce
    resources:
    requests:
    storage: "16Gi"

    配置文件

  • # 通过有状态的形式将prometheus部署
  • prometheus-statefulset.yaml
  • kind: Service
    apiVersion: v1
    metadata:
    name: prometheus
    # 指定命名空间
    namespace: kube-system
    labels:
    kubernetes.io/name: "Prometheus"
    kubernetes.io/cluster-service: "true"
    addonmanager.kubernetes.io/mode: Reconcile
    spec:
    # 添加外部访问
    type: NodePort
    # 指定内部访问协议
    ports:
    - name: http
    port: 9090
    protocol: TCP
    targetPort: 9090
    selector:
    k8s-app: prometheus

    配置文件

部署

1、下载github包:https://github.com/kubernetes/kubernetes/

2、复制文件到指定目录

mkdir ~/prometheus
cp ~/kubernetes/cluster/addons/prometheus/* ~/prometheus/

3、进入到目录

cd ~/prometheus/

4、k8s通过配置文件创建运行容器

kubectl apply -f prometheus-rbac.yaml
kubectl apply -f prometheus-configmap.yaml
kubectl apply -f prometheus-statefulset.yaml
kubectl apply -f prometheus-service.yaml

5、查看创建资源

kubectl get pod,svc -n kube-system
NAME READY STATUS RESTARTS AGE
pod/coredns-64479cf49b-lsqqn 1/1 Running 0 75m
pod/prometheus-0 2/2 Running 0 2m12s NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
service/kube-dns ClusterIP 10.0.0.2 <none> 53/UDP,53/TCP,9153/TCP 75m
service/prometheus NodePort 10.0.0.170 <none> 9090:42575/TCP 8s

6、测试通过端口开启端口访问监控端

Prometheus K8S部署

Prometheus K8S部署的更多相关文章

  1. k8s部署prometheus

    https://www.kancloud.cn/huyipow/prometheus/527092 https://songjiayang.gitbooks.io/prometheus/content ...

  2. Prometheus K8S中部署Alertmanager

    Prometheus K8S中部署Alertmanager 设置告警和通知的主要步骤如下:一.部署Alertmanager二.配置Prometheus与Alertmanager通信三.配置告警 1. ...

  3. prometheus operator 部署

    prometheus operator 部署自定义记录 环境: k8s 1.11集群版本,kubeadm部署 docker 17.3.2版本 Centos 7系统 阿里云服务器 operator 源码 ...

  4. Python服务Dokcer化并k8s部署实例

    这篇文章记录了我试验将一个基于python的服务docker化并k8s部署的过程. 服务介绍Docker化设计业务代码改造创建docker镜像K8S部署设计yaml文件运行服务介绍这是一个用 pyth ...

  5. prometheus &plus; grafana部署RabbitMQ监控

    prometheus + grafana部署RabbitMQ监控 1.grafana导入dashboards https://grafana.com/dashboards/2121   2.expor ...

  6. ballerina 学习二十七 项目k8s部署&amp&semi;&amp&semi; 运行

    ballerina k8s 部署和docker 都是同样的简单,编写service 添加注解就可以了 参考项目 https://ballerina.io/learn/by-guide/restful- ...

  7. Rancher&plus;K8S部署手册

    目前创建K8S集群的安装程序最受欢迎的有Kops,Kubespray,kubeadm,rancher,以及个人提供的脚本集等. Kops和Kubespary在国外用的比较多,没有处理中国的网络问题,没 ...

  8. Jenkins&plus;Git&plus;Docker&plus;K8s部署

    准备工作 Jenkins已安装 Docker和K8s部署运行成功 代码管理工具使用Git 最近公司项目使用Jenkins+Git+Docker+K8s进行持续化构建部署,这里笔者整理了一下构建部署的相 ...

  9. K8S部署

    k8S部署 柯穴上网 安装openvpn来获取docker镜像(不是本文重点不做详述) 软件包安装 1 关闭iptables,禁用firewalld,关闭selinux 2 配置yum仓库(使用阿里云 ...

随机推荐

  1. LeetCode&lbrack;3&rsqb; Longest Substring Without Repeating Characters

    题目描述 Given a string, find the length of the longest substring without repeating characters. For exam ...

  2. 黄聪:微信支付错误两个问题的解决:curl出错,错误码&colon;60

    如下是运行微信支付测试代码时出错代码: Warning: curl_setopt() expects parameter 2 to be long, string given in D:\wwwroo ...

  3. 【读书笔记】iOS网络-异步请求与运行循环

    异步请求需要运行循环.当数据传递到服务器或是被客户端接收时,运行循环用于实现事件与委托对象之间的通信.异步请求在发出时,会在当前线程的运行循环上操作,这个实现细节是很重要的,因为在GCD块中或者是通过 ...

  4. C&num; 利用SMTP异步发送邮件

    C#实现收发邮件功能需要用到两个命名空间  System.Net; 和 System.Net.Mail; SmtpClient client = new SmtpClient("smtp.g ...

  5. Android学习探索之运用MVP设计模式实现项目解耦

    前言: 一直致力于提高开发效率降低项目耦合,今天想抽空学习一下MVP架构设计模式,学习一下如何运用到项目中. MVP架构设计模式 MVP模式是一种架构设计模式,也是一种经典的界面模式.MVP中的M代表 ...

  6. win10 uwp 获得焦点改变

    本文讲的是当我们应用失去焦点时,我们获得事件,当我们应用获得焦点,同样获得事件.同时,在应用不可以见时,我们也可以获得. 上面一张图,开始是应用启动,获得焦点,应用显示.然后我们打开另一个应用,切换, ...

  7. 芝麻HTTP:Python爬虫入门之Cookie的使用

    为什么要使用Cookie呢? Cookie,指某些网站为了辨别用户身份.进行session跟踪而储存在用户本地终端上的数据(通常经过加密) 比如说有些网站需要登录后才能访问某个页面,在登录之前,你想抓 ...

  8. c&plus;&plus;中求数组长度

    #include <iostream> using namespace std; template <class T> int getArrSize(T& arr){ ...

  9. java中的接口与继承,接口的例子讲解

    extends 继承类:implements 实现接口. 简单说: 1.extends是继承父类,只要那个类不是声明为final或者那个类定义为abstract的就能继承, 2.JAVA中不支持多重继 ...

  10. 11-02 Java Object类使用详解

     Object 作为超类 Object是类层次结构的根类,所有的类都直接或者间接的继承自Object类. Object类的构造方法有一个,并且是无参构造,这其实就是理解当时我们说过,子类构造方法默认访 ...