Укажите порядок планирования в Kubernetes DaemonSet
В моем кластере работает консул, и на каждом узле консул-агент запускается как DaemonSet. У меня также есть другие DaemonSet, которые взаимодействуют с Консулом и, следовательно, требуют, чтобы агент-консул работал для связи с серверами Консула.
Моя проблема заключается в том, что если мой DaemonSet запущен раньше, чем консул-агент, приложение выдаст ошибку, поскольку не сможет подключиться к Консулу, а затем будет перезапущено.
Я также заметил ту же проблему с другими DaemonSets, например Weave, так как для этого требуются kube-proxy и kube-dns. Если сначала запустить Weave, он будет постоянно перезапускаться до тех пор, пока сервисы kube не будут готовы.
Я знаю, что могу добавить логику повторения в свое приложение, но мне было интересно, можно ли было указать порядок, в котором запланированы DaemonSets?
2 ответа
Сам Kubernetes не предоставляет пути к определенным зависимостям между модулями / развертываниями / службами (например, "запуск модуля A, только если услуга B доступна" или "запуск модуля A после модуля B").
Правильный подход (основанный на том, что я нашел при исследовании этого), кажется, логика повторов или контейнер инициализации. Цитировать документы:
Они выполняются до завершения работы любых Контейнеров приложения, тогда как Контейнеры приложения работают параллельно, поэтому Контейнеры Init предоставляют простой способ блокировать или задерживать запуск Контейнеров приложения до тех пор, пока не будет выполнен некоторый набор предварительных условий.
Это означает, что вы можете либо добавить логику повторения в свое приложение (что я бы порекомендовал, так как это могло бы помочь вам в различных ситуациях, например, в случае короткого перерыва в обслуживании), мы можем использовать контейнер init, который опрашивает конечную точку работоспособности через имя службы Kubernetes, пока не будет получает удовлетворительный ответ.
Логика повтора предпочтительнее, чем упорядочение зависимостей при запуске, так как она обрабатывает как начальный случай восстановления, так и восстановление после сбоев после запуска