• Kubernetes云原生监控之kubestatemetrics集群资源监控


    01、概述

    Kubernetes 云原生集群监控主要涉及到如下三类指标:node 物理节点指标、pod & container 容器资源指标和Kubernetes 云原生集群资源指标。针对这三类指标都有比较成熟的方案,见下图

    上节我们梳理了cAdvisor容器性能指标如何监控,这一节我们就来分析下云原生集群资源监控。

    Kubernetes集群在运行过程中,我们想了解服务运行状态,这时就需要kube-state-metrics,它主要关注deployment、service 、 pod等集群资源对象的状态。

    Kube State Metrics 是一个简单的服务,该服务通过监听 Kubernetes API 服务器来生成不同资源的状态的 Metrics 数据。

    cAdvisor 已经被 Kubernetes 默认集成

    Kube State Metrics 并没有被默认集成,所以我们要想监控集群完整数据,就需要在 Kubernetes 中单独部署 Kube State Metrics 组件,这样才能够将集群中的服务资源指标数据暴露出来,以便于对不同资源进行监控。

    02、环境信息

    03、kube-state-metrics部署

    001、kube-state-metrics版本选择

    选择与Kubernetes版本兼容的kube-state-metrics版本

     

    002、kube-state-metrics下载

    kubectl version
    
    Client Version: version.Info{Major:"1", Minor:"20", GitVersion:"v1.20.6", GitCommit:"8a62859e515889f07e3e3be6a1080413f17cf2c3", GitTreeState:"clean", BuildDate:"2021-04-15T03:28:42Z", GoVersion:"go1.15.10", Compiler:"gc", Platform:"linux/amd64"}
    Server Version: version.Info{Major:"1", Minor:"20", GitVersion:"v1.20.6", GitCommit:"8a62859e515889f07e3e3be6a1080413f17cf2c3", GitTreeState:"clean", BuildDate:"2021-04-15T03:19:55Z", GoVersion:"go1.15.10", Compiler:"gc", Platform:"linux/amd64"}
    k8s版本是v1.19.5,所以这里选择kube-state-metrics版本v2.1.1

    打开下面这个链接选择对应的版本

    https://github.com/kubernetes/kube-state-metrics/tags

    在k8s  master 上执行下面的命令下载对应的版本

    wget -c https://github.com/kubernetes/kube-state-metrics/archive/refs/tags/
    tar xf v2.1.1.tar.gz
    mv kube-state-metrics-2.1.1/examples/standard kube-state-metrics
    cd kube-state-metrics

    [root@k8s-master01 kube-state-metrics]# ll

    total 20
    -rw-rw-r-- 1 root root  376 2021/07/29 23:28:19 cluster-role-binding.yaml
    -rw-rw-r-- 1 root root 1623 2021/07/29 23:28:19 cluster-role.yaml
    -rw-rw-r-- 1 root root 1134 2021/07/29 23:28:19 deployment.yaml
    -rw-rw-r-- 1 root root  192 2021/07/29 23:28:19 service-account.yaml
    -rw-rw-r-- 1 root root  405 2021/07/29 23:28:19 service.yaml

    由于 Kube State Metrics 组件需要通过与 kube-apiserver 连接,并调用相应的接口去获取 kubernetes 集群数据,这个过程需要 Kube State Metrics 组件拥有一定的权限才能成功执行这些操作。在 Kubernetes 中默认使用 RBAC 方式管理权限。所以,我们需要创建相应的 RBAC 资源来提供该组件使用。

    deployment.yaml文件注意如下暴露的两个端口作用、标红的是唯一修改的地方(因为国外的镜像拉不到所以先把镜像同步到了本地的uhub上面,然后从本地的uhub拉取)

    cat deployment.yaml 
    apiVersion: apps/v1
    kind: Deployment
    metadata:
      labels:
        app.kubernetes.io/name: kube-state-metrics
        app.kubernetes.io/version: 2.1.1
      name: kube-state-metrics
      namespace: kube-system
    spec:
      replicas: 1
      selector:
        matchLabels:
          app.kubernetes.io/name: kube-state-metrics
      template:
        metadata:
          labels:
            app.kubernetes.io/name: kube-state-metrics
            app.kubernetes.io/version: 2.1.1
        spec:
          imagePullSecrets:
          - name: myuhubkey.monitoring.syj
          containers:
          #- image: k8s.gcr.io/kube-state-metrics/kube-state-metrics:v2.1.1
          - image: myuhub.cn/k8s_monitoring/kube-state-metrics:v2.1.1
            livenessProbe:
              httpGet:
                path: /healthz
                port: 8080
              initialDelaySeconds: 5
              timeoutSeconds: 5
            name: kube-state-metrics
            ports:
            - containerPort: 8080  ##用于公开kubernetes的指标数据的端口
              name: http-metrics
            - containerPort: 8081 ##用于公开自身kube-state-metrics的指标数据的端口
              name: telemetry
            readinessProbe:
              httpGet:
                path: /
                port: 8081
              initialDelaySeconds: 5
              timeoutSeconds: 5
            securityContext:
              runAsUser: 65534
          nodeSelector:
            kubernetes.io/os: linux
          serviceAccountName: kube-state-metrics

    003、创建

    kubectl  apply -f  ./
    clusterrolebinding.rbac.authorization.k8s.io/kube-state-metrics created
    clusterrole.rbac.authorization.k8s.io/kube-state-metrics created
    deployment.apps/kube-state-metrics created
    serviceaccount/kube-state-metrics created
    service/kube-state-metrics created

    004、查看是否运行成功

    kubectl get pod -n kube-system -owide |grep kube-state-metrics 
     kube-state-metrics-5f84848c58-v7v9z        1/1     Running   0          50m    10.100.166.135   node1    <none>           <none>
    
    kubectl get svc
    -n kube-system |grep kube-state-metrics kube-state-metrics ClusterIP None <none> 8080/TCP,8081/TCP 50m

    # 验证指标是否采集成功 请求kube-state-metricspod ip+8080端口
    curl 10.100.166.135:8080/metrics

    005、Prometheus 接入

    kube-state-metrics创建的svc是ClusterIP类型,默认只能被集群内部访问。

    如果 prometheus部署在外部就需要配置认证。

    cat prometheus.yml
    
      - job_name: "kube-state-metrics"
        scheme: http
        kubernetes_sd_configs:
        - api_server: https://k8sapi的ip:6443/
          role: endpoints
          ## 指定kube-state-metrics组件所在的Namespace名称
          namespaces:
            names: ["kube-system"]
            ## names: ["monitoring"]
          bearer_token_file: /data/k8s_token #访问k8s集群的认证文件
          tls_config:
            insecure_skip_verify: true
        tls_config:
          insecure_skip_verify: true
        bearer_token_file: /data/k8s_token
        relabel_configs:
        ## 指定从 app.kubernetes.io/name 标签等于 kube-state-metrics 的 service 服务获取指标信息
        - action: keep
          source_labels: [__meta_kubernetes_service_label_app_kubernetes_io_name]
          regex: kube-state-metrics
        ## 下面配置也是为了适配 Grafana Dashboard 模板(编号13105图表)
        - 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_service_name
  • 相关阅读:
    逻辑即理性
    关于股市与经济的一点思考
    Objective-C Automatic Reference Counting (ARC)
    错误与异常
    Programming with Objective-C -- 属性的缺省实现
    视频容器格式与编码格式简介
    视频基础知识-封装格式和编码格式
    各种音视频编解码学习详解
    你的技术护城河是什么?--技术前沿代表了一个人的眼力和价值
    技术前沿--很多技术不了解细节也应该了解大概---知道能用来干什么--了解技术的价值
  • 原文地址:https://www.cnblogs.com/suyj/p/16053993.html
Copyright © 2020-2023  润新知