Как стать автором
Обновить
30
43
Александр @demonight

DevOps

Отправить сообщение

Сложности с удалением пода - часть проблемы в работе MySQL-оператора.

Деплоймент был создан оператором и с именем хоста ошибки быть не должно.

Да, это не совсем корректный перевод. В оригинале это звучит вот так:
For each deployment that Kubernetes manages, it schedules sets of containers (known as pods) onto machines to be run (known as nodes).
Или «внутри машин для запуска (так называемые «узлы»)»
1) Service существует, но это примитивный tcp-балансировщик, а это значит, что, если один из pod возвращает ошибку, он просто транслирует её пользователю, а nginx может спросить у следующего. Это тонкий момент работы с абстракцией svc.
2) Ssl-offloader похож на Ingress, и это факт, но Ingress существует чуть более полугода, а проект несколько старше. Плюс сейчас prod переезжает на GCP и там мы решаем этот вопрос родными средствами платформы.
3) Удаление namespace сделано при принятии PR из фича-ветки в мастера.
4) Рассылка — хорошая идея, попробую реализовать.
Общение происходит через внутреннюю сетку, api-шлюз нужен для гибкой маршрутизации. Например, при внедрении нового сервиса, на который нужно перевести часть запросов со старых.
Есть ещё вариант научить всё ПО в контейнерах писать в rsyslog и собирать это на отдельной логовнице.
Да, это возможно, но я, пока, не исследовал как себя поведут pod при попытке запуститься на уже занятом порту.
К тому же, проблему связи с пользователем, в данном решении, решает всё-же Cloudflare, а не Kubernetes.
Парадигма контейнеров предусматривает хранение только статичной информации.
Динамика, пользовательский данные и логи хранить внутри контейнеров вообще не стоит, разве что, при условии монтирования в контейнер внешнего хранилища, например по iscsi.
В статье выше, в разделе «заметки на полях» есть замечательная фраза «Using the kube-proxy obscures the source-IP of a packet accessing a Service» А для меня важно, чтобы приложение знало этот самый source-IP.
Между тем, в той же статье написано, что Flannel с инкапсуляцией VXLan работает вполне корректно.
В ноде — нормально, но не в Kubernetes
К сожалению, исключительно вручную, Kubernetes это система управления контейнерами и работает она только с ними.
В последних релизах добавили возможность отдавать через kube-proxy статику, но, как я понял, её нужно раскладывать по серверам так же — вручную.
У меня несколько другой план:
  • nginx — вне Kubernetes, дабы корректно обрабатывать source IP
  • php в контейнерах в нескольких экземплярах, для отказоустойчивости и масштабируемости
  • memcache в виде двух отдельных сервисов внутри кластера, репликация и отказоустойчивость
  • galera — внутри кластера в виде 3-4 отдельных сервисов с подключением внешнего хранилища по iscsi

Как-то так.
Почему именно такой выбор — напишу в статье.
Но имеет возможность работать, например, внутри VPN-тоннеля.
К сожалению, пока, добавить миньона «на лету» довольно проблематично. Данный функционал будет реализован чуть позже.
Кстати про ipsec.
Flannel входящая в состав Kubernetes создаёт единое адресное пространство для всех контейнеров в пределах кластера, что позволяет свободно разносить ноды кластера по разным ЦОДам.

Как только они добавят механизм резервирования в систему управления можно будет проводить «учения» на целом ЦОДе.

Но и сейчас, потеря мастер-ноды не нарушает работу сервиса.
Честно говоря, вопреки CoreOS сделать ничего не хотелось, хотя и пришлось несколько изменить подход к организации сервисов согласно логике CoreOS.

А бага интересна, читал про неё, но лично не сталкивался. Надеюсь, что её всё-же устранят.
Да, подобные playbook довольно легко написать для любой системы управления серверами, благо, даже запуск «вручную» у Kubernetes довольно прост. Соответственно и playbook написать не сложно, необходимо описать запуск нескольких исполняемых файлов с определёнными параметрами.

Другой вопрос, что эти параметры стоит изучить и написать свой рецепт, а не брать готовый, можно напороться на неприятные последствия.
У меня есть небольшой опыт использования CoreOS совместно с Docker. Выбор пал на эту ОС как на активно развивающуюся, настраиваемую конфигом и имеющую возможность кластеризоваться «by design».
К сожалению опыт прошёл в формате «продакшн тест» и, пока что, далее не продвинулся.
Я рассматривал Docker Swarm когда выбирал систему управления контейнерами. Выбор между Kubernetes и Docker Swarm сводится к необходимому функционалу. Это связано с тем, что изначальные задачи у них различаются.
Docker Swarm — способ использовать несколько машин как единую виртуальную среду для запуска контейнеров.
Kubernetes же позволяет не только запустить несколько машин, но и занимается балансировкой нагрузки, контролем запущенности и обновлением контейнеров (есть функция rolling-update позволяющая без простоя обновить pod'ы внутри RC).

Морочиться стоит в случае если:
  • Есть необходимость регулярного безпростойного деплоя
  • Необходимо обеспечить высокую отказоустойчивость
  • Необходимо обеспечить горизонтальную масштабируемость и балансировку не прибегая к «зоопарку» ПО
  • Вы не боитесь использовать в продакшне ПО находящееся в стадии альфа стадии разработки

Возможно я ошибаюсь на счёт Swarm, буду благодарен за дополнительную информацию по опыту работы с ним.

Информация

В рейтинге
150-й
Откуда
Москва и Московская обл., Россия
Работает в
Дата рождения
Зарегистрирован
Активность

Специализация

System Administration, DevOps
Lead