Поиск по блогу

воскресенье, 25 сентября 2022 г.

Первые впечатления от Backup for GKE

В рамках ликбеза потрогал немного Backup for GKE чтобы понять чем он отличается от привычного Velero. На данный момент времени он в preview и часть выводов может стать неактуальными в будущем.

Первое что бросается в глаза это его ценообразование - оно зависит не только от объема данных, которые попадают в бэкап, но и от количества подов, которые бэкапятся. Т.е. если у вас условно в среднем 30 подов в месяц, то вам нужно заплатить около 30$ за backup management, плюс стоимость хранения данных. В этом плане Velero выигрывает, т.к. там в основном стоимость только за хранение данных.

Далее его региональная доступность - сейчас он поддерживается только в некоторых регионах, но при этом создать бэкапить дает кластера и в неподдерживаемых регионах. Но вот восстановить бэкап в тот же кластер уже не получится - обязательно проверяйте список поддерживаемых регионов через gcloud beta container backup-restore locations list.

четверг, 22 сентября 2022 г.

Сравнение gcloud storage и gsutil

Недавно команда gcloud storage вышла в GA и я решил проверить насколько ее производительность отличается от gsutil. Для тестов нашелся GCS бакет с примерно 21k мелких объектов (средний размер 24kB), которые сжаты gzip.

Запускать тесты буду в e2-standard-2 VM (2 vCPU / 8 GB). Текущая версия Google SDK:

$ gcloud version
Google Cloud SDK 403.0.0
alpha 2022.09.20
beta 2022.09.20
bq 2.0.77
bundled-python3-unix 3.9.12
core 2022.09.20
gcloud-crc32c 1.0.0
gsutil 5.13

Чтобы не зависеть от скорости работы блочного устройства тесты буду выполнять на ramfs.

$ sudo mkdir /mnt/ramdisk
$ sudo mount -t ramfs none /mnt/ramdisk
$ sudo chmod 777 /mnt/ramdisk
$ cd /mnt/ramdisk
$ mkdir test1 test2

Копирование данных через gcloud storage cp

$ cd /mnt/ramdisk/test1/
$ time gcloud storage cp -r gs://BUCKET/SAMPLE/DATA/* .

[skipped output]

  Completed files 21000/21000 | 448.9MiB/448.9MiB | 1.5MiB/s

Average throughput: 1.5MiB/s

real    4m54.065s
user    9m4.797s
sys     0m30.854s

Копирование данных через gsutil cp (используется многопоточность)

$ cd /mnt/ramdisk/test2/
$ time gsutil -m cp -r gs://BUCKET/SAMPLE/DATA/* .

[skipped output]

Operation completed over 21.0k objects/448.9 MiB.

real    5m58.861s
user    10m8.143s
sys     1m18.350s

В моем тесте копирование мелких объектов c использованием gcloud storage быстрее gsutil примерно на 18%. Пока что gcloud storage не заменит полностью gsutil, но для простых операций стоит использовать её.

четверг, 25 августа 2022 г.

Раздельный SSID для Huawei LG8245X6-50

С некоторых пор домашний интернет обеспечивает роутер Huawei LG8245X6-50 с поддержкой Wifi 6 (802.11ax). В комнатах, которые прилегают к шкафу с роутером, интернет работает стабильно, но в дальней комнате из-за обилия стен сигнал был в районе от -75dBm до -85dBm. В таких условиях ни о какой надёжной работе сети говорить не приходится (считается что приемлемый уровень сигнала должен в районе -65dBm).

Из коробки роутер идет с одинаковым SSID для 2.4GHz и 5GHz что с одной стороны должно упрощать жизнь, если 5Ghz не "добивает", но 2.4GHz работает нормально (5GHz хуже "пробивает" стены, особенно если они из железобетона). Но в моём случае в зоне слабого сигнала клиенты постоянно "скачут" с 2.4GHz на 5GHz и обратно.

