stanislavvv: (Default)
Спустя 10 лет существования внутреннего CA таки решили, что нужны и промежуточные CA.
Допилил https://github.com/stanislavvv/ca-na (голая копия рабочего CA).
Удивлён, что заработало практически сразу, чего из моего опыта не ожидалось.
stanislavvv: (Default)
На работе требуется нынче а) запускать нейросети в контейнере, б) чтоб ещё и в k8s, а не просто докер.
K8s таки есть (сам же и поднимал), осталось дело за запуском там видеокарты.
Нюансы:

1) весь k8s в виртуалках, за исключением сервера с нвидией и сеть k8s — на eth1. Ок, сделал там vxlan eth1 вместо того, что было.

2) если поставить nvidia-container-toolkit _полностью_ в соответствии с документацией, т.е. когда он рантайм по-умолчанию в containerd, через какое-то время служебные контейнеры начинают немножечко не отрабатывать пробы и перезапускаются, включая сетевой плагин. Это приводит к тому, что остальные контейнеры, у которых есть сеть, также перезапускаются. И всё это происходит примерно каждые 3-4 минуты.
Решение:
а) вернуть runc как рантайм по-умолчанию в конфиге containerd,
б) сделать RuntimeClass для запуска контейнеров, которым требуется GPU
Для п.б пришлось ещё сделать в конфиге containerd дубликат runc с именем nvidia, так как помимо всего прочего потребовалось ещё и nvidia device plugin с этим классом запускать. Он DaemonSet, так что запускается вообще везде.

3) так как количество GPU на сервере оказалось ограниченным :-), то сделал timeslicing, при помощи configmap для nvidia-device-plugin (подсмотрел чуть-чуть в темплейте helm, как прописать его использование, остальное — в документации описано достаточно понятно).

Итого для запуска требуется:
- вписать правильный tolerations (на тот сервер обычные контейнеры не допускаются)
- рядом добавить runtimeClassName: nvidia

P.S. Рад, щаслив, горд ©
P.P.S тег "колхоз", ибо назвать по-другому то, что сделано — сложновато.
stanislavvv: (Default)
На работе придумали сделать адвент-календарь, где к каждому дню будет привязан образ вм, который будет запускаться в окошке и позволять с ним взаимодействовать.
В результате получилась, пожалуй, самая весёлая неделя - столько игр по работе я ещё ни разу не запускал.
Подавляющее большинство образов представляет собой .iso, в который засунута дискетка с freedos и архив с софтом, распаковываемым на рамдиск.

P.S. На первое декабря был поставлен шароварный Doom. Как ни странно - отлично работает и играбелен даже в окошке.
stanislavvv: (Default)
Вернулся из Мегафона к нетангелам уже неделю как.
Хотят kubernetes, ибо самописное решение поверх чистого docker'а стало неудобным в обслуживании, а более удобный docker swarm - весь в багах, неустраняемых годами, отчего и пришлось писать решение. Но не очень активно хотят - решение работает без багов, поэтому занят въезжанием в обновлённую инфраструктуру через мелкие задачки.
Новых лиц не слишком много.
Кто-то из программистов выразился примерно так: "долгий у тебя отпуск был".
stanislavvv: (Default)
На работе обозвали аристократом.
Причина: посылаю подальше без мата.
stanislavvv: (Default)
В связи с требованием сделать отдельную от остальных ssl-авторизацию на указанном сервисе для отдельных товарищей перечитал доков по nginx и ssl и понял, что:
1) у нас немного неверно настроена ssl-авторизация в тех сервисах, где она есть. А именно - нехватает `ssl_verify_depth 1;`. В принципе, оно и по-умолчанию так, но умолчание имеет свойство изменяться, причём внезапно.
2) можно средствами nginx сделать ограничение доступа к сервису по указанным ключам при помощи переменных $ssl_client_serial, map и какой-то матери, но поддерживать это одно удовольствие, а не поддерживать - другое и, вероятно, проще будет не поддерживать.
3) для отдельных товарищей, вероятно, всё равно придётся делать отдельный CA, выдать им по сертификату и пусть ходят как хотят.

P.S. хорошо ещё пока не дошло до разграничения доступа средствами nginx для сервисов, которыми пользуются чуть менее, чем все...
stanislavvv: (Default)
Запустили технопревью следующей версии шаред хостинга, с изоляцией сайтов и контейнерами. Точнее, всё в контейнерах, включая ssh-сессию.

