Kube-state-metrics#

Kube-state-metrics - компонент мониторинга DropApp, который предоставляет метрики состояния кластера, такие как, количество pods, replicaSet, deployment и других ресурсов DropApp. Kube-state-metrics позволяет отслеживать состояние кластера в реальном времени.

Это гарантирует, что функции, предоставляемые kube-state-metrics, имеют тот же уровень стабильности, что и сами объекты API DropApp. Kube-state-metrics в определенных ситуациях могут не показывать те же значения, что и kubectl, поскольку kubectl применяет определенные эвристики для отображения понятных сообщений. Kube-state-metrics предоставляет немодифицированные, необработанные данные из DropApp API.

Метрики экспортируются в конечную точку HTTP /metrics на порту прослушивания (по умолчанию 8080). Они подаются как открытый текст. Они предназначены для использования Prometheus или скрпита-анализатора, который совместим с конечной точкой клиента Prometheus. Необработанные показатели /metrics доступны в браузере. Обратите внимание, что метрики, отображаемые на конечной точке /metrics, отражают текущее состояние кластера DropApp. Когда объекты DropApp удаляются, они больше не видны на конечной точке /metrics.

  1. Привяжите учетную запись службы к роли кластера, которая имеет доступ на чтение к API DropApp:

    apiVersion: rbac.authorization.k8s.io/v1
    kind: ClusterRoleBinding
    metadata:
      labels:
        app.kubernetes.io/component: exporter
        app.kubernetes.io/name: kube-state-metrics
        app.kubernetes.io/version: 2.9.2
      name: kube-state-metrics
    roleRef:
      apiGroup: rbac.authorization.k8s.io
      kind: ClusterRole
      name: kube-state-metrics
    subjects:
    - kind: ServiceAccount
      name: kube-state-metrics
      namespace: kube-system
    
  2. Предоставьте кластеру доступ к чтению всех ресурсов DropApp:

    kube-state-metrics.yaml
    apiVersion: rbac.authorization.k8s.io/v1
    kind: ClusterRole
    metadata:
      labels:
        app.kubernetes.io/component: exporter
        app.kubernetes.io/name: kube-state-metrics
        app.kubernetes.io/version: 2.9.2
      name: kube-state-metrics
    rules:
    - apiGroups:
      - ""
      resources:
      - configmaps
      - secrets
      - nodes
      - pods
      - services
      - serviceaccounts
      - resourcequotas
      - replicationcontrollers
      - limitranges
      - persistentvolumeclaims
      - persistentvolumes
      - namespaces
      - endpoints
      verbs:
      - list
      - watch
    - apiGroups:
      - apps
      resources:
      - statefulsets
      - daemonsets
      - deployments
      - replicasets
      verbs:
      - list
      - watch
    - apiGroups:
      - batch
      resources:
      - cronjobs
      - jobs
      verbs:
      - list
      - watch
    - apiGroups:
      - autoscaling
      resources:
      - horizontalpodautoscalers
      verbs:
      - list
      - watch
    - apiGroups:
      - authentication.k8s.io
      resources:
      - tokenreviews
      verbs:
      - create
    - apiGroups:
      - authorization.k8s.io
      resources:
      - subjectaccessreviews
      verbs:
      - create
    - apiGroups:
      - policy
      resources:
      - poddisruptionbudgets
      verbs:
      - list
      - watch
    - apiGroups:
      - certificates.k8s.io
      resources:
      - certificatesigningrequests
      verbs:
      - list
      - watch
    - apiGroups:
      - discovery.k8s.io
      resources:
      - endpointslices
      verbs:
      - list
      - watch
    - apiGroups:
      - storage.k8s.io
      resources:
      - storageclasses
      - volumeattachments
      verbs:
      - list
      - watch
    - apiGroups:
      - admissionregistration.k8s.io
      resources:
      - mutatingwebhookconfigurations
      - validatingwebhookconfigurations
      verbs:
      - list
      - watch
    - apiGroups:
      - networking.k8s.io
      resources:
      - networkpolicies
      - ingressclasses
      - ingresses
      verbs:
      - list
      - watch
    - apiGroups:
      - coordination.k8s.io
      resources:
      - leases
      verbs:
      - list
      - watch
    - apiGroups:
      - rbac.authorization.k8s.io
      resources:
      - clusterrolebindings
      - clusterroles
      - rolebindings
      - roles
      verbs:
      - list
      - watch
    

    Выше представлено описание ClusterRole в DropApp, которое содержит правила доступа к ресурсам в кластере. ClusterRole определяет, какие действия могут выполняться над ресурсами кластера, такими как конфигурации, секреты, узлы, сервисы, имена пространств и т. д. Каждое правило состоит из API групп, ресурсов и действий, которые разрешены или запрещены. В данном примере ClusterRole называется kube-state-metrics, и она имеет несколько правил доступа к различным ресурсам DropApp, таким как configmaps, secrets, nodes, pods, services, resourcequota, replicationcontrollers, limitranges, persistentvolumeclaims, persistentvolumes, namespaces, endpoints и т. д., с различными действиями, такими как list, watch и т. д.

  3. Создайте сервисный аккаунт:

    apiVersion: v1
    automountServiceAccountToken: false
    kind: ServiceAccount
    metadata:
      labels:
        app.kubernetes.io/component: exporter
        app.kubernetes.io/name: kube-state-metrics
        app.kubernetes.io/version: 2.9.2
      name: kube-state-metrics
      namespace: kube-system
    
  4. Создайте службу clusterIP, которая предоставляет конечную точку /metrics кластеру:

    apiVersion: v1
    kind: Service
    metadata:
      labels:
        app.kubernetes.io/component: exporter
        app.kubernetes.io/name: kube-state-metrics
        app.kubernetes.io/version: 2.9.2
      name: kube-state-metrics
      namespace: kube-system
    spec:
      clusterIP: None
      ports:
      - name: HTTP-metrics
        port: 8080
        targetPort: HTTP-metrics
      - name: telemetry
        port: 8081
        targetPort: telemetry
      selector:
        app.kubernetes.io/name: kube-state-metrics
    
  5. Запустите команду для применения набора манифестов, приведенных в шаге 1 - 4:

    kubectl apply -f file1.yml -f file2.yml -f file3.yml -f file4.yml # названия файлов вписаны для примера
    

    kubectl применит все манифесты в указанных файлах.