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.
Привяжите учетную запись службы к роли кластера, которая имеет доступ на чтение к 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Предоставьте кластеру доступ к чтению всех ресурсов 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 и т. д.
Создайте сервисный аккаунт:
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Создайте службу
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Запустите команду для применения набора манифестов, приведенных в шаге 1 - 4:
kubectl apply -f file1.yml -f file2.yml -f file3.yml -f file4.yml # названия файлов вписаны для примераkubectl применит все манифесты в указанных файлах.