Бесплатно до тех пор, пока не допилим до конца (планируется до 15 марта доделать, но с учётом того, что сей хостинг хотели выкатить ещё осенью - хз).
Кому надо - регистрируйтесь на netangels.ru и пишите в техподдержку про то, что хотите протестировать "облачный хостинг".

Главное - пишите на info@netangels.ru о багах и недофичах :-)
stanislavvv: (Default)
Тестировал на 3 виртуалках с локалкой в 1Гбит.
Тестировал запросами вплоть до 500к в одном поле.
Результаты и выводы:
1) главный тормоз не кликхаус, а zookeeper. Жрал почти половину процессора и несколько больше памяти, чем кликхаус. Подозреваю, дело в яве :-)
2) количество запросов на запись в секунду почти не менялось от объёма данных в запросе.
3) кликхаус хорош, когда требуется писать много мелких данных большими кусками.
4) для той задачи он не подходит, зато отлично заменит influxdb, если понадобится.
stanislavvv: (Default)
Небольшая задачка: получать top10 клиентов и top10 доменов, жрущих место на почте. Графит как источних сих данных для графаны в целом справляется, но есть некоторые но:
- статистика складывается в influxdb, который не умеет сортировать по чему-либо кроме времени. Для получения топов приходится раз в 5 минут запускать по селекту на каждый вид статистики и пихать получившиеся значения в графит.
- графит хранит данные э... не совсем эффективно. То есть, если количество метрик увеличится ещё раза в три, то он перестанет справляться даже с записью.

Попробовал https://github.com/InfluxGraph/influxgraph в качестве источника данных. В теории всё нормально. На практике при количестве клиентов в статистике порядка полутора-двух тысяч (отдельно взятый сервер) создаётся запрос к influxdb объёмом килобайт в 30-40, чем сей influxgraph успешно давится, не доводя запрос до influxdb и выдавая 500-ю ошибку графане.

Пока смотрим в сторону яндексового кликхауса, но там есть нюансы типа того, что это не time series database и вообще нечто новое...
stanislavvv: (Default)
На работе, похоже, решили мне соорудить дембельский аккорд, дабы лучше отдыхалось.
Задачи, к сожалению, неавтоматизируемые.
1) В группе серверов обновление внутреннего ПО по имени keeper с версии на питоне на версию на go. Формат служебных файлов тоже частично поменялся, в результате чего перестало _правильно_ пониматься значение 1777 в качестве прав на каталог, о чём мне сообщила техподдержка. Вроде 001777 понимает правильно...
2) CI/CD из гитлаба в наш прикрытый со всех сторон тестовый кластер docker swarm. Сделал ssh-api, вроде даже правильно работает при помощи извращений в .gitlab-ci.yml и какой-то матери...
3) Глобальное обновление redmine с установкой особо новых плугинов (нынче Agile в моде). Отняло полдня + пришлось регистрироваться на сайте ради того, чтоб узнать, что триальных плугинов мне не дадут.
4) Самое быстрое. ВНЕЗАПНО обнаружилось, что сервис, который рисует картинку на телевизоры, не умеет https-ссылки. Ещё бы логи писал про это...
stanislavvv: (Default)
Чтоб не забыть, если вдруг чего - запишу, чего делал.

1) docker registry - обычный контейнер registry.
Проброшены тома certs:/certs и data:/var/lib/registry
Установлены следующие переменные:
REGISTRY_AUTH_TOKEN_REALM=https://dreg.domain.tld/api/auth
REGISTRY_AUTH_TOKEN_SERVICE=dreg.domain.tld:5000
REGISTRY_AUTH_TOKEN_ISSUER=dreg.domain.tld
REGISTRY_AUTH_TOKEN_ROOTCERTBUNDLE=/certs/dreg.crt # на самом деле - такой же, как и следующий
REGISTRY_HTTP_TLS_CERTIFICATE=/certs/dreg.domain.tld.crt
REGISTRY_HTTP_TLS_KEY=/certs/dreg.domain.tld.key
REGISTRY_STORAGE_DELETE_ENABLED=true # для удаления ненужных образов

поскольку я таки лентяй - оставил реестр на порту 5000