Чтобы этого не происходило нужно присвоить разные SSID для разных частот. И тут кроется проблема с Huawei LG8245X6-50 - админка не дает переименовать SSID для сети 5Ghz. Поле имени копирует настройки с 2.4GHz и не даёт сменить отдельно. Чтобы обойти это ограничение достаточно завести по дополнительному SSID для 2.4GHz и 5GHz с разными именами, а после деактивировать изначальный SSID.

пятница, 1 июля 2022 г.

Обновления репозитария - июль 2022

Добавил в свой репозитарий поддержку Ubuntu Jammy (22.04) и собрал пакеты Midnight Commander 4.8.28 для архитектур amd64, armhf и arm64.

Удалил Debian Stretch (LTS поддержка закончилась вчера) и Ubuntu Hirsute (поддержка закончилась еще в январе, но руки не доходили заняться).

четверг, 23 июня 2022 г.

Настройка Google Cloud Ops Agent для Nextcloud

В процессе настройки отправки логов Nextcloud в Google Cloud Logging довелось поработать с Google Cloud Ops Agent. Это относительно новый агент, который отвечает и за логи и за метрики.

Nextcloud пишет структурированные логи в JSON формате так что возиться с регулярками не придется. Одна запись выглядит примерно так:

{
  "reqId": "fA6aIAL7fObKyDA2YeDq",
  "level": 2,
  "time": "2022-06-21T06:55:18+00:00",
  "remoteAddr": "",
  "user": "--",
  "app": "news",
  "method": "",
  "url": "--",
  "message": "https://[skipped]/data/rss read error : Server error: `GET https://[skipped]/data/rss` resulted in a `500 Internal Server Error` response:\n<html>\r\n<head><title>500 Internal Server Error</title></head>\r\n<body bgcolor=\"white\">\r\n<center><h1>500 Internal Server E (truncated...)\n",
  "userAgent": "--",
  "version": "23.0.5.1"
}

Для начала нужно вытащить timestamp и severity. Timestamp буду брать из поля time, а severity из поля level, но для level потребуется преобразование из значения Nextcloud в значение Google LogEntry:

среда, 22 июня 2022 г.

Настройка Nextcloud для работы с Redis

В процессе настройки Nextcloud для работы с Redis на нескольких серверах столкнулся с тем, что в phpredis есть нюансы с поддержкой TLS для PHP сессий.

В phpredis есть два session handler'а:

  • session.save_handler = redis
  • session.save_handler = rediscluster
В phpredis 5.3.2 в реализацию PHP сессий для rediscluster добавили поддержку TLS, но в обычном redis ее по-прежнему нету.

Пришлось отключить TLS в сервере Redis чтобы не городить отдельное решение для PHP сессий. На всякий случай оставлю тут настройки:

config/config.php

'redis' =>
  array (
    'host' => 'redis.example.com',
    'port' => '6379',
    'password' => 'xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx',
  ),
  'memcache.local' => '\\OC\\Memcache\\Redis',
  'memcache.distributed' => '\\OC\\Memcache\\Redis',
  'memcache.locking' => '\\OC\\Memcache\\Redis',
  'filelocking.enabled' => 'true',

php.ini

redis.session.locking_enabled=1
redis.session.lock_retries=-1
redis.session.lock_wait_time=10000
session.save_handler = redis
session.save_path = "tcp://redis.example.com:6379?auth=xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx"

Документацию по настройке Redis для Nextcloud можно найти тут.

вторник, 7 июня 2022 г.

Terraform: could not connect to registry.terraform.io

С некоторых пор из-за санкций в Беларуси есть проблемы с доступом к зарубежным ресурсам и в частности с выкачиванием провайдеров Terraform:

$ terraform init

Initializing the backend...

Initializing provider plugins...
- Reusing previous version of hashicorp/google from the dependency lock file
╷
│ Error: Failed to query available provider packages
│
│ Could not retrieve the list of available versions for provider hashicorp/google: could not connect to registry.terraform.io: Failed to request discovery
│ document: 403 Forbidden
╵

Заход в документацию из браузера также блокируется

Самым простым решением будет использование VPN из другого региона, но если такой вариант по каким-либо причинам не подходит, но есть SSH доступ к внешнему хосту в "правильном" регионе, то выкрутиться можно так: