Ну пока супруга не видит, что работаю в выходные, пойду гляну🤣
Первым делом вижу, что всё так, очередь растёт и никто не читает.
https://1drv.ms/i/s!AhrWCTJApEtgjL9P66anxphCc0XgYA?e=Ie8O1F
Идём по конфигам смотреть кто должен читать очередь.
Ага, POD с именем
webhook-*.Смотрим сколько их
>k get pods | grep webhook | wc -l
50
Ок, а сколько у нас в HPA/KEDA
>ky hpa webhook |grep -A1 -i maxre
maxReplicas: 50
Ага, упёрлись в максимум. А чо у нас триггер? Раз тут HPA, а не KEDA, то значит ресурсы, а не количество мессаджей.
>ky hpawebhook | grep -A6 -i metrics
metrics:
- resource:
name: cpu
target:
averageUtilization: 85
type: Utilization
В любом случае не важно что триггер - реплик итак уже 50. Всё, максимум.
Ок, что делает данный сервис, смотрим по коду:
- поллит sqs очередь, процессит и отправляет в RDS какие-то апдейты
Судя по значению в переменной ендпойнта - подключение идёт через RDS proxy (фу, опять он), это видно по названию.
Смотрим настройки RDS max connection - default по типу инстанс тайпу.
Смотрит настройки прокси, ничего необычного.
resource "aws_db_proxy_default_target_group" "this" {
db_proxy_name = aws_db_proxy.rds_proxy.name
connection_pool_config {
connection_borrow_timeout = 120
max_connections_percent = 80
max_idle_connections_percent = 20
}
}Хм. смотрим нагрузку БД - всё ок.
https://1drv.ms/i/s!AhrWCTJApEtgjL9RXf8WRAW5oWUVyA?e=imAk16
Ничего сверхъестественного.
Первая мысль - а давай лупану hpa max replicas 100 вместо 50!! 🦍
Ну конечно же эту мысль сразу отбросил, так как х2 увеличение клиентов может банально положить базу. Там же какие инсёрты есть.
Да и странно это вообще выглядит - 50 подов не могу обработать какое-то вшивое количество сообщений(на момент траблутинга всего 151.000)?
Там не рокетсайнс, просто процессинг мессаджа и всё, алё.
Ок, давайте смотреть что на прокси.
https://1drv.ms/i/s!AhrWCTJApEtgjL9TS18jflKYNPp8_w?e=58iUjv
А там чётко всё.
Так давай пойдём считать настройки laravel horizon:
- тайауты айдл
- количество воркеров
- количество подов
- какой поллинг тайм
и так далее, в коде и настройках самого сервиса и гите.
Тут крик супруги
ТЫ ТАМ ЧО ОПЯТЬ РАБОТАЕШЬ ЧТО-ЛИ????Тактически перекатываюсь в другой экран windows
ДА Я ТУТ ПАШКОВСКОГО СМОТРЮ, У НЕГО ВТОРОЙ ВЫПУСК ИЗ КУБЫ)))НУ ТЫ ЧО))и начинаю думать судорожнее, да что не так то, давай без арифметики.
А может быть такое, что 50 подов со своими воркерами тупо заняли весь пул(на них выделенный) и им просто не хватает?
Ну тогда быстро решений несколько:
- увеличить количество
max_connections_percent- уменьшить
connection_borrow_timeout- увеличить количество maxreplicas HPA (но это теоретически может положить базу)
- семь бед один ресет
Перекатываюсь обратно и быстро грохаю все поды, а чо вы мне сделаете
>k delete pod -l=app=webhook
И та-дам!
Видим, что сбросив пулл на прокси мы практически мгновенно начинаем вычитывать очередь.
https://1drv.ms/i/s!AhrWCTJApEtgjL9Vyy6q2lsEK_AQwA?e=65qTxE
https://1drv.ms/i/s!AhrWCTJApEtgjL9X7WSdHh45PrU2-g?e=DGjEHi
Итог:
- а чего было не знаю, надо в арифметику в будние дни смотреть, наверняка в воркерах ошибка и там на условные 10 читки идёт 5 коннекшнов и оно просто херово сконфигурено
- иногда рестарт ок, если не персистент дата
- меня так и не спалили, что работал 🤣
- вообще надо бы проверить сколько max k8s clusters - чтобы не упёрлись в пределы
- вообще все sqs-related PODs надо перетащить на KEDA + trigger
О примерном конфиге я писал в другом чате https://t.me/kubernetes_ru/875330
Трекаешь 2 часа😂
Можно идти дальше Пашковского смотреть.
#aws #troubleshooting #одинденьизжизни
