вторник, 13 июля 2021 г.

postgresql проверка репликации


I use following SQL queries to check status on Postgres v11 usually.

On master:

select * from pg_stat_replication;

On replica (streaming replication in my case):

select * from pg_stat_wal_receiver;
https://stackoverflow.com/questions/43388243/check-postgres-replication-status
И очень полезный совет
For vertical output replace ; with \x\g\x

Такой вот замороченный аналог mysql-ного \G

Ещё несколько запросов для слейвов
select pg_is_in_recovery();
select pg_last_xlog_receive_location();
select pg_last_xlog_replay_location();
SELECT CASE WHEN pg_last_xlog_receive_location() = pg_last_xlog_replay_location()
                  THEN 0
                ELSE EXTRACT (EPOCH FROM now() - pg_last_xact_replay_timestamp())
              END AS log_delay;



пятница, 9 июля 2021 г.

Работаем с логами

 Для начала, очень рекомендую познакомиться с journalctl, это весьма гибкая система, сделанная как замена syslog-у. Главные отличия - кольцевой буфер для логов, что с одной стороны значит "место не может кончиться от жирного лога", с другой - если нам нужны эти логи то нужны ещё сервисы по их извлечению, парсингу, хранению, ротации; а также вместо Local* работаем по именам сервисов

При этом есть и другие удобные плюшки, вида выдачи лога в нужном формате (-o json)

Если нужен вывод в syslog, есть штатные механизмы (но очень редко они сбоят)

Возможен смешанный режим работы, когда часть сервисов пишет в журнал, часть сразу в локальные файлы.

Очень годная статья по journalctl

https://www.digitalocean.com/community/tutorials/how-to-use-journalctl-to-view-and-manipulate-systemd-logs

По настройке связки

https://www.loggly.com/ultimate-guide/centralizing-with-syslog/

И теперь мы можем использовать journalbeat для выгрузки логов.

понедельник, 28 июня 2021 г.

Dell USB3.0 dock D3100 + ubuntu

 Вроде неплохой док, но его особенность - "из коробки" он работает по сути только как усб хаб + аудио, а вот видео порты не работают. Нужно качать драйвера, но на сайте dell их просто нет (точнее, там заявлена поддержка только windows). И гуглинг находит такой линк

http://www.displaylink.com/downloads/ubuntu

новая ссылка

https://www.synaptics.com/products/displaylink-graphics/downloads/ubuntu

суббота, 19 июня 2021 г.

CI/CD и .NET в докере

Есть несколько вариантов сборки

windows  based

Если открыть шаблоны гитлаб, там есть несколько вариантов под с шарп, но там в основе идут виндовые образы


linux based

mcr.microsoft.com/dotnet/core/sdk:3.1

! note

Bear in mind that since the release of .NET 5, the repository path changed to mcr.microsoft.com/dotnet/sdk:3.1. Here is a link to the rename anouncement: github.com/dotnet/dotnet-docker/issues/2375

при это стадии сборки будут такие

dotnet restore

dotnet build

dotnet publish

На самом деле, там чуть более сложный синтаксис, например для restore можно указать имя проекта, для publish - куда публиковать итог, -o ./publish/

и так далее.

Есть вариант с image: microsoft/dotnet:latest
но там есть какие-то нюансы с версиями

Чуть линков: 1 (кодероад помойка, но оригинал не нагуглился), 2, 3, 4, 5


versions in docker-compose

В начале docker-compose.yml всегда пишется версия компоуза, что когда появилось - нужно читать тут (матрица версий, полная дока). При этом может быть так, что пишем версию 3.9 - а докер что у нас установлен такой версии не знает, нужно снижать. Но снизив версию и больше не получая ошибок про указанную версию, можно получать ошибки про использование новых атрибутов. Например, убунта 18.04, докер и docker.io, вписываем версию 3.5-3.7 (выше ругается), но при этом ошибка (ниже в ошибки впишу)


Про ошибки

ERROR: Version in "./Docker/docker-compose.yml" is unsupported. You might be seeing this error because you're using the wrong Compose file version. Either specify a supported version (e.g "2.2" or "3.3") and place your service definitions under the `services` key, or omit the `version` key and place your service definitions at the root of the file to use version 1.

Снижаем версию или ищем как обновить инсталляцию

ERROR: The Compose file './Docker/docker-compose.yml' is invalid because:
networks.form_constructor value Additional properties are not allowed ('name' was unexpected)
То, что описано выше. При этом данный тэг заявлен в 3.5 и на неё валидатор не ругался.

пятница, 4 июня 2021 г.

phpipam - знакомство и api

Если уж довелось работать с phpipam, начать лучше с чтения оф доки и его установки в докере. Например, отсюда

https://github.com/pierrecdn/phpipam

если взять блок из docker-compose, не надо ставить ни баз, ничего.

!! Это хорошо для ознакомления, но база в докере в проде - не лучшее решение !!

Есть другой вариант

https://hub.docker.com/r/phpipam/phpipam-www (github)


 Тепреь посмотрим  на его апи

https://phpipam.net/api/api_documentation/

Клиенты:

https://phpipam.net/api/phpipam-api-clients/

https://github.com/phpipam/phpipam-api-clients