2) docker-registry-web - вебморда к докеру, осуществляет авторизацию, раздачу ролей и позволяет удалять контейнеры, если в реестре это разрешено.
конфиг registry-web.yml:
registry:
  # Docker registry url
  url: https://dreg.domain.tld:5000/v2
  # Docker registry fqdn
  name: dreg.domain.tld:5000
  # To allow image delete, should be false
  readonly: false
  # Trust any SSL certificate when connecting to registry (self-sign too)
  trust_any_ssl: true
  auth:
    # Enable authentication
    enabled: true
    # Token issuer
    # should equals to auth.token.issuer of docker registry
    issuer: 'dreg.domain.tld'
    # Private key for token signing
    # certificate used on auth.token.rootcertbundle should signed by this key
    key: /conf/dreg.key


Дополнительно ставится переменная REGISTRY_TRUST_ANY_SSL=true (почему-то установленное в конфиге не является убедительным)
Пробрасываются следующее:
a) conf/registry-web.yml:/conf/config.yml:ro - конфиг
b) conf/dreg.key:/conf/dreg.key - ключ для авторизации (соответствует dreg.crt из конфига реестра)
c) db:/data - каталог под БД вебморды

используется версия контейнера hyper/docker-registry-web:v0.1.2 (более новая 0.1.3 таки не заработала как надо)

3) вебморда на nginx. Чисто для https к вебморде.

А всё почему? Потому что разрекламированный Portus не делает архивных копий своих _работающих_ версий, отчего в один прекрасный момент у них оказались разломанными не только контейнеры, но и rpm. А пересобирать нечто на ruby, да ещё зависящее от хз какой версии мне как админу сильно влом.
stanislavvv: (Default)
Всё отлично работает, данные из банка получаются и ваще зашибись.
Но есть одно но: спустя несколько суток коннекта типа-защита от внешних соединений прекращает работу.
В принципе наплевать и забить, но у меня нагиос настроен ругаться на наличие связи с сим сервером доступа - в штатном режиме это означает отсутствие связи с банком.
stanislavvv: (Default)
Притащили мне токен:

и говорят человеческим голосом:
- Хотим мы получать данные из сбербанка автомагически и загружать в свою систему! А то сейчас оно через ж только руками через копипасту!

Пришлось делать.
Сделалось следующее:
1) десктоп на lxde на базе Debian/Jessie
2) поставлена неофициальная бета-версия софтины с официального форума разработчика. Поставлена неофициальным путём - после пересборки пакета.
3) поставлен сервер x2go, дабы не ходить ногами или через яву в iLO до десктопа ради единственного клика в меню.
4) сей "десктоп" об одном юните был поставлен в датацентр на белом ip.

В датацентре выяснилось, что сия софтина полностью блокирует весь обмен вне своего впн для белого ип. От слова "совсем".
Из извращений прижилось поднятие алиаса с серым ип на "десктопе" и добавление той же подсетки на целевых серверах.

Теперь данный сервер запускается так:
1) после загрузки заходим через x2goclient и вводим пин в предлагаемую форму
2) отваливаемся по таймауту, так как несмотря на галочки, софтина таки отрубает соединения
3) снова заходим через x2goclient и убеждаемся, что сбербанковский фтп доступен.

Всё. Остальным занимается крон, скрипты и sshd.
stanislavvv: (Default)
Угораздило меня поработать в банках...
Теперь любой токен несут ко мне...
stanislavvv: (Default)
Написал на работе микросервис для данных о бекапах. Рад, щаслив, горд (С)

Посмотрел, что ещё даже непонятно, куда и как их деплоить.
Уже не щаслив.

Посмотрел, сколько мест, где потребуется переписывать только с моей стороны (собственно, скрипты бекапов/восстановления как на серверах, так и на хранилищах).
Уже не рад.

Спросил у программистов, когда, они смогут заняться - аж весной. Уже не горд.
stanislavvv: (Default)
Риак - странная штука. Вот например, как он планирует распределить место в кластере после добавления ещё одного узла:

