Эксплуатация и обслуживание виртуализацииKubernetesPrometheus
Ван Сяньсен2023-12-252023-12-25
Prometheus Operator:длямонитор Kubernetes ресурсы и Prometheus Управление экземплярами предоставляет простые определения, упрощая Kubernetes Развертывание, управление и запуск Prometheus и Alertmanager кластер.
Prometheus Operator
Основные особенности: watch
Kubernetes API Сервер переходит к конкретному объекту, как Kubernetes предусмотрено Prometheus Компоненты монитора, связанные с машиной, из программы управления локальной развертыванием, проект разработан для упрощения и автоматизации на основе 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.
git clone https://github.com/prometheus-operator/kube-prometheus -b release-0.11
cd kube-prometheus
Сначала создайте потребностьизпространство имени CRD, подождите, пока они станут доступны, прежде чем создавать оставшиеся ресурсы:
$ 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
Вот и все:
$ 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 подождите, подайте заявку напрямую и все:
$ 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 Подождите, пока появится большое количество компонентов. В случае сбоя вы можете выполнить приведенную выше команду установки несколько раз.
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.
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.com 、http://alertmanager.od.com 、http://prometheus.od.com
Имя пользователя и пароль Grafana по умолчанию — admin/admin.
Проверять prometheus со страницы обнаружения сервисов
prometheus Файл изданных по умолчанию использует emptydir Метод настойчивости, Мы изменились на локальное хранилище
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
在文件最后新增Конфигурация
retention: 10d # данные монитора сохраняются для 10 небо
storage: # конфигурация хранилища, использовать local-storage из storageClass
volumeClaimTemplate:
spec:
storageClassName: local-storage
selector:
matchLabels:
app: prometheus
resources:
requests:
storage: 5Gi
grafana Просто обычный человек deployment приложение,Изменить напрямую yaml серединаиз volume Просто настройте
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