Привет! Я Саша Хренников, руководитель 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 отправятся по почте к своим новым владельцам, а остальных участников челленджа и тех, кто в этот раз не смог проверить свои силы, мы призываем дождаться новых испытаний.

Чтобы подготовиться, вы можете почитать описания наших архивных челленджей:

  1. DevOps-челлендж: решите задачку и выиграйте крутой мерч

  2. Назад в прошлое: запускаем k8s v.0.1 из 2014 и анонсируем челлендж

  3. DevOps Challenge: восстановите работу MySQL и выиграйте крутой мерч

  4. DevOps Challenge: помогите Деду Морозу с оповещениями и получите новогодний мерч

  5. Не поехали: исправьте ошибку запуска и выиграйте мерч (DevOps Challenge)

А еще лучше — попробуйте пройти их, все предыдущие задания доступны в боте по ссылке.

Удачи!