• [k8s]metricbeat的kubernetes模块&kube-metric模块


    正确姿势启动metricbeat

    metricbeat.modules:
    - module: system
      metricsets:
        - cpu
        - filesystem
        - memory
        - network
        - process
      enabled: true
      period: 10s
      processes: ['.*']
      cpu_ticks: false
      
    output.elasticsearch:
        hosts: ["http://192.168.x.x:9200"]
    
    setup.template.name: "metricbeat"
    setup.template.fields: "fields.yml"
    setup.template.overwrite: true
    setup.template.settings:
      index.number_of_shards: 1
      index.number_of_replicas: 1
    
    setup.kibana.host: "192.168.x.x:5601"
    setup.dashboards.enabled: true
    
    ./metricbeat -e -c metricbeat.yml -d "publish"
    

    metricbeat的Kubernetes插件

    metricbeat.modules:
    # Node metrics, from kubelet:
    - module: kubernetes
      metricsets:
        - node
        - system
        - pod
        - container
        - volume
      period: 10s
      hosts: ["192.168.x.132:10255","192.168.x.133:10255"]
    
    # State metrics from kube-state-metrics service:  #这部分需要kube-state-metrics支撑(Nodes/deploy个数),因此集群里需要安装kube-state-metrics组件.默认情况下这里没有的话图中上半部分没有数据
    - module: kubernetes
      enabled: false  ## 这里一定要是true
      metricsets:
        - state_node
        - state_deployment
        - state_replicaset
        - state_pod
        - state_container
      period: 10s
      hosts: ["192.168.x.x:8080"]
    
    # Kubernetes events
    - module: kubernetes
      enabled: false
      metricsets:
        - event
        
    output.elasticsearch:
        hosts: ["http://192.168.x.x:9200"]
    

    既然需要kube-state-metrics了,那就研究下吧.

    监控思路

    • vm思路:遵从大道至简的原则

    • 容器监控思路:
      pod的:
      top cpu
      top mem

    • 别人家的监控-只能流口水了

    kube-state-metrics提供监控k8s集群的metric

    kube-state-metrics本质上是提供了k8s集群的metric
    部署参考:
    https://github.com/kubernetes/kube-state-metrics

    克隆代码: create这几个即可

    访问:

    报错解决:
    kubectl -n kube-system logs -f kube-state-metrics-215312065-1vzg2 -c kube-state-metrics
    时候发现一些api错误

    解决: 给apiserver启动添加这个参数: 它github上有说

    --runtime-config=batch/v2alpha1=true
    

    即目前完整的apiserver参数如下

     kube-apiserver     --service-cluster-ip-range=10.254.0.0/16     --etcd-servers=http://127.0.0.1:2379     --insecure-bind-address=0.0.0.0     --admission-control=ServiceAccount     --service-account-key-file=/root/ssl/ca.key --client-ca-file=/root/ssl/ca.crt    --tls-cert-file=/root/ssl/server.crt --tls-private-key-file=/root/ssl/server.key --allow-privileged=true --runtime-config=batch/v2alpha1=true --v=2
    

    k8s插件监控集群效果图

    vm监控效果图

    贴上kube-metric的yaml

    参考: https://github.com/kubernetes/kube-state-metrics

    修改点:

    • deploy的api版本

    • svc为nodeport模式

    • 镜像拉取

    docker pull lanny/gcr.io_google_containers_kube-state-metrics_v1.1.0
    dokcer pull lanny/gcr.io_google_containers_addon-resizer_1.0
    docker tag lanny/gcr.io_google_containers_kube-state-metrics_v1.1.0 gcr.io/google_containers/kube-state-metrics:v1.1.0 
    docker tag lanny/gcr.io_google_containers_addon-resizer_1.0 gcr.io/google_containers/addon-resizer:1.0 
    
    $ cat kube-state-metrics-deployment.yaml 
    apiVersion: apps/v1beta1 # for versions before 1.8.0 use apps/v1beta1  ## 这里默认是v1beat1,我用的是1.7.8,因此apiVersion: apps/v1beta2是不适用的.
    kind: Deployment
    metadata:
      name: kube-state-metrics
      namespace: kube-system
    spec:
      selector:
        matchLabels:
          k8s-app: kube-state-metrics
      replicas: 1
      template:
        metadata:
          labels:
            k8s-app: kube-state-metrics
        spec:
          serviceAccountName: kube-state-metrics
          containers:
          - name: kube-state-metrics
            image: quay.io/coreos/kube-state-metrics:v1.1.0
            ports:
            - name: http-metrics
              containerPort: 8080
            readinessProbe:
              httpGet:
                path: /healthz
                port: 8080
              initialDelaySeconds: 5
              timeoutSeconds: 5
          - name: addon-resizer
            image: gcr.io/google_containers/addon-resizer:1.0
            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
            command:
              - /pod_nanny
              - --container=kube-state-metrics
              - --cpu=100m
              - --extra-cpu=1m
              - --memory=100Mi
              - --extra-memory=2Mi
              - --threshold=5
              - --deployment=kube-state-metrics
    
    $ cat kube-state-metrics-service.yaml 
    apiVersion: v1
    kind: Service
    metadata:
      name: kube-state-metrics
      namespace: kube-system
      labels:
        k8s-app: kube-state-metrics
      annotations:
        prometheus.io/scrape: 'true'
    spec:
      type: NodePort ## 这里需要改下,外界通过nodeport方式访问metric api
      ports:
      - name: http-metrics
        port: 8080
        targetPort: http-metrics
        protocol: TCP
      selector:
        k8s-app: kube-state-metrics
    
    
    $ cat kube-state-metrics-service-account.yaml 
    apiVersion: v1
    kind: ServiceAccount
    metadata:
      name: kube-state-metrics
      namespace: kube-system
    
  • 相关阅读:
    Google和百度、雅虎的站内搜索代码
    Unidac:解决“trying to modify readonly Field”问题!
    如何通过BDE连接一个非1433端口的SQL SERVER
    工作总结
    iOS开发肯定会遇到的
    自定义delegate和系统定义dalegate的区别
    C语言中关于字符串左右循环移位的问题
    iphone 文件保存策略
    iphone学习各种资源
    IOS开发系列之阿堂教程:tableView的下拉涮新功能实践
  • 原文地址:https://www.cnblogs.com/iiiiher/p/7999761.html
Copyright © 2020-2023  润新知