Мониторинг кластера Kubernetes — установка и развертывание оператора Prometheus.
Мониторинг кластера Kubernetes — установка и развертывание оператора Prometheus.

Эксплуатация и обслуживание виртуализацииKubernetesPrometheus

Мониторинг кластера Kubernetes — установка и развертывание оператора Prometheus.

Ван Сяньсен2023-12-252023-12-25

Введение в оператор Прометея

Prometheus Operator:длямонитор Kubernetes ресурсы и Prometheus Управление экземплярами предоставляет простые определения, упрощая Kubernetes Развертывание, управление и запуск Prometheus и Alertmanager кластер.

Prometheus Operator Основные особенности: watch Kubernetes API Сервер переходит к конкретному объекту, как Kubernetes предусмотрено Prometheus Компоненты монитора, связанные с машиной, из программы управления локальной развертыванием, проект разработан для упрощения и автоматизации на основе Prometheus Конфигурация стека мониторинга в основном включает в себя следующие функции:

  • Kubernetes Пользовательские ресурсы: используйте Kubernetes CRD Приходитьразвертыватьиуправлять Prometheus、Alertmanager и Связанные компоненты。
  • упрощатьизразвертывать Конфигурация:пройти напрямую Kubernetes Конфигурация списка ресурсов Prometheus, например версия, постоянство, копирование, политика хранения и другие конфигурации.
  • Prometheus целевая конфигурация монитора: на основе знакомства Kubernetes Запрос тегов автоматически генерирует целевую конфигурацию монитора, нет необходимости учиться Prometheus Специально настроен.

Схема архитектуры оператора Прометея:

На рисунке выше представлена ​​схема архитектуры, официально предоставленная Prometheus-Operator. Каждый компонент работает в кластере Kubernetes по-разному. Оператор является основной частью. В качестве контроллера он создает CRD, такие как Prometheus, ServiceMonitor, AlertManager и PrometheusRule. объекты, а затем продолжайте наблюдать и поддерживать состояние этих объектов ресурсов.

Последняя версия оператора предоставляет следующие объекты ресурсов CRD:

  • Prometheus:Конфигурация Prometheus statefulset и Prometheus из Некоторые конфигурации.
  • ServiceMonitor:раньше проходил Service верно K8S Китайские ресурсы для монитора, рекомендуемый первый выбор ServiceMonitor. Он декларативно определяет Kubernetes service Каким должен быть монитор.
  • PodMonitor:используется дляверно Pod Для монитора рекомендуется первый выбор ServiceMonitor. PodMonitor Декларативно определяет, как набор pod。
  • Probe:Он декларативно Как следует контролировать установленное? ingress или статическая целевая группа. Обычно используется для монитора черного ящика.
  • PrometheusRule:используется дляуправлять Prometheus Правила оповещения определяют набор обязательных Prometheus Оповещения и/или правила регистрации. может быть Prometheus Используется монтирование экземпляра.
  • Alertmanager:Конфигурация AlertManager statefulset и AlertManager из Некоторые конфигурации.
  • AlertmanagerConfig:используется дляуправлять AlertManager Конфигурационный файл указывается декларативно; Alertmanager Конфигурацияизподраздел,Разрешить перенаправление оповещений на настраиваемые получатели,и установить правила запрета.
  • ThanosRuler:управлять ThanosRuler deployment;

Установка Оператора Прометея

чтобы использовать Оператор Прометей, используемый непосредственно здесь kube-prometheus Этот проект для установки, проект и Prometheus-Operator Разница аналогична Linux Ядро и CentOS/Ubuntu Отношения между этими распределениями, что действительно важно, так это Operator осознать, и kube-prometheus просто используй Operator Составил серию часто используемых списков ресурсов для мониторинга. Но нужно обратить внимание Kubernetes Версия и kube-prometheus Совместим с:

kube-prometheus stack

Kubernetes 1.22

Kubernetes 1.23

Kubernetes 1.24

Kubernetes 1.25

Kubernetes 1.26

Kubernetes 1.27

Kubernetes 1.28

release-0.10

x

x

x

release-0.11

x

x

x

release-0.12

x

x

x

release-0.13

x

main

x

x

Моя версия тестового кластера k8s — 1.23.4. Сначала клонируйте код проекта и разверните версию kube-prometheus выпуска 0.11.

Язык кода:javascript
копировать
git clone https://github.com/prometheus-operator/kube-prometheus -b release-0.11
cd kube-prometheus

