From 010d85a0ceb935c94700c02b256fd7e6260dbfb5 Mon Sep 17 00:00:00 2001 From: erjemin Date: Fri, 23 May 2025 20:33:56 +0300 Subject: [PATCH] =?UTF-8?q?add:=20=D0=9F=D0=BE=D0=B4=20=D1=81=20SmokePing?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- README.md | 1 + kubernetes/k3s_smokeping.md | 208 ++++++++++++++++++++++++++++++++++++ 2 files changed, 209 insertions(+) create mode 100644 kubernetes/k3s_smokeping.md diff --git a/README.md b/README.md index a20c104..d791eaf 100644 --- a/README.md +++ b/README.md @@ -18,6 +18,7 @@ * [Перенос контейнера Docker в k3s](kubernetes/k3s-migrating-container-from-docker-to-kubernetes.md) (на примере Gitea) * [Резервное копирование k3s](kubernetes/k3s-backup.md) * [Настройка доступа к панелям управления](kubernetes/k3s-setting-up-web-access-to-dashboard.md) Longhorn и Traefik +* [Под с SmokePing](kubernetes/k3s_smokeping.md) ## Python * [Устранение проблем при установке Python-коннектора mysqlclient (MySQL/MariaDB)](python/python-mysql.md) diff --git a/kubernetes/k3s_smokeping.md b/kubernetes/k3s_smokeping.md new file mode 100644 index 0000000..0cd4e12 --- /dev/null +++ b/kubernetes/k3s_smokeping.md @@ -0,0 +1,208 @@ +# Контейнер со smokeping в k3s + +Полная жопа с домашним интеренетом? А поддержка провайдера, типа МГТС или Ростелеком, отвечает: "Проблем на линии нет, +у нас все работает"? А может быть, вы хотите следить за доступностью и сетевыми задержками в доступности своих серверов +в разных локациях, или в домашней сети?.. Smokeping -- это то, что вам нужно! Не такой громоздкий, как Zabbix, +и не такой сложный в настройке, как Grafana (хотя к Grafana его тоже можно подключить), и главное супер-компактный +и легкий. + +И так, все манифесты в одном файле. Только поменяйте в манифесте `smokeping-config` меню, название и IP-адреса +на свои, и укажите на какое доменное имя публикуете веб-панель (у меня -- http://sp.local). Ну и читайте пояснения +и комментарии внутри манифестов: +```yaml +# ~/k3s/smokeping/smokeping.yaml +# Все манифесты для smokeping + +# Манифест создания пространства имён `smokeping`. Если оно уже есть — kubectl apply ничего не изменит (т.е. безопасно.) +apiVersion: v1 +kind: Namespace +metadata: + name: smokeping + +--- +# Манифест ConfigMap с конфигурацией Targets для smokeping +apiVersion: v1 +kind: ConfigMap +metadata: + name: smokeping-config + namespace: smokeping +data: + # Это содержимое файла Targets. Здесь указываем, кого пинговать. + Targets: | + *** Targets *** + + probe = FPing + + menu = Top + title = Network Latency Grapher + remark = Привет тебе, путник. SmokePing website of Campany.\ + Тут ты узнаешь все о задержках в вашей сети. + + + HOME + menu = HOME + title = HOME + + ++ Router + menu = Router + title = Router + alerts = someloss + host = 192.168.1.1 + + ++ NAS + menu = NAS + title = NAS + alerts = someloss + host = 192.168.1.xxx + + ++ K3S_VIP + menu = K3S_VIP + title = K3S_VIP + alerts = someloss + host = 192.168.1.xxx + + ++ YANDEX_ALISA + menu = YANDEX_ALISA + title = YANDEX_ALISA + alerts = someloss + host = 192.168.1.xxx + + + + INTERNET + menu = INTERNET + title = INTERNET + + ++ HOSTING_RU + menu = Russia + title = MasterHost_ru + alerts = someloss + host = xxx.xxx.xxx.xxx + + ++ HOSTING_EU + menu = Sweden + title = xxxxxxx + alerts = someloss + host = xxx.xxx.xxx.xxx + + ++ HOSTING_AS + menu = Tureky + title = xxxxxxx + alerts = someloss + host = xxx.xxx.xxx.xxx + + +--- +# Манифест PVC (Longhorn) -- том для хранения данных графиков, чтоб при перезапуске пода данные не пропадали +apiVersion: v1 +kind: PersistentVolumeClaim +metadata: + name: smokeping-data # Имя PVC-хранилища + namespace: smokeping # Пространство имен `smokeping` +spec: + accessModes: + - ReadWriteOnce + storageClassName: longhorn # Используем Longhorn как класс хранения + resources: + requests: + storage: 256Mi # Хватит на мониторинг 20-30 узлов глубиной 1.5-2 года (!) + + +--- +# Манифест для развертывания smokeping (Deployment) +apiVersion: apps/v1 +kind: Deployment +metadata: + name: smokeping + namespace: smokeping +spec: + replicas: 1 + selector: + matchLabels: + app: smokeping + template: + metadata: + labels: + app: smokeping + spec: + containers: + - name: smokeping + # image: ghcr.io/linuxserver-arm64v8/smokeping # dля arm64v8 + image: linuxserver/smokeping # оригинальный образ smokeping, и он заработал на amd64 + env: + - name: TZ # Указываем временную зону + value: Europe/Moscow # ...чтобы на графиках не было UTC + ports: + - containerPort: 80 + volumeMounts: # Монтируем файл Targets из ConfigMap в нужное место в контейнере + - name: config + mountPath: /config/Targets # mountPath указывает, куда будет "вставлен" файл + subPath: Targets # subPath = берём только один файл из configMap + - name: data + mountPath: /data # Данные графиков в Longhorn (PVC) + volumes: + - name: config # Используем том ConfigMap с конфигурацией + configMap: + name: smokeping-config + - name: data # Используем PVC (Longhorn) для хранения данных + persistentVolumeClaim: + claimName: smokeping-data + + +--- +# Service — внутренний сервис для доступа к smokeping по сети внутри кластера +apiVersion: v1 +kind: Service +metadata: + name: smokeping + namespace: smokeping +spec: + selector: + app: smokeping + ports: + - protocol: TCP + port: 80 # порт внутри кластера + targetPort: 80 # порт, на котором работает контейнер + type: ClusterIP # только для доступа внутри кластера (Ingress подключится к нему) + + +--- +# IngressRoute для Traefik (под твою конфигурацию) +# Это публикует smokeping по адресу http://sp.local (заменить на свой домен) +apiVersion: traefik.io/v1alpha1 +kind: IngressRoute +metadata: + name: smokeping + namespace: smokeping +spec: + entryPoints: + - web # это должен быть один из entrypoints в Traefik (обычно "web" = порт 80) + routes: + - match: Host(`sp.local`) # доменное имя, по которому будет доступен сервис + kind: Rule + services: + - name: smokeping + port: 80 + +--- +######## Это я пытался сделать редирект на favicon, но не заработало. У самого smokeping нет favicon, и это бесило. +# Манифест Middleware для перенаправление всех запросов к /favicon.ico на другой URL (к сожалению у smokeping нет favicon.ico). +#apiVersion: traefik.io/v1alpha1 +#kind: Middleware +#metadata: +# name: favicon-redirect +# namespace: smokeping +#spec: +# redirectRegex: +# regex: "^/favicon\\.ico$" +# replacement: "http://ai.local/_graphmagnifier_118081.ico" +# permanent: true +``` + +Сохраним файл в `~/k3s/smokeping/smokeping.yaml` (или в другом месте, где вам удобно), и применим манифесты: +```bash +kubectl apply -f ~/k3s/smokeping/smokeping.yaml +``` + +После этого smokeping будет доступен по адресу http://sp.local (или по тому доменному имени, которое вы указали +в манифесте IngressRoute) и увидите занятные графики (только дождитесь пока данные соберутся, ну часок-другой): + +![Примерно так выглядят графики](../images/k3s--pods-smokeping.png) \ No newline at end of file