Prometheus 监控K8S 资源状态对象

  • 官方文档:https://github.com/kubernetes/kube-state-metrics

kube-state-metrics是一个简单的服务,它监听Kubernetes API服务器并生成有关对象状态的指标。它不关注单个Kubernetes组件的运行状况,而是关注内部各种对象的运行状况,例如部署,节点和容器。

采集了k8s中各种资源对象的状态信息:

kube-state-metrics
kube_daemonset_*
kube_deployment_*
kube_job_*
kube_namespace_*
kube_node_*
kube_persistentvolumeclaim_*
kube_pod_container_*
kube_pod_*
kube_replicaset_*
kube_service_*
kube_statefulset_*

配置文件

下列是已经修改好的配置文件

  • # 主程序
  • kube-state-metrics-deployment.yaml
  • apiVersion: apps/v1
    kind: Deployment
    metadata:
    name: kube-state-metrics
    namespace: kube-system
    labels:
    k8s-app: kube-state-metrics
    kubernetes.io/cluster-service: "true"
    addonmanager.kubernetes.io/mode: Reconcile
    version: v1.3.0
    spec:
    selector:
    matchLabels:
    k8s-app: kube-state-metrics
    version: v1.3.0
    replicas: 1
    template:
    metadata:
    labels:
    k8s-app: kube-state-metrics
    version: v1.3.0
    annotations:
    scheduler.alpha.kubernetes.io/critical-pod: ''
    spec:
    priorityClassName: system-cluster-critical
    serviceAccountName: kube-state-metrics
    containers:
    - name: kube-state-metrics
    # 修改为镜像地址
    image: lizhenliang/kube-state-metrics:v1.3.0
    ports:
    - name: http-metrics
    containerPort: 8080
    - name: telemetry
    containerPort: 8081
    readinessProbe:
    httpGet:
    path: /healthz
    port: 8080
    initialDelaySeconds: 5
    timeoutSeconds: 5
    - name: addon-resizer
    # 修改为镜像地址
    image: lizhenliang/addon-resizer:1.8.3
    resources:
    limits:
    cpu: 100m
    memory: 30Mi
    requests:
    cpu: 100m
    memory: 30Mi
    env:
    - name: MY_POD_NAME
    valueFrom:
    fieldRef:
    fieldPath: metadata.name
    - name: MY_POD_NAMESPACE
    valueFrom:
    fieldRef:
    fieldPath: metadata.namespace
    volumeMounts:
    - name: config-volume
    mountPath: /etc/config
    command:
    - /pod_nanny
    - --config-dir=/etc/config
    - --container=kube-state-metrics
    - --cpu=100m
    - --extra-cpu=1m
    - --memory=100Mi
    - --extra-memory=2Mi
    - --threshold=5
    - --deployment=kube-state-metrics
    volumes:
    - name: config-volume
    configMap:
    name: kube-state-metrics-config
    ---
    # Config map for resource configuration.
    apiVersion: v1
    kind: ConfigMap
    metadata:
    name: kube-state-metrics-config
    namespace: kube-system
    labels:
    k8s-app: kube-state-metrics
    kubernetes.io/cluster-service: "true"
    addonmanager.kubernetes.io/mode: Reconcile
    data:
    NannyConfiguration: |-
    apiVersion: nannyconfig/v1alpha1
    kind: NannyConfiguration

    配置文件

  • # APIServer授权
  • kube-state-metrics-rbac.yaml
  • apiVersion: v1
    kind: ServiceAccount
    metadata:
    name: kube-state-metrics
    namespace: kube-system
    labels:
    kubernetes.io/cluster-service: "true"
    addonmanager.kubernetes.io/mode: Reconcile
    ---
    apiVersion: rbac.authorization.k8s.io/v1
    kind: ClusterRole
    metadata:
    name: kube-state-metrics
    labels:
    kubernetes.io/cluster-service: "true"
    addonmanager.kubernetes.io/mode: Reconcile
    rules:
    - apiGroups: [""]
    resources:
    - configmaps
    - secrets
    - nodes
    - pods
    - services
    - resourcequotas
    - replicationcontrollers
    - limitranges
    - persistentvolumeclaims
    - persistentvolumes
    - namespaces
    - endpoints
    verbs: ["list", "watch"]
    - apiGroups: ["extensions"]
    resources:
    - daemonsets
    - deployments
    - replicasets
    verbs: ["list", "watch"]
    - apiGroups: ["apps"]
    resources:
    - statefulsets
    verbs: ["list", "watch"]
    - apiGroups: ["batch"]
    resources:
    - cronjobs
    - jobs
    verbs: ["list", "watch"]
    - apiGroups: ["autoscaling"]
    resources:
    - horizontalpodautoscalers
    verbs: ["list", "watch"]
    ---
    apiVersion: rbac.authorization.k8s.io/v1
    kind: Role
    metadata:
    name: kube-state-metrics-resizer
    namespace: kube-system
    labels:
    kubernetes.io/cluster-service: "true"
    addonmanager.kubernetes.io/mode: Reconcile
    rules:
    - apiGroups: [""]
    resources:
    - pods
    verbs: ["get"]
    - apiGroups: ["extensions"]
    resources:
    - deployments
    resourceNames: ["kube-state-metrics"]
    verbs: ["get", "update"]
    ---
    apiVersion: rbac.authorization.k8s.io/v1
    kind: ClusterRoleBinding
    metadata:
    name: kube-state-metrics
    labels:
    kubernetes.io/cluster-service: "true"
    addonmanager.kubernetes.io/mode: Reconcile
    roleRef:
    apiGroup: rbac.authorization.k8s.io
    kind: ClusterRole
    name: kube-state-metrics
    subjects:
    - kind: ServiceAccount
    name: kube-state-metrics
    namespace: kube-system
    ---
    apiVersion: rbac.authorization.k8s.io/v1
    kind: RoleBinding
    metadata:
    name: kube-state-metrics
    namespace: kube-system
    labels:
    kubernetes.io/cluster-service: "true"
    addonmanager.kubernetes.io/mode: Reconcile
    roleRef:
    apiGroup: rbac.authorization.k8s.io
    kind: Role
    name: kube-state-metrics-resizer
    subjects:
    - kind: ServiceAccount
    name: kube-state-metrics
    namespace: kube-system

    配置文件

  • # 暴露端口
  • kube-state-metrics-service.yaml
  • apiVersion: v1
    kind: Service
    metadata:
    name: kube-state-metrics
    namespace: kube-system
    labels:
    kubernetes.io/cluster-service: "true"
    addonmanager.kubernetes.io/mode: Reconcile
    kubernetes.io/name: "kube-state-metrics"
    annotations:
    prometheus.io/scrape: 'true'
    spec:
    ports:
    - name: http-metrics
    port: 8080
    targetPort: http-metrics
    protocol: TCP
    - name: telemetry
    port: 8081
    targetPort: telemetry
    protocol: TCP
    selector:
    k8s-app: kube-state-metrics

    配置文件

