精华内容
下载资源
问答
  • Prometheus监控k8s

    2020-04-18 13:01:53
  • K8s部署prometheus监控k8s

    千次阅读 2021-01-01 22:43:39
    1、prometheus 作为监控k8s的最佳选择在这里做一个在k8s部署prometheus文档供大家参考。 #私自转载请联系博主否则必定追究版权 下方有微信 系统环境: IP 节点名称(不是主机名) 192.168.182.150 k8s-...

    prometheus监控使用(按照文档步骤就可以操作成功)。
    文档分别坐了使用k8s集群部署docker 跑prometheus监控。(后期如果有时间会做一个监控pod的文档)
    监控K8s细节文章链接
    https://blog.csdn.net/zeorg/article/details/112164465
    特别说明:此环境要提前部署好k8s。
    1、prometheus 作为监控k8s的最佳选择在这里做一个在k8s部署prometheus文档供大家参考。

    #私自转载请联系博主否则必定追究版权 下方有微信
    系统环境:

    IP 节点名称(不是主机名)
    192.168.182.150 k8s-master
    192.168.182.151 k8s-node2
    192.168.182.152 k8s-node2
    192.168.182.153 docker仓库

    1、在docker仓库里面先拉取prometheus images(直接使用k8s拉取因为网络问题可以说基本是失败的)。
    docker仓库执行

    docker pull prom/prometheus:v2.2.1 
    docker   tag   prom/prometheus:v2.2.1  192.168.182.153:5000/prom/prometheus:v2.2.1
    ###为prometheus:v2.2.1 images 打一个标签
    docker   push  192.168.182.153:5000/prom/prometheus:v2.2.1
    ##上传打包后的prometheus:v2.2.1镜像
    

    2、使用k8s创建prometheus 容器配置。
    k8s-master执行

    创建文件prometheus-config.yml(如果是实验环境目录无所谓)
    apiVersion: v1
    kind: ConfigMap
    metadata:
      name: prometheus-config
    data:
      prometheus.yml: |
        global:
          scrape_interval:     15s
          evaluation_interval: 15s
        scrape_configs:
          - job_name: 'prometheus'
            static_configs:
            - targets: ['localhost:9090']
    创建文件prometheus-deployment.yml(如果是实验环境目录无所谓)
    apiVersion: v1
    kind: "Service"
    metadata:
      name: prometheus
      labels:
        name: prometheus
    spec:
      ports:
      - name: prometheus
        protocol: TCP
        port: 9090
        targetPort: 9090
      selector:
        app: prometheus
      type: NodePort
    ---
    apiVersion: extensions/v1beta1
    kind: Deployment
    metadata:
      labels:
        name: prometheus
      name: prometheus
    spec:
      replicas: 1
      template:
        metadata:
          labels:
            app: prometheus
        spec:
          containers:
          - name: prometheus
            image: prom/prometheus:v2.2.1
            command:
            - "/bin/prometheus"
            args:
            - "--config.file=/etc/prometheus/prometheus.yml"
            ports:
            - containerPort: 9090
              protocol: TCP
            volumeMounts:
            - mountPath: "/etc/prometheus"
              name: prometheus-config
          volumes:
          - name: prometheus-config
            configMap:
              name: prometheus-config
    

    3、使用k8s下发任务。
    k8s-master执行

    kubectl create -f prometheus-config.yml
    kubeckubectl create -f prometheus-deployment.yml
    

    4、查看任务进度。
    k8s-master执行

    [root@master prometheus]# kubectl get pods    ##如果下方创建失败可以根据NAME名称查看日志
    NAME                          READY     STATUS    RESTARTS   AGE
    nginx-3121059884-lx6qc        1/1       Running   0          1h
    nginx-3121059884-n6bdl        1/1       Running   0          1h
    nginx-3121059884-n9pxz        1/1       Running   1          4h
    prometheus-3596598276-5wrkl   1/1       Running   0          1h
    

    5、查看失败日志(我上面是成功后的所以状态是Running)大家可以看我的报错有多次镜像拉取失败。
    k8s-master执行

     kubectl describe pod prometheus-3596598276-5wrkl
    Name:           prometheus-3596598276-5wrkl
    Namespace:      default
    Node:           node-1/192.168.182.151
    Start Time:     Fri, 01 Jan 2021 21:39:02 +0800
    Labels:         app=prometheus
                    pod-template-hash=3596598276
    Status:         Running
    IP:             10.10.17.5
    Controllers:    ReplicaSet/prometheus-3596598276
    Containers:
      prometheus:
        Container ID:       docker://d2887dbb516b7415f0ddf1ee1c8fbf0b389db935e361c6108c44a9b52bb6ef29
        Image:              prom/prometheus:v2.2.1
        Image ID:           docker-pullable://192.168.182.153:5000/prom/prometheus@sha256:b0912ab008c270be88f6e81d3df6dfd24b7c1f9b4aacbffa70abe2a382152223
        Port:               9090/TCP
        Command:
          /bin/prometheus
        Args:
          --config.file=/etc/prometheus/prometheus.yml
        State:              Running
          Started:          Fri, 01 Jan 2021 22:24:25 +0800
        Ready:              True
        Restart Count:      0
        Volume Mounts:
          /etc/prometheus from prometheus-config (rw)
        Environment Variables:      <none>
    Conditions:
      Type          Status
      Initialized   True 
      Ready         True 
      PodScheduled  True 
    Volumes:
      prometheus-config:
        Type:       ConfigMap (a volume populated by a ConfigMap)
        Name:       prometheus-config
    QoS Class:      BestEffort
    Tolerations:    <none>
    Events:
      FirstSeen     LastSeen        Count   From                    SubObjectPath                   Type            Reason                  Message
      ---------     --------        -----   ----                    -------------                   --------        ------                  -------
      1h            58m             9       {default-scheduler }                                    Warning         FailedScheduling        no nodes available to schedule pods
      57m           57m             6       {default-scheduler }                                    Warning         FailedScheduling        no nodes available to schedule pods
      56m           56m             1       {default-scheduler }                                    Normal          Scheduled               Successfully assigned prometheus-3596598276-5wrkl to node-1
      56m           44m             14      {kubelet node-1}                                        Warning         FailedMount             MountVolume.SetUp failed for volume "kubernetes.io/configmap/0a83b05e-4c34-11eb-ae3b-000c29fd225f-prometheus-config" (spec.Name: "prometheus-config") pod "0a83b05e-4c34-11eb-ae3b-000c29fd225f" (UID: "0a83b05e-4c34-11eb-ae3b-000c29fd225f") with: configmaps "prometheus-config" not found
      54m           43m             6       {kubelet node-1}                                        Warning         FailedMount             Unable to mount volumes for pod "prometheus-3596598276-5wrkl_default(0a83b05e-4c34-11eb-ae3b-000c29fd225f)": timeout expired waiting for volumes to attach/mount for pod "default"/"prometheus-3596598276-5wrkl". list of unattached/unmounted volumes=[prometheus-config]
      54m           43m             6       {kubelet node-1}                                        Warning         FailedSync              Error syncing pod, skipping: timeout expired waiting for volumes to attach/mount for pod "default"/"prometheus-3596598276-5wrkl". list of unattached/unmounted volumes=[prometheus-config]
      32m           32m             1       {kubelet node-1}        spec.containers{prometheus}     Normal          BackOff                 Back-off pulling image "prom/prometheus:v2.2.1"
      32m           32m             1       {kubelet node-1}                                        Warning         FailedSync              Error syncing pod, skipping: failed to "StartContainer" for "prometheus" with ImagePullBackOff: "Back-off pulling image \"prom/prometheus:v2.2.1\""
    
      32m   14m     2       {kubelet node-1}        spec.containers{prometheus}     Warning Failed          Failed to pull image "prom/prometheus:v2.2.1": net/http: request canceled
      32m   14m     2       {kubelet node-1}                                        Warning FailedSync      Error syncing pod, skipping: failed to "StartContainer" for "prometheus" with ErrImagePull: "net/http: request canceled"
    
      42m   14m     3       {kubelet node-1}        spec.containers{prometheus}     Normal  Pulling                 pulling image "prom/prometheus:v2.2.1"
      11m   11m     1       {kubelet node-1}        spec.containers{prometheus}     Normal  Pulled                  Successfully pulled image "prom/prometheus:v2.2.1"
      42m   11m     2       {kubelet node-1}                                        Warning MissingClusterDNS       kubelet does not have ClusterDNS IP configured and cannot create Pod using "ClusterFirst" policy. Falling back to DNSDefault policy.
      11m   11m     1       {kubelet node-1}        spec.containers{prometheus}     Normal  Created                 Created container with docker id d2887dbb516b; Security:[seccomp=unconfined]
      11m   11m     1       {kubelet node-1}        spec.containers{prometheus}     Normal  Started                 Started container with docker id d2887dbb516b
    

    6、查看容器随机分配端口。
    k8s-master执行

    [root@master prometheus]# kubectl get all
    NAME                DESIRED   CURRENT   UP-TO-DATE   AVAILABLE   AGE
    deploy/nginx        3         3         3            3           4h
    deploy/prometheus   1         1         1            1           1h
    
    NAME             CLUSTER-IP      EXTERNAL-IP   PORT(S)          AGE
    svc/kubernetes   10.10.0.1       <none>        443/TCP          4h
    svc/nginx        10.10.214.157   <nodes>       80:31882/TCP     4h
    svc/prometheus   10.10.165.138   <nodes>       9090:32332/TCP   1h
    

    6、在web浏览器打开。
    在这里插入图片描述
    在这里插入图片描述

    展开全文
  • prometheus监控k8s集群

    2020-11-04 14:29:21
    prometheus监控k8s集群简介环境介绍安装部署部署metrics部署prometheus部署alertmanager部署node-exporter部署blackbox-exporter查看所有pod状态查看界面及日志,确认运行状态 简介 在日常的运维工作中,为了减少...

    简介

    • 在日常的运维工作中,为了减少业务故障的发现和解决时间,通常是需要监控系统的支持,zabbix作为常用监控手段,并不足以满足kubernetes集群的监控,而Prometheus可以更好的进行相关指标的监控。
    • 监控的四个黄金指标分为“延迟,通讯量,错误,饱和度”。
    • 从网络到编排的指标及手段可以查看下面图片
      指标及监控手段

    环境介绍

    kubernetes 1.16.4

    安装部署

    涉及到的部署文件已经放到了github,需要自取,另外不要脸的求点个5星好评。
    github地址:

    https://github.com/zhangyudd/prometheus.git
    

    本文涉及到Prometheus存储,使用了pvc,可自行更换存储。

    部署metrics

    cd metrics/kube-state-metrics
    kubectl apply -f .
    cd metrics/
    kubectl apply -f .
    

    部署prometheus

    cd prometheus
    kubectl apply -f .
    

    拷贝rules到容器对应存储目录 /prometheus/
    如果修改了配置文件可以进行热更:curl -X POST http://prometheus/-/reload

    部署alertmanager

    cd alertmanager
    kubectl apply -f .
    

    这里使用的邮箱,修改对应的邮箱为自己邮箱。

    部署node-exporter

    cd node-exporter
    kubectl apply -f .
    

    部署blackbox-exporter

    cd blackbox-exporter
    kubectl apply -f .
    

    service 发现需要在service中添加以下字段
    #http_probe
    annotations:
    prometheus.io/scrape: ‘true’
    prometheus.io/http-probe: ‘true’
    prometheus.io/http-probe-port: ‘8080’
    prometheus.io/http-probe-path: ‘/healthz’
    #tcp_probe
    annotations:
    prometheus.io/scrape: ‘true’
    prometheus.io/tcp-probe: ‘true’
    prometheus.io/tcp-probe-port: ‘80’

    查看所有pod状态

    kubectl get pods -n kube-system
    

    部署完成后可以添加Prometheus和alertmanager的ingress,方便查看状态及问题。

    查看界面及日志,确认运行状态

    在这里插入图片描述
    在这里插入图片描述

    添加grafana数据源展示图表

    url填写以下链接:
    http://prometheus.kube-system:9090/

    以下为一些监控常用图表:
    12870 这个模板是kube-state-metrics采集的各种k8s资源对象的状态的图表
    315这个模板是cadvisor采集的各种指标的图表
    1860 和 9276 这个模板是node-exporter采集的各种主机相关的指标的图表
    6417这个模板是kube-state-metrics采集的各种k8s资源对象的状态的图表
    4859和4865这两个模板是blackbox-exporter采集的服务的http状态指标的图表(两个效果基本一样,选择其一即可)
    5345这个模板是blackbox-exporter采集的服务的网络状态指标的图表
    11529和9965blackbox采集的关于http tcp探针

    展开全文
  • prometheus监控k8s集群系列之cadvisor篇

    万次阅读 2020-09-26 10:14:40
    通过cadvisor结合prometheus监控k8s集群容器基础设施(container) 简介 cAdvisor可以对Node机器上的资源及容器进行实时监控和性能数据采集,包括CPU、内存使用情况、网络吞吐量及文件系统使用情况,1.7.3版本以前,...

    通过cadvisor结合prometheus监控k8s集群容器基础设施(container)

    简介

    cAdvisor可以对Node机器上的资源及容器进行实时监控和性能数据采集,包括CPU、内存使用情况、网络吞吐量及文件系统使用情况,1.7.3版本以前,cadvisor的metrics数据集成在kubelet的metrics中,在1.7.3以后版本中cadvisor的metrics被从kubelet的metrics独立出来了,每个Node机器上都会有一个aAdvisor对这台机器进行监控。

    操作

    从简介中我们可以知道,在k8s集群中,每个node节点都会有一个cAdvisor对当前主机进行监控

    # prometheus对接k8s的服务发现
    https://prometheus.io/docs/prometheus/latest/configuration/configuration/#kubernetes_sd_config
    

    从Prometheus的官方文档中,我们可以知道,Prometheus支持对k8s的自动服务发现,支持以下几个角色

    • node
    • service
    • pod
    • endpoints
    • ingress

    新版本的标准配置,kubelet中的cadvisor是没有对外开放4194端口的。所以,我们只能通过apiserver提供的api做代理获取监控指标

    cAdvisor的metrics地址: /api/v1/nodes/[节点名称]/proxy/metrics/cadvisor
    

    metrics地址中的节点名称参数可以通过prometheus的kubernetes_sd_config中的node角色自动发现k8s集群中的所有node节点

    抓取任务配置如下:

    - job_name: 'kubernetes-cadvisor'
      scheme: https
      tls_config:
        ca_file: /var/run/secrets/kubernetes.io/serviceaccount/ca.crt
      bearer_token_file: /var/run/secrets/kubernetes.io/serviceaccount/token
      kubernetes_sd_configs:
      - role: node
      relabel_configs:
      - target_label: __address__
        replacement: kubernetes.default.svc:443
      - source_labels: [__meta_kubernetes_node_name]
        regex: (.+)
        replacement: /api/v1/nodes/${1}/proxy/metrics/cadvisor
        target_label: __metrics_path__
      - action: labelmap
        regex: __meta_kubernetes_node_label_(.+)
      - source_labels: [__meta_kubernetes_node_name]
        action: replace
        target_label: node
      - source_labels: [__meta_kubernetes_node_label_node]
        action: replace
        target_label: node_name
    

    将以上配置添加到configmap prometheus-config中,详见“k8s环境下搭建prometheus”一文,更新configmap和pod

    ## 更新configmap
    kubectl create configmap prometheus-config --from-file=prometheus.yaml -n monitoring -o yaml --dry-run | kubectl replace -f -
    
    ## 更新pod
    kubectl apply -f prometheus-deploy.yaml
    
    ## 热更新配置
    curl -XPOST http://localhost:30090/-/reload
    

    页面查看prometheus,可以看到相应的metrics。

    常用指标

    #cpu使用时间
    container_cpu_usage_seconds_total
    #分配cpu limit数
    container_spec_cpu_quota
    #内存使用量
    container_memory_usage_bytes
    #分配内存 limit数
    container_spec_memory_limit_bytes
    #网络接收流量
    container_network_receive_bytes_total
    #网路发送流量
    container_network_transmit_bytes_total
    #磁盘使用量
    container_fs_usage_bytes
    #磁盘写
    container_fs_writes_bytes_total
    #磁盘读
    container_fs_reads_bytes_total
    

    基本查询语句

    ## 容器cpu使用率
    sum by(pod_name, namespace) (rate(container_cpu_usage_seconds_total{image!=""}[5m])) / (sum by(pod_name, namespace) (container_spec_cpu_quota{image!=""} / 100000)) * 100
    
    ## 容器内存使用率
    sum by(pod_name, namespace) (container_memory_rss{image!=""}) / sum by(pod_name, namespace) (container_spec_memory_limit_bytes{image!=""}) * 100 != +Inf
    
    ## 磁盘使用量
    sum by(pod_name, namespace) (container_fs_usage_bytes{image!=""}) / 1024 / 1024 / 1024
    

    欢迎关注我的个人微信公众号,一个菜鸟程序猿的技术分享和奔溃日常

    一个菜鸟程序猿的技术技术分享和奔溃日常

    展开全文
  • Prometheus 监控K8S集群中Pod 目前cAdvisor集成到了kubelet组件内,可以在kubernetes集群中每个启动了kubelet的节点使用cAdvisor提供的metrics接口获取该节点所有容器相关的性能指标数据。cAdvisor对外提供服务的...
  • 本文介绍Prometheus 监控及在k8s集群中使用node-exporter、prometheus、grafana对集群进行监控。实现原理类似ELK、EFK组合。node-exporter组件负责收集节点上的metrics监控数据,并将数据推送给prometheus, ...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 1,079
精华内容 431
关键字:

prometheus监控k8s