После установки в докере (да и скорее всего в любой) если включить PowerDNS то он не заработает. Во-первых, надо прописать правильный хост. Во-вторых, подключиться к БД и завести юзера и базу ИЛИ указать текущего рута.. и создать базу. Так что лучше создать всё самому. В-третьих, база сама не заполнится (что я вполне могу назвать рукожопством, могли бы чуть доделать и по предоставленному рутовому доступу всё заполнить + иметь кнопку в вебе для деплоя нужного дампа бд), нужно найти порядок действий (линк ниже) и пролить базу руками.

https://www.digitalocean.com/community/tutorials/how-to-install-and-configure-powerdns-with-a-mariadb-backend-on-ubuntu-14-04 step 4

!!! Схема бд - "не та". Нет disabled полей как минимум. Второе рукожопство - открываем оф доку, берём оттуда дамп

https://doc.powerdns.com/authoritative/backends/generic-mysql.html#default-schema

Вроде всё ок, но после создания домена опять получаем Error: SQLSTATE[42S22]: Column not found: 1054 Unknown column 'change_date' in 'field list'. Находим issue и видим ещё линк

https://doc.powerdns.com/md/authoritative/howtos/#basic-setup-configuring-database-connectivity

Что на выходе? На сайте phpipam нет нужной схемы. И в репе нет. И линков нет, только по issue собирать. И даже офсайт схемы pdns противоречат друг другу.

Вишенка на торте. Днс не заработает после активации, так как нужно сам pdns поставить ОТДЕЛЬНО. В общем, очередная формальная вещь, которую никто нигде не смог нормально описать.

Берите netbox...


О репликации есть такое
https://www.digitalocean.com/community/tutorials/how-to-configure-dns-replication-on-a-slave-powerdns-server-on-ubuntu-14-04

но надо ещё изучить вопрос. Дело в том, что можно поднять несколько powerdns в режиме подключения к БД (одной или нескольких с репликацией), а также про режим без общей БД с NOTIFY. И powerdns native vs master

среда, 26 мая 2021 г.

Инвентаризация хостов и сетей

 Когда много хостов и/или сетей, нужно вести их учёт. Это называется IPAM - IP address management.

Типичные представители

- phpIPAM

- netbox (и его форк nautobot)

- RackTables

- SolarWinds IP Address Manager

- Opendcim

По моему мнению, лучше смотреть на netbox.

четверг, 20 мая 2021 г.

LogStash vs filebeat

 https://logz.io/blog/filebeat-vs-logstash/

Если очень вкратце, они друг друга не заменяют, а дополняют. logstash написан на жаве и весьма тяжёл, при этом filebeat (является частью Beats, подробнее тоже в линке выше) написан на go и потому лёгкий, но не умеет в серьёзную обработку. Поэтому для прода лучше вынести logstash вообще на отдельную машину, и закидывать туда данные через filebeat.

И по настройке - смотрим статью.

Есть и офдока

https://www.elastic.co/guide/en/beats/filebeat/7.0/filebeat-getting-started.html

Но. Иногда можно и отказаться от logstash совсем, используя ingress pipeline и перенеся обработку тех же access_log сразу в elasticsearch.


Итого.

filebeat - сбор и доставка логов (плюс предобработка через фильтры)

logstash - парсит логи в документы

Elasticsearch - хранит и индексирует документы

Kibana - поиск, аггрегирование, показ нужных данных.

вторник, 18 мая 2021 г.

Мониторинг для Kubernetes

 Если мы взяли не готовый продукт, а чистый кубер, там нет многого нужного. Сейчас рассмотрим мониторинг. Статья содержит много ссылок, потому что информации много, читать лучше в первоисточнике, и понимать все варианты. При этом не стоит читать только статьи вида "9 утилит" - нужно понимать, КАК оно будет работать, раскатываться, собирать, куда заливать... Что такое heapster, DaemonSet, operator и так далее.

Установка Kubernetes через kubeadm

 https://kubernetes.io/docs/setup/production-environment/tools/kubeadm/create-cluster-kubeadm/

Установку kubectl kubeadm kubelet пропускаем, это по доке делается на раз.

Перед настройкой нужно доставить некоторые пакеты

# Pull images (apiserver, controller-manager, scheduler, proxy, etcd, coredns)

kubeadm config images pill

И теперь совсем базовая инициализация выглядит так

sudo kubeadm init --pod-network-cidr 10.244.0.0/16

В итоге, нам
1) создаст /etc/kubernetes/admin.conf
2) выдаст строку для подключения других нод к нашему мастеру, начинаться будет с kubeadm join
3) поставит и запустит нужные сервисы

И теперь мы можем работать под своим юзером с кластером (команды пускаем от юзера!)
mkdir -p $HOME/.kube
sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
sudo chown $(id -u):$(id -g) $HOME/.kube/config

Если что-то запороли -- ничего страшного!
sudo kubeadm reset

Но.. у нас не работает сеть. Потому что теперь нужно поставить сеть :) Гуглим calico, flannel или в общем случае - CNI. Тоже обязательно понять, что там происходит и как оно работает.

Линки

понедельник, 17 мая 2021 г.

Что такое kubernetes operator

Операторы для Kubernetes: как запускать stateful-приложения


И пример оператора

shell-operator v1.0.0: долгожданный релиз нашего проекта для Kubernetes-операторов

Другой пример - framawork для создания своих операторов

https://github.com/nolar/kopf

Kopf —Kubernetes Operator Pythonic Framework— is a framework and a library to make Kubernetes operators development easier, just in a few lines of Python code.


Правда, чаше операторы используют для БД или мониторинга.