
Привет! Я Саша Хренников, руководитель DevOps-юнита в KTS.
Неделю назад мы запустили DevOps-челлендж в честь 5-летия нашего блога на Хабре. Участникам нужно было разобраться, почему приложение не может синхронизироваться в ArgoCD, найти ошибку в конфигурации и довести деплой до зеленого статуса.
Челлендж завершен, а значит, пришло время подвести итоги и разобрать решение.
Но сначала важное объявление. Мы по-прежнему оставляем открытым доступ и к этому челленджу, и ко всем предыдущим испытаниям. Так что если вы пропустили запуск, не успели поучаствовать вовремя или просто хотите потренироваться, все еще можно пройти задачу самостоятельно в нашем боте. То же касается и архивных челленджей: они остаются доступными, чтобы можно было набить руку к следующему разу.
Поэтому небольшой совет: если вы еще не пробовали решить задачу сами, лучше сначала сходить в бота и попытаться пройти челлендж без подсказок. А тех, кто готов узнать ответ, приглашаю перейти к следующему разделу.
Как и обещал, в конце будет таблица с десятью победителями, которые справились с задачей быстрее остальных и получат СДЭКом наши футболки.
Решение
Ошибка синхронизации
Первое, что мы видим при входе в ArgoCD — Sync Error, в которой зависло приложение.
Самый простой вариант понять, в чем беда — скачать репозиторий с чартом и проверить валидность чарта с помощью helm template:
helm template . Error: demo-app/templates/health-check.yaml:26:81 executing "demo-app/templates/health-check.yaml" at <.Values.healthCheck.endpoint.path>: can't evaluate field path in type interface {} Use --debug flag to render out invalid YAML
healthCheck.endpoint задан как строка вместо объекта.
Текущее значение:
healthCheck: enabled: true endpoint: "/healthz"
Правильно:
healthCheck: enabled: true endpoint: path: "/healthz"
После правок коммитим и пушим изменения. Особо ленивые могут поправить прямо в веб-IDE GitLab.
CrashLoopBackOff
Чарт исправлен, и даже успешно синхронизировался. Но приложение продолжает лежать. И те, кто заглянул в логи падающего пода, обнаружили там следующее:
/docker-entrypoint.sh: Configuration complete; ready for start up 2026/03/26 15:33:33 [emerg] 1#1: no "events" section in configuration nginx: [emerg] no "events" section in configuration
Похоже, что мы потеряли важную часть конфигурации NGinx, и без секции events он отказывается стартовать. Судя по составу чарта, конфиг должен приходить из конфигмапа demo-app-config, но она пуста. Данные почему-то не извлекаются из файла nginx.conf.
В ходе диагностики нужно было заглянуть в .helmignore. Какой-то злодей добавил в него строку files:
# local dev configs files
Осталось удалить эту строку из файла и синкануть приложение. Головоломка решена.
Победители
А теперь самое приятное, переходим к результатам. Ниже таблица участников, которые справились с заданием быстрее всех и попали в число победителей.
Место | Имя пользователя | Время |
1 | Виталий aka @anoshkinvv | 5 мин 11 сек |
2 | Art aka @artysaz | 5 мин 24 сек |
3 | Niki aka @nikidevops | 5 мин 38 сек |
4 | Markko Tukiainen aka @vampig | 15 мин 24 сек |
5 | Vi aka @icefull | 16 мин 25 сек |
6 | Alexandr Boltris aka @AlexandrBoltris | 16 мин 26 сек |
7 | Мария aka @mariya_tol | 18 мин 29 сек |
8 | Vladimir aka @vk597 | 19 мин 8 сек |
9 | Roman Klochkov aka @klororo | 19 мин 17 сек |
10 | Artem Demidenko aka @vregret | 19 мин 51 сек |
Поздравляем с победой! Фирменные футболки KTS отправятся по почте к своим новым владельцам, а остальных участников челленджа и тех, кто в этот раз не смог проверить свои силы, мы призываем дождаться новых испытаний.
Чтобы подготовиться, вы можете почитать описания наших архивных челленджей:
Назад в прошлое: запускаем k8s v.0.1 из 2014 и анонсируем челлендж
DevOps Challenge: восстановите работу MySQL и выиграйте крутой мерч
DevOps Challenge: помогите Деду Морозу с оповещениями и получите новогодний мерч
Не поехали: исправьте ошибку запуска и выиграйте мерч (DevOps Challenge)
А еще лучше — попробуйте пройти их, все предыдущие задания доступны в боте по ссылке.
Удачи!