Status Ring Pending Node
-------------------------------------------------------------------------------
valid 8.6% 8.6% 'riak@192.168.0.130'
valid 8.2% 7.8% 'riak@192.168.0.131'
valid 8.2% 7.4% 'riak@192.168.0.132'
valid 8.2% 7.4% 'riak@192.168.0.133'
valid 8.2% 7.4% 'riak@192.168.0.134'
valid 8.2% 7.4% 'riak@192.168.0.135'
valid 8.2% 7.4% 'riak@192.168.0.136'
valid 8.2% 7.4% 'riak@192.168.0.137'
valid 8.2% 7.4% 'riak@192.168.0.138'
valid 8.2% 7.4% 'riak@192.168.0.139'
valid 8.2% 7.4% 'riak@192.168.0.140'
valid 9.4% 9.4% 'riak@192.168.0.141'
valid 0.0% 7.4% 'riak@192.168.0.142'
-------------------------------------------------------------------------------
Valid:13 / Leaving:0 / Exiting:0 / Joining:0 / Down:0

Обратите внимание на то, что у .141 как был самый большой процент, так и остался.

При этом процент распределения соответствует и тому, какая доля места в кластере занята на диске именно этого сервера.
По-моему, они что-то не доработали...
stanislavvv: (Default)
Расставил по ранжиру в разных категориях.

Urls:
ceph - http://ceph.com
sx/libres3 - http://www.skylable.com/
riak/riak-cs - http://basho.com/ (они переименовали riak в riak kv, а riak-cs в riak s2, но софт от этого не поменялся), доки - http://docs.basho.com/

Сложность архитектуры (для случая использования протокола S3):

I. ceph - три вида узлов (или четыре, если выделить админский узел в отдельный) - хранилище, монитор, шлюз, общение между собой по ключам
II-III. riak/riak-cs и sx - по два вида узлов - бекенд (riak - БД, sx - файлохранилище) и фронтенд (riak-cs - умный фронтенд, который и реализует хранение файлов, libres3 - более-менее тупой конвертер протокола s3 в протокол хранилища)

Сложность установки:

I. ceph - связано со сложностью архитектуры и некоторой запутанностью документации, которая не столько документация, сколько справочник. Плюс не всегда очевидные расчёты параметров.
II. riak/riak-cs - можно всё сделать по документации, но без расчёта некоторых параметров можно получить либо кластер, который либо не сможет полностью использовать текущее железо, либо будет расчитан на бОльшее количество узлов и будет жрать память больше, чем требуется.
III. sx - тупо apt-get install и немного ответов на вопросы в sxsetup

Возможность донастройки:

I. ceph - практически всё, что может понадобиться настроить - можно настроить.
II. riak/riak-cs - часть настроек неочевидна, часть недокументирована, мне для некоторых приходилось лазить по спискам рассылки и по эрланговским исходникам. Часть настроек, которые вообще говоря, предназначены для riak, пишутся в настройки riak-cs.
III. sx - тупо нечего настраивать в конфиге. От слова вообще. Можно перераспределить место в кластере или ещё что-нибудь такое. Но сказать "дай открыть больше соединений, будет афигительная нагрузка" - нельзя.

Требования к железу (на тестовом кластере с репликацией 2x):

I. sx - пойдёт практически на чём угодно
II. ceph - в узлах osd хочет 1Гб памяти на каждый терабайт места, остальным - просто по гигабайту достаточно (вероятно, radosgw под нагрузкой захочет большего, но не факт)
III. riak/riak-cs - жрёт память. Процессора хочет немного - не больше пары-тройки ядер на узел даже в продакшне.

Достоинства:
sx/libres3 - простота установки и конфигурации
riak/riak-cs - работает практически сразу после установки, если нет особых требований - довольно удобен.
ceph - можно настроить всё, обладает довольно-таки приличным быстродействием