部署

1、创建容器

kubectl apply -f kube-state-metrics-rbac.yaml
kubectl apply -f kube-state-metrics-deployment.yaml
kubectl apply -f kube-state-metrics-service.yaml

2、查看创建pod

kubectl get pods -n kube-system

NAME                                 READY   STATUS    RESTARTS   AGE
coredns-64479cf49b-lsqqn 1/1 Running 0 5h26m
kube-state-metrics-6459c9f7f-wbwwt 2/2 Running 0 58s
prometheus-0 2/2 Running 0 4h12m

3、测试访问

4、Grafana可视化导入模板:6417

5、查看监控(其他资源可根据主机情况进行微调)

Prometheus 监控K8S 资源状态对象的更多相关文章

  1. Prometheus 监控K8S集群资源监控

    Prometheus 监控K8S集群中Pod 目前cAdvisor集成到了kubelet组件内,可以在kubernetes集群中每个启动了kubelet的节点使用cAdvisor提供的metrics接 ...

  2. 第15章: Prometheus监控Kubernetes资源与应用

    Prometheus监控Kubernetes资源与应用 目录 1 监控方案 2 2 监控指标 4 3 实现思路 4 4 在K8S中部署Prometheus 4 5 在K8S中部署Grafana与可视化 ...

  3. 基于prometheus监控k8s集群

    本文建立在你已经会安装prometheus服务的基础之上,如果你还不会安装,请参考:prometheus多维度监控容器 如果你还没有安装库k8s集群,情参考: 从零开始搭建基于calico的kuben ...

  4. Prometheus监控k8s集合

    Prometheus监控k8s Prometheus监控k8s(1)-Prometheus简介 Prometheus监控k8s(2)-手动部署Prometheus Prometheus监控k8s(3) ...

  5. 如何用prometheus监控k8s集群中业务pod的metrics

    一般,我们从网上看到的帖子和资料, 都是用prometheus监控k8s的各项资源, 如api server, namespace, pod, node等. 那如果是自己的业务pod上的自定义metr ...

  6. Prometheus 监控K8S Node监控

    Prometheus 监控K8S Node监控 Prometheus社区提供的NodeExporter项目可以对主机的关键度量指标进行监控,通过Kubernetes的DeamonSet可以在各个主机节 ...

  7. Prometheus监控k8s企业级应用

    Prometheus架构图 常见的镜像 pod 备注 kube-state-metric 用来收集K8S基本状态信息的监控代理 node-exporter 专门用来收集K8S运算节点基础信息,需要部署 ...

  8. Kubernetes之利用prometheus监控K8S集群

    prometheus它是一个主动拉取的数据库,在K8S中应该展示图形的grafana数据实例化要保存下来,使用分布式文件系统加动态PV,但是在本测试环境中使用本地磁盘,安装采集数据的agent使用Da ...

  9. k8s中prometheus监控k8s外mysql

    k8s外安装mysql https://www.cnblogs.com/uncleyong/p/10739530.html 配置MySQL Exporter采集MySQL监控数据 创建yaml文件:v ...