Сначала создайте потребностьизпространство имени CRD, подождите, пока они станут доступны, прежде чем создавать оставшиеся ресурсы:

Язык кода:javascript
копировать
$ kubectl apply -f manifests/setup
customresourcedefinition.apiextensions.k8s.io/alertmanagerconfigs.monitoring.coreos.com created
customresourcedefinition.apiextensions.k8s.io/alertmanagers.monitoring.coreos.com created
customresourcedefinition.apiextensions.k8s.io/podmonitors.monitoring.coreos.com created
customresourcedefinition.apiextensions.k8s.io/probes.monitoring.coreos.com created
customresourcedefinition.apiextensions.k8s.io/prometheusrules.monitoring.coreos.com created
customresourcedefinition.apiextensions.k8s.io/servicemonitors.monitoring.coreos.com created
customresourcedefinition.apiextensions.k8s.io/thanosrulers.monitoring.coreos.com created
namespace/monitoring created
The CustomResourceDefinition "prometheuses.monitoring.coreos.com" is invalid: metadata.annotations: Too long: must have at most 262144 bytes

Вы можете видеть, что в процессе установки вам будет предложено Too long: must have at most 262144 bytes,Просто нужно kubectl apply Изменить на kubectl create Вот и все:

Язык кода:javascript
копировать
$ kubectl create -f manifests/setup
$ kubectl get crd |grep coreos
alertmanagerconfigs.monitoring.coreos.com              2023-11-14T07:43:53Z
alertmanagers.monitoring.coreos.com                    2023-11-14T07:43:53Z
podmonitors.monitoring.coreos.com                      2023-11-14T07:43:53Z
probes.monitoring.coreos.com                           2023-11-14T07:43:53Z
prometheusagents.monitoring.coreos.com                 2023-11-14T07:44:05Z
prometheuses.monitoring.coreos.com                     2023-11-14T07:44:05Z
prometheusrules.monitoring.coreos.com                  2023-11-14T07:43:53Z
scrapeconfigs.monitoring.coreos.com                    2023-11-14T07:43:53Z
servicemonitors.monitoring.coreos.com                  2023-11-14T07:43:54Z
thanosrulers.monitoring.coreos.com                     2023-11-14T07:43:54Z

Это создаст файл с именем monitoring пространство имен, когда объявление завершено CRD После этого вы можете настроить список ресурсов, но для того, чтобы объявленный пользовательский объект ресурса вступил в силу, вам необходимо установить соответствующий Operator контроллер, в manifests В каталоге ниже содержатся Operator Список ресурсов и различные объявления объектов мониторинга, такие как Prometheus、Alertmanager подождите, подайте заявку напрямую и все:

Язык кода:javascript
копировать
$ kubectl apply -f manifests/

Однако следует отметить, что некоторые изображения ресурсов взяты из k8s.gcr.io,Если его нельзя нормально вытащить,Затем вы можете заменить изображение на вытягиваемое:

  • prometheusAdapter-deployment.yaml:Воля image: k8s.gcr.io/prometheus-adapter/prometheus-adapter:v0.11.1 Заменить на wangxiansen/prometheus-adapter:v0.11.1
  • kubeStateMetrics-deployment.yaml:Воля image: k8s.gcr.io/kube-state-metrics/kube-state-metrics:v2.10.0 Заменить на wangxiansen/kube-state-metrics:v2.10.0

Это автоматически установит prometheus-operator、node-exporter、kube-state-metrics、grafana、prometheus-adapter а также prometheus и alertmanager Подождите, пока появится большое количество компонентов. В случае сбоя вы можете выполнить приведенную выше команду установки несколько раз.