Недостатки:
sx/libres3 - практически не тюнится, имеет базы sqlite в качестве бекенда, виснет на несколько минут при срабатывании gc на любом из узлов.
riak/riak-cs - жрёт память на фронтенде непонятно куда, жрёт память на бекенде, жрёт место на диске в процессе нормальной работы (потом отдаёт обратно, но если места не хватило - падает), не может посчитать статистику объёма бакета, если в бакете несколько сот тысяч файлов (у меня для рабочего кластера проблемы начинались где-то на 600-800 тысячах файлов в зависимости от нагрузки), иногда riak-cs ни с того ни с сего говорит "all workers busy" и это до его рестарта.
ceph - хранит каждый чанк/объект в отдельном файле, что на рекомендуемом ими xfs чревато проблемами, и если там всё можно настроить, то вы таки будете всё настраивать.
stanislavvv: (Default)
Поскольку Sx проиграл (во время срабатывания gc ВЕСЬ кластер стоит колом) - решили присмотреться к ceph.
Ставится оно при помощи ключей и какой-то матери, если не пользоваться ceph-deploy (делал по http://docs.ceph.com/docs/master/install/manual-deployment/#long-form - поставилось). Если пользоваться ceph-deploy - не всегда можно получить то, что хочется, судя по содержимому этого самого ceph-deploy.

Кратенько о том, на чём тестил: кластер в составе mon (монитор кластера, которых в продакшне должно быть не менее трёх), 2*osd (хранилища), radosgw (интерфейс s3/swift/etc, сделал для его объектов двукратную репликацию в хранилище, как и в риаке).
Тестил - так же, как и sx, путём копирования каталога, содержащего тыщу файлов в тыщу подкаталогов + относительно большой файл и всё это в бакет по имени s3://test

Результаты тестов:

s3cmd ls s3://test - 20 секунд (против 7 минут riak)
s3cmd du s3://test - 8 минут (riak я тут не дождался)
Запись большого файла - порядка 7Мб/сек, чтение - упёрлось в 100Мбит виртуалки radosgw.

При этом riak-cs/riak содержал три узла под riak.

После добавления третьего osd и начала перебалансировки кластера s3cmd ls s3://test стал работать 1:15-1:20, что является вполне подходящим результатом для сильно нагруженного кластера даже по сравнению с ненагруженым риак.
Скорость чтения больших файлов не изменилась (от слова вообще). Менялась скорость перебалансировки и всё.

Пожалуй, ceph как хранилище с s3 мне нравится больше, чем riak, у которого есть NN граблей, которые нельзя обойти настройками.
stanislavvv: (Default)
На работе в качестве хранилища поставлен кластер из RiakCS + Riak.
В целом работает, но кой-чего там не устраивает (в частности, скорость работы при большом количестве файлов в бакетах).
Решили протестировать связку Sx+LibreS3. Поставили два идентичных по железу кластера + по одному фронтенду и потестили.
Итоги:
1) тест с миллионом файлов в бакете.
Riak - шустренько залил миллион, но зато чтение корня бакета заняло почти 7 минут и потребовало увеличения таймаута в конфиге s3cmd
Sx - за выходные так и не залил миллион, но чтение корня бакета при 700 тысячах - порядка 30 секунд.

В процессе залития у Sx наблюдаются глобальные тормоза на несколько минут при запуске gc на одном из узлов бекенда.

2) тест с крупным файлом
Сохранение:
Riak - тихо и мирно залил на скорости 3Мбайт/сек (у виртуалок ограничение по сети - 100Мбит, так что в сеть не упиралось)
Sx - начал заливать на скорости 10Мбайт/сек, но после залития последнего чанка затупил так, что время на операцию оказалось больше, чем в случае riak.

Скачивание:
Riak - отдал на скорости 6Мбайт/сек
Sx - отдал на сокрости 10Мбайт/сек

3) поддержка ACL и политик
Riak ACL поддерживает, политики - аналогично.
Sx не поддерживает ACL вообще, но поддерживает некоторые политики. И, похоже, отсутствие поддержки ACL таки даёт бОльший результат, чем результаты тестов производительности в смысле принятия решения.

Посмотревши на документацию ceph - там с ACL аналогично, так что, скорее всего, тоже отпадёт.
stanislavvv: (Default)
Пришло время расширять кластер S3. То есть, добавить ещё 4 виртуалки к 8-и имеющимся.
Начали настраивать хост. Сделали 4 бриджа, как на остальных хостах. Однако, через N секунд перестали работать бриджи везде.
Прибили бриджи - всё восстановилось. "Ага", подумали уральские мужики, "дело в openvswitch".
Переделали на один бридж + бондинг 4-х интерфейсов на каждом из хостов.
Пока работает, трафик вроде распределяется. Ждём синхронизации кластера, ибо пока не пройдёт - будет тормозить жутко.
Но сколько геморроя в процессе...

Profile

stanislavvv: (Default)
stanislavvv

June 2025

S M T W T F S
1234567
891011121314
15161718 192021
22232425262728
29 30     

Syndicate

RSS Atom

Style Credit

Expand Cut Tags

No cut tags
Page generated Jul. 3rd, 2025 04:42 am
Powered by Dreamwidth Studios