随机推荐

  1. wpf dual monitor

    <Window x:Class="DualMonitors.Views.WinLeft" xmlns="http://schemas.microsoft.com/w ...

  2. go-变量

    变量使用注意事项 变量三种声明方式 var i int //使用默认值 var num = 10.2 //类型推导 num := "tom" //左侧不能同名 //多变量声明 nu ...

  3. python基础(32):进程(二)

    1. multiprocess模块 仔细说来,multiprocess不是一个模块而是python中一个操作.管理进程的包. 之所以叫multi是取自multiple的多功能的意思,在这个包中几乎包含 ...

  4. 深入浅出js实现继承的7种方式

    给大家介绍7中js继承的方法 有些人认为JavaScript并不是真正的面向对象语言,在经典的面向对象语言中,您可能倾向于定义类对象,然后您可以简单地定义哪些类继承哪些类(参考C++ inherita ...

  5. Kali 无线网络

    WiFi——必备的一个东西: AP:这是无线用户接入到互联网的设备 ESSID:可以用于无限局域网中的多个AP中 BSSID:每个AP的唯一标识符 SSID:网络名称 Channels Wi-Fi可以 ...

  6. iOS中的GCD线程

    一.什么是GCD      全称是Grand Central Dispatch ,纯C语言编写,提供非常多强大的函数,是目前苹果官网推荐的多线程开发方法,NSOperation 便是基于GCD的封装 ...

  7. RunLoop的知识小记

    RunLoop字面上的意思是,运行循环: 其基本作用:保持程序的持续运行: 处理App中的各种事件(比如:触摸事件.定时器事件.Selector事件) 节省CPU资源,提高程序性能:该做事时做事,该休 ...

  8. Mysql添加用户与授权

    1.本地环境 CentOS Linux release 7.5.1804 (Core) mysql Ver 14.14 Distrib 5.7.22, for Linux (x86_64) using ...

  9. spark streaming checkpointing windows

    spark streaming的相关概念: spark的核心是创建一个RDD对象,然后对RDD对象进行计算操作等 streaming可以理解为是 一个连续不断的数据流 ,然后将每个固定时间段里的数据构 ...

  10. C++ 回调函数 Callback 机制例程

    #include <iostream> #include <thread> #include <mutex> #include <Windows.h> ...