CoreOS Fleet, резервный контейнер Docker
У меня есть небольшой сервис, который разделен на 3 контейнера докера. Один бэкэнд, один интерфейс и небольшая часть регистрации. Теперь я хочу запустить их с помощью coreOS и флота.
Я хочу попробовать запустить 3 избыточных внутренних контейнера, чтобы интерфейс мог переключаться между ними в случае сбоя одного из них.
Как мне их связать? Если я использую только один, это легко, я просто даю ему имя, например, "назад" и связываю это так
docker run --name front --link back:back --link graphite:graphite -p 8080:8080 blurio/hystrixfront
Можно ли связать несколько?
2 ответа
Используемый вами метод будет в некоторой степени зависеть от типа используемого вами серверного сервиса. Если бэкэнд-сервис http, то есть несколько хороших прокси / балансировщиков нагрузки на выбор.
Общая идея заключается в том, что ваш интерфейсный сервис должен быть представлен только одной точке входа, которую представляет nginx или haproxy. Сложность этого или любого облачного сервиса заключается в том, что вам нужно иметь возможность вводить внутренние сервисы или удалять их и предоставлять их в прокси-сервис. Для этого есть несколько хороших записей для nginx и haproxy. Вот один из них:
Настоящая проблема здесь в том, что это не автоматически. Могут быть некоторые методы, которые автоматически вводят / удаляют серверные части для этих прокси-серверов.
У Kubernetes (который может работать поверх coreos) есть концепция под названием "Сервисы". Используя этот метод развертывания, вы можете создать "сервис" и еще одну вещь, называемую "контроллер репликации", которая обеспечивает докер-процесс "бэкэнда" для сервиса, который вы описываете. Затем контроллер репликации может получить указание увеличить / уменьшить количество внутренних процессов. Ваш веб-интерфейс получает доступ к "сервису". Я недавно использовал это, и это работает довольно хорошо.
Я понимаю, что это не совсем простой ответ. Я думаю, что вопрос, который вы задаете, действительно является сердцем развертывания облака.
Как сказал Майкл, вы можете сделать это автоматически, добавив службу обнаружения и привязав ее к внутреннему контейнеру. Служба обнаружения добавит IP-адрес (обычно вы хотите связать его с IP-адресом вашей частной сети, чтобы избежать ненужного использования пропускной способности) и порт в хранилище значений ключей etcd, и его можно прочитать из контейнера балансировщика нагрузки. автоматически обновлять балансировщик нагрузки для добавления доступных узлов.
На сайте Digital Ocean есть хорошее руководство: https://www.digitalocean.com/community/tutorials/how-to-use-confd-and-etcd-to-dynamically-reconfigure-services-in-coreos