Язык кода:javascript
копировать
kubectl get pods -n monitoring
NAME                                   READY   STATUS    RESTARTS        AGE
alertmanager-main-0                    2/2     Running   0               4d20h
blackbox-exporter-6cd58cb8d8-8vk8c     3/3     Running   24 (6d1h ago)   40d
grafana-8f858b985-976bp                1/1     Running   0               4d21h
kube-state-metrics-666cb85f4c-298nz    3/3     Running   26 (6d1h ago)   40d
node-exporter-hckm7                    2/2     Running   12 (6d1h ago)   40d
node-exporter-jgglz                    2/2     Running   10 (6d1h ago)   40d
node-exporter-s24x9                    2/2     Running   15 (6d1h ago)   40d
prometheus-adapter-6fbbcc44df-6cqsj    1/1     Running   3 (6d1h ago)    37d
prometheus-k8s-0                       2/2     Running   11 (6d1h ago)   40d
prometheus-operator-5ff845f4f6-89dwp   2/2     Running   13 (6d1h ago)   40d
[root@k8s-master1 ~]# kubectl get svc -n monitoring     
NAME                    TYPE        CLUSTER-IP        EXTERNAL-IP   PORT(S)                      AGE
alertmanager-main       ClusterIP   192.168.153.119   <none>        9093/TCP,8080/TCP            40d
alertmanager-operated   ClusterIP   None              <none>        9093/TCP,9094/TCP,9094/UDP   40d
blackbox-exporter       ClusterIP   192.168.119.161   <none>        9115/TCP,19115/TCP           40d
grafana                 ClusterIP   192.168.151.51    <none>        3000/TCP                     40d
kube-state-metrics      ClusterIP   None              <none>        8443/TCP,9443/TCP            40d
node-exporter           ClusterIP   None              <none>        9100/TCP                     40d
prometheus-adapter      ClusterIP   192.168.91.7      <none>        443/TCP                      40d
prometheus-k8s          ClusterIP   192.168.78.153    <none>        9090/TCP,8080/TCP            40d
prometheus-operated     ClusterIP   None              <none>        9090/TCP                     40d
prometheus-operator     ClusterIP   None              <none>        8443/TCP                     40d

Уведомление:Из-за проблем с ресурсами здесь,,Всеиспользовать Количество единичных экземпляров。

Вы можете увидеть вышеизложенное для grafana、alertmanager и prometheus Тип ClusterIP из Служба, конечно, если вы хотите получить доступ к этим двум службам во внешней сети, вы можете создать приложение Ingress объект или использование NodePort Тип из Услуга. О типе NodePort само собой разумеется. Создайте его сейчас, используя Ingress.

Язык кода:javascript
копировать
apiVersion: traefik.containo.us/v1alpha1
kind: IngressRoute
metadata:
  name: prometheus-web
  namespace: monitoring
spec:
  entryPoints:
    - web
  routes:
    - match: Host(`prometheus.od.com`)  # Укажите доменное имя
      kind: Rule
      services:
        - name: prometheus-k8s
          port: 9090
---
apiVersion: traefik.containo.us/v1alpha1
kind: IngressRoute
metadata:
  name: alertmanager-web
  namespace: monitoring
spec:
  entryPoints:
    - web
  routes:
    - match: Host(`alertmanager.od.com`)  # Укажите доменное имя
      kind: Rule
      services:
        - name: alertmanager-main
          port: 9093
---
apiVersion: traefik.containo.us/v1alpha1
kind: IngressRoute
metadata:
  name: grafana-web
  namespace: monitoring
spec:
  entryPoints:
  - web
  routes:
  - match: Host(`grafana.od.com`)  # Укажите доменное имя
    kind: Rule
    services:
    - name: grafana
      port: 3000

После создания откройте его через браузер http://grafana.od.comhttp://alertmanager.od.comhttp://prometheus.od.com

Имя пользователя и пароль Grafana по умолчанию — admin/admin.

Проверять prometheus со страницы обнаружения сервисов

Сохранение данных

prometheus

prometheus Файл изданных по умолчанию использует emptydir Метод настойчивости, Мы изменились на локальное хранилище

Язык кода:javascript
копировать
kind: StorageClass
apiVersion: storage.k8s.io/v1
metadata:
  name: local-storage
provisioner: kubernetes.io/no-provisioner
volumeBindingMode: WaitForFirstConsumer
---
apiVersion: v1
kind: PersistentVolume
metadata:
  name: prometheus-local
  labels:
    app: prometheus
    app.kubernetes.io/name: prometheus
spec:
  accessModes:
    - ReadWriteOnce
  capacity:
    storage: 20Gi
  storageClassName: local-storage
  local:
    path: /data/k8s/prometheus
  nodeAffinity:
    required:
      nodeSelectorTerms:
        - matchExpressions:
            - key: kubernetes.io/hostname
              operator: In
              values:
                - k8s-master1
  persistentVolumeReclaimPolicy: Retain

а затем изменить manifests/prometheus-prometheus.yaml在文件最后新增Конфигурация

Язык кода:javascript
копировать
retention: 10d                # данные монитора сохраняются для 10 небо
storage:                      # конфигурация хранилища, использовать local-storage из storageClass
  volumeClaimTemplate:
    spec:
      storageClassName: local-storage
      selector:
        matchLabels:
          app: prometheus
      resources:
        requests:
          storage: 5Gi

