Установка
Установка Okmeter Хранилище
Подготовка
-
Для развертывания компонентов также потребуется сервер или виртуальная машина с установленным Docker, kubectl и доступом к узлам Postgres по SSH и к apiserver кластеров Kubernetes под управлением Deckhouse, далее -
bastion
-
Для установки отказоустойчивого варианта Okmeter Хранилище необходимо как минимум 3 ЦОД-а.
-
В каждом из ЦОД-ов должен быть развернут кластер Kubernetes под управлением Deckhouse.
-
Между серверами в разных ЦОД-ах должна быть обеспечена полная сетевая связность.
-
Установка компонентов
Предварительные действия
-
Скачайте файлы подготовленные дистрибьютором
mkdir okmeter && cd okmeter wget -O okmeter.tar.gz https://<УНИКАЛЬНАЯ_ССЫЛКА>/okmeter.tar.gz && tar zxvf okmeter.tar.gz
-
Создайте файл
credentials-registry.okmeter.ru
с содержимым, предоставленным дистрибьютером:DOCKER_HOST=registry.okmeter.ru DOCKER_USERNAME=user DOCKER_PASSWORD=password
-
Если планируется использование private registry:
-
Создайте файл
credentials-my.private.registry
с данными для доступа в ваш registry:DOCKER_HOST=my.private.registry DOCKER_USERNAME=user DOCKER_PASSWORD=password
-
Скачайте бандлы из registry okmeter
./okmeter.sh bundles --registry-credentials credentials-registry.okmeter.ru --download bundles
-
Загрузите бандлы в ваш приватный registry:
./okmeter.sh bundles --registry-credentials credentials-my.private.registry --upload bundles
-
В дальнейшем, для установки, используйте флаг
--registry-credentials credentials-my.private.registry
-
Подготовка values-файлов
Дистрибьютор подготавливает values-файлы для каждого ЦОДа согласно утвержденным спецификациям, однако ряд значений требует обязательной проверки и изменения:
-
values-$datacenter/common.yaml
- содержит общие для всех компонентов настройки: доменное имя сервиса, список соседних кластеров -
values-$datacenter/okmeter-infra.yaml
-
Секция
.patroni.tls
заполняется данными корневого сертификата кластера patroni:export PATH=$PATH:$PWD/bin ./pki.sh --pki-path pki --gen-ca --dump-yaml ca 2>/dev/null | yq -iM ea 'select(fi==1) as $src | select(fi==0) | .patroni.tls += $src' values-dc1/okmeter-infra.yaml - ./pki.sh --pki-path pki --gen-ca --dump-yaml ca 2>/dev/null | yq -iM ea 'select(fi==1) as $src | select(fi==0) | .patroni.tls += $src' values-dc2/okmeter-infra.yaml -
и клиентского сертификата, который используется Prometheus для сбора метрик из кластера Patroni:
export PATH=$PATH:$PWD/bin ./pki.sh --pki-path pki --gen-client --dump-yaml client prometheus Prometheus 2>/dev/null | yq -iM ea 'select(fi==1) as $src | select(fi==0) | .patroni.tls += $src' values-dc1/okmeter-infra.yaml - ./pki.sh --pki-path pki --gen-client --dump-yaml client prometheus Prometheus 2>/dev/null | yq -iM ea 'select(fi==1) as $src | select(fi==0) | .patroni.tls += $src' values-dc2/okmeter-infra.yaml -
-
Секция
.patroni.hosts
. Необходимо заполнить IP-адреса серверов Postgres. Указывается внутренний адрес (internalIP
) и внешний адрес (externalIP
). Внешний адрес также является ssh-хостом для Ansible. При отсутствии внешнего адреса в оба поля необходимо указать внутренний. -
Секция
.patroni.spilo
. Необходимо заполнить поляadminPassword
(пароль пользователя patroni),superuserPassword
(пароль суперпользователя postgres),standbyPassword
(пароль пользователя репликации) иextraUsers[0].password
(пароль пользователя okmeter) взломостойкими паролями. -
Секция
.patroni.firewall
. Необходимо заполнить поляallowedIPs
и/илиallowedNets
списком адресов и сетей, которым разрешен доступ до кластера patroni. Как минимум трафик со всех нод кластера Kubernetes должны быть разрешен в настройках firewall.
-
-
TBD
Развертывание внешнего кластера Postgres под управлением Patroni
Развертывание осуществляется спомощью Ansible. Выполнение playbook-а происходит из docker-контейнера. Получить команду запуска контейнера можно с помощью скрипта okmeter.sh
с указанием пути до values-файлов любого из ЦОД-ов, поскольку настройки patroni в них идентичные. Пример:
-
Выполнить команду
./okmeter.sh ansible --registry-credentials credentials-registry.okmeter.ru --values-path values-dc1 --user ubuntu
-
Запустить контейнер полученной в п.1 командой, пример:
docker run -it --rm -v /root/.ssh:/tmp/.ssh -v /home/ubuntu/pki:/ansible/pki -v /home/ubuntu/patroni-inventory.yaml:/ansible/patroni-inventory.yaml registry.okmeter.ru/okmeter/patroni:04f1a964a9111b5b16059f10d7f32616d44431e604f1398afd9c8c34-1679998386004
-
Внутри контейнера добавить в ssh-agent ключ для доступа к серверам patroni, пример:
ssh-add /tmp/.ssh/your-ssh-key
-
Внутри контейнера выполнить Ansible Playbook, пример:
ansible-playbook -u ubuntu -Ki patroni-inventory.yaml postgres.yaml
После успешного выполнения плейбука необходимо проверить состояние кластера patroni:
-
Зайти по ssh на любой из серверов кластера
-
Войти в контейнер с Postgres:
docker exec -it postgres bash
-
Получить состояние кластера:
patronictl list
в выводе команды должны быть все сервера, на которых разворачивался Postgres, среди них должен быть сервер с ролью
Leader
. Пример:root@postgres-0:/home/postgres# patronictl list + Cluster: okmeter ---------+---------+---------+----+-----------+ | Member | Host | Role | State | TL | Lag in MB | +------------+--------------+---------+---------+----+-----------+ | postgres-0 | 10.241.32.14 | Replica | running | 2 | 0 | | postgres-1 | 10.241.32.40 | Replica | running | 2 | 0 | | postgres-2 | 10.241.32.37 | Leader | running | 2 | | +------------+--------------+---------+---------+----+-----------+
-
В случае, если Postgres в ЦОД-е, где не предусмотрен кластер Kubernetes, нужно поменять мастера
root@postgres-0:/home/postgres# patronictl switchover Current cluster topology + Cluster: okmeter ---------+---------+---------+----+-----------+ | Member | Host | Role | State | TL | Lag in MB | +------------+--------------+---------+---------+----+-----------+ | postgres-0 | 10.241.32.14 | Replica | running | 2 | 0 | | postgres-1 | 10.241.32.40 | Replica | running | 2 | 0 | | postgres-2 | 10.241.32.37 | Leader | running | 2 | | +------------+--------------+---------+---------+----+-----------+ Primary [postgres-2]: Candidate ['postgres-0', 'postgres-1'] []: postgres-0 When should the switchover take place (e.g. 2023-01-01T10:00 ) [now]: Are you sure you want to switchover cluster okmeter, demoting current leader postgres-2? [y/N]: y 2023-01-01 10:01:10.1000 Successfully switched over to "postgres-0" + Cluster: okmeter ---------+---------+---------+----+-----------+ | Member | Host | Role | State | TL | Lag in MB | +------------+--------------+---------+---------+----+-----------+ | postgres-0 | 10.241.32.14 | Leader | running | 2 | 0 | | postgres-1 | 10.241.32.40 | Replica | running | 2 | 0 | | postgres-2 | 10.241.32.37 | Replica | running | 2 | | +------------+--------------+---------+---------+----+-----------+
Развертывание сервиса
Установка всех компонентов сервиса в кластер Kubernetes производится выполнением команды для каждого из ЦОД-ов c последовательнм переключением контекста, например:
Начинать установку нужно с того ЦОД-а, Postgres в котором находится в состоянии Leader
./bin/werf kubectl config use-context dc1
./okmeter.sh install --registry-credentials credentials-registry.okmeter.ru --values-path values-dc1
./bin/werf kubectl config use-context dc2
./okmeter.sh install --registry-credentials credentials-registry.okmeter.ru --values-path values-dc2
После завершения установки необходимо расклонировать секрет с wildcard-сертификатом в неймспейсы сервиса в каждом кластере. Пример:
./okmeter.sh copy-secret --source okmeter-onprem-infra/okmeter-onprem-wildcard --target-name okmeter-onprem-wildcard
./bin/werf kubectl config use-context dc1
./okmeter.sh copy-secret --source okmeter-onprem-infra/okmeter-onprem-wildcard --target-name okmeter-onprem-wildcard
Проверка инсталяции
Если во время развертывания сервиса не возникло никаких ошибок, должны соблюдаться следующие критерии работоспособности:
- Домен инсталляции доступен из веб-браузера.
- Работает регистрация пользователя.
- Проекты создаются без ошибок.
- Агент устанавливается по инструкциям со страницы проекта
- После установки агента, на странице проекта появляется хост, отрисовываются стандартные графики.
- Работает отправка алертов (тестовый алерт)
В случае проблем с установкой обратитесь к поставщику.
Обновление инсталяции
Обновить файл versions
после выполнить те-же команды, что и для установки
Начинать обновление нужно с того ЦОД-а, Postgres в котором находится в состоянии Leader
./bin/werf kubectl config use-context dc1
./okmeter.sh install --registry-credentials credentials-registry.okmeter.ru --values-path values-dc1
./bin/werf kubectl config use-context dc2
./okmeter.sh install --registry-credentials credentials-registry.okmeter.ru --values-path values-dc2
Удаление инсталляции
Удаление всех компонентов сервиса в кластере Kubernetes производится командой:
./okmeter.sh uninstall
с ключом --yes-i-really-want-to-uninstall
.
Данную операцию необходимо повторить для каждого из ЦОД-ов с переключением контекста kubectl
Инсталляция кластера Postgres данным действием не затрагивается.
ВНИМАНИЕ: выполнение данной операции приведет к безвозвратной потере метрик и логов, хранящихся в S3.