Как обеспечить готовность реплик контейнеров в Kubernetes?

#docker #kubernetes

#docker #kubernetes

Вопрос:

Я новичок в Kubernetes, и мне было интересно, возможно ли запускать реплики контейнеров по одной за раз? Другими словами, если я развертываю файл compose, содержащий конфигурацию контейнера или модуля pod с N репликами, возможно ли (и если да, то как) гарантировать, что каждая реплика ожидает готовности предыдущей перед запуском?

Я читал о тестах готовности, но, если я правильно их понял, они обеспечивают упорядочение модулей вместо реплик, или я неправильно понял?

Спасибо

Ответ №1:

Набор состояний обладает следующим свойством: при наличии трех реплик вторая не запустится, пока первая не будет запущена и готова.

(Обычно «реплика» и «pod» означают одно и то же. Если вы создаете развертывание или StatefulSet с 3 репликами и запускаете kubectl get pods , как только это будет сделано, вы должны увидеть 3 модуля.)

Если вы используете Kompose для развертывания, есть хотя бы намек на то, что он не поддерживает StatefulSets; для этого вам нужно написать собственный Kubernetes YAML.

Ответ №2:

В Kubernetes есть объект StatefulSet для управления набором реплик модуля. StatefulSet отличается от развертывания по умолчанию в том смысле, что он предоставляет гарантии упорядоченности и уникальности этих модулей. Из документации:

Для StatefulSet с N репликами, когда модули развертываются, они создаются последовательно, в порядке от {0..N-1}.

В качестве примера смотрите этот блог о том, как настроить StatefulSet для ElasticSearch.

Комментарии:

1. Привет @Blokje5 спасибо за ответ, но я не вижу, как это отвечает на мой вопрос. Можете ли вы быть более конкретными? Спасибо

2. Вы говорили о непрерывном обновлении ваших модулей, правильно, т. Е. вы хотите обновлять набор контейнеров репликами x по одному за раз? Или я неправильно понимаю ваш вопрос?

3. простое развертывание

4. Вы хотите гарантировать упорядоченность при развертывании ваших реплик? т. е. реплика 2 должна начать выполняться, как только реплика 1 будет завершена? Это ваш вопрос?

5. Просто для ясности: i) файл compose определяет приложение с полем replicas, равным, например, 3; ii) я развертываю свой файл compose; iii) реплика 2 ожидает, пока реплика 1 будет запущена перед запуском; iv) реплика 3 ожидает, пока реплика 2 будет запущена перед запуском.