grafana

grafana Просто обычный человек deployment приложение,Изменить напрямую yaml серединаиз volume Просто настройте

Язык кода:javascript
копировать
    spec:
      nodeName: k8s-node2                            # Исправлено изk8s-node2 на узле.
      initContainers:                                # Создайте контейнер инициализации и измените разрешения каталога монтирования хоста. Вы также можете установить runAsUser=0 через SecurityContext, чтобы указать работающего пользователя как root, чтобы избежать недостаточных разрешений.
        - name: fix-permissions 
          image: busybox:latest
          securityContext:
            privileged: true
            runAsGroup: 0
            runAsNonRoot: false
            runAsUser: 0
          command:
          - sh
          - -c
          - >-
            id;
            ls -la /var/lib/grafana;
            chown -R 65534:65534 /var/lib/grafana
          volumeMounts:
          - mountPath: /var/lib/grafana
            name: grafana-storage
......
      volumes:
      - name: grafana-storage
        hostPath:
          path: /data/nfs-volume/grafana
boy illustration
Учебное пособие по Jetpack Compose для начинающих, базовые элементы управления и макет
boy illustration
Код js веб-страницы, фон частицы, код спецэффектов
boy illustration
【новый! Суперподробное】Полное руководство по свойствам компонентов Figma.
boy illustration
🎉Обязательно к прочтению новичкам: полное руководство по написанию мини-программ WeChat с использованием программного обеспечения Cursor.
boy illustration
[Забавный проект Docker] VoceChat — еще одно приложение для мгновенного чата (IM)! Может быть встроен в любую веб-страницу!
boy illustration
Как реализовать переход по странице в HTML (html переходит на указанную страницу)
boy illustration
Как решить проблему зависания и низкой скорости при установке зависимостей с помощью npm. Существуют ли доступные источники npm, которые могут решить эту проблему?
boy illustration
Серия From Zero to Fun: Uni-App WeChat Payment Practice WeChat авторизует вход в систему и украшает страницу заказа, создает интерфейс заказа и инициирует запрос заказа
boy illustration
Серия uni-app: uni.navigateЧтобы передать скачок значения
boy illustration
Апплет WeChat настраивает верхнюю панель навигации и адаптируется к различным моделям.
boy illustration
JS-время конвертации
boy illustration
Обеспечьте бесперебойную работу ChromeDriver 125: советы по решению проблемы chromedriver.exe не найдены
boy illustration
Поле комментария, щелчок мышью, специальные эффекты, js-код
boy illustration
Объект массива перемещения объекта JS
boy illustration
Как открыть разрешение на позиционирование апплета WeChat_Как использовать WeChat для определения местонахождения друзей
boy illustration
Я даю вам два набора из 18 простых в использовании фонов холста Power BI, так что вам больше не придется возиться с цветами!
boy illustration
Получить текущее время в js_Как динамически отображать дату и время в js
boy illustration
Вам необходимо изучить сочетания клавиш vsCode для форматирования и организации кода, чтобы вам больше не приходилось настраивать формат вручную.
boy illustration
У ChatGPT большое обновление. Всего за 45 минут пресс-конференция показывает, что OpenAI сделал еще один шаг вперед.
boy illustration
Copilot облачной разработки — упрощение разработки
boy illustration
Микросборка xChatGPT с низким кодом, создание апплета чат-бота с искусственным интеллектом за пять шагов
boy illustration
CUDA Out of Memory: идеальное решение проблемы нехватки памяти CUDA
boy illustration
Анализ кластеризации отдельных ячеек, который должен освоить каждый&MarkerгенетическийВизуализация
boy illustration
vLLM: мощный инструмент для ускорения вывода ИИ
boy illustration
CodeGeeX: мощный инструмент генерации кода искусственного интеллекта, который можно использовать бесплатно в дополнение к второму пилоту.
boy illustration
Машинное обучение Реальный бой LightGBM + настройка параметров случайного поиска: точность 96,67%
boy illustration
Бесшовная интеграция, мгновенный интеллект [1]: платформа больших моделей Dify-LLM, интеграция без кодирования и встраивание в сторонние системы, более 42 тысяч звезд, чтобы стать свидетелями эксклюзивных интеллектуальных решений.
boy illustration
LM Studio для создания локальных больших моделей
boy illustration
Как определить количество слоев и нейронов скрытых слоев нейронной сети?
boy illustration
[Отслеживание целей] Подробное объяснение ByteTrack и детали кода