Как управлять развертываниями с помощью кубернетов
Я надеюсь найти хороший способ автоматизировать процесс перехода от кода к развернутому приложению на моем кластере kubernetes.
Для создания и развертывания моего приложения мне нужно сначала создать изображение докеры, пометить его, а затем нажать на ECR. Затем мне нужно обновить мой deploy.yaml с новым тегом для изображения докеров и запустить развертывание с помощью kubectl apply -f deployment.yaml.
Это пойдет и выполнит скользящее развертывание на кластере кубернетов, обновляя контейнеры до новой версии изображения контейнера, после завершения этого развертывания мне могут потребоваться другие приложения, такие как запуск миграции базы данных или очистка кеша/утечка, что может или не может выполняться для определенного развертывания.
Я полагаю, что я мог бы просто написать сценарий оболочки, который запускает все эти команды, и запускать его всякий раз, когда я хочу начать новое развертывание, но я надеюсь, что есть лучший/стандартный способ решения этих проблем, которые я пропустил.
Когда я писал этот вопрос, я заметил, что stackoverflow рекомендует этот вопрос: Kubernetes Deployments. Один из ответов на это, по-видимому, подразумевает, что, по крайней мере, некоторые из того, что я ищу, скоро придут к кубернетам, но я хочу убедиться, что, если есть лучшее решение, которое я могу использовать сейчас, я, по крайней мере, об этом знаю.
Ответы
Ответ 1
Мой коллега имеет хорошее сообщение в блоге по этой теме:
http://blog.jonparrott.com/building-a-paas-on-kubernetes/
В принципе, Kubernetes - это не платформа как услуга, это инструментарий, на котором вы можете создать свою собственную платформу-a-as-Service. Он не очень упрямый по дизайну, вместо этого он фокусируется на решении некоторых сложных проблем с планированием, настройкой сетей и координацией контейнеров и позволяет вам рассказать о своих мнениях поверх него.
Один из простейших способов автоматизации рабочих процессов, которые вы описываете, - использовать Makefile.
Вдобавок к этому вы можете создать свой собственный миниатюрный PaaS, который автор первого блога сделал здесь:
https://github.com/jonparrott/noel
Или вы можете принять участие в более сложных усилиях по созданию открытого PaaS на Kubernetes, например OpenShift:
https://www.openshift.com/
или Deis, который строит платформу, похожую на Heroku, на Кубернете:
https://deis.com/
или Redspread, который создает "Git для кластера Kubernetes":
https://redspread.com/
и есть много других примеров того, как люди строят PaaS поверх Кубернетов. Но я думаю, что будет долгое время, если когда-либо, что существует "промышленный стандарт" для развертывания в Kubernetes, поскольку половина цели заключается в том, чтобы включить несколько рабочих процессов развертывания для разных вариантов использования.
Я хочу отметить, что для создания изображений контейнеров Google Cloud Container Builder может быть полезным инструментом, поскольку вы можете делать такие вещи, как использовать его для автоматической сборки изображения в любое время, когда вы нажимаете на репозиторий, который затем может быть развернут. Альтернативно, Jenkins - популярный способ автоматизировать потоки CI/CD с Kubernetes.
Ответ 2
Я полагаю, что я мог бы просто написать сценарий оболочки, который запускает все эти команды, и запускать его всякий раз, когда я хочу начать новое развертывание, но я надеюсь, что есть лучший/стандартный способ решения этих проблем, которые я пропустил.
Компания, в которой я работаю (Weaveworks) и другие люди в космосе, выступала за подход, который мы называем GitOps, пожалуйста, взгляните на нашу серию сообщений в блогах, охватывающих тему:
Суть в том, что вы выталкиваете изображения из CI, ваши проверенные ЯМЛ проявляются в git (обычно разные репо из кода приложения). Это репо с манифестми затем применяется к каждому из ваших кластеров (dev/prod) оператором сверки. Вы можете легко автоматизировать все это самостоятельно, но также взгляните на то, что мы создали.
Отказ от ответственности: я являюсь сотрудником Kubernetes и сотрудником Weaveworks. Мы строим инструменты с открытым исходным кодом и коммерческие инструменты, которые помогают людям быстрее добраться до производства Кубернете.
Ответ 3
Мы работаем над проектом с открытым исходным кодом под названием Jenkins X, который является предлагаемым подпроектом фонда Jenkins, направленным на автоматизацию CI/CD на Kubernetes с использованием Jenkins и GitOps для продвижения по службе.
Когда вы объединяете изменения в главную ветку, Jenkins X создает новый семантически версированный дистрибутив вашего приложения (pom.xml, jar, docker image, helm chart). Затем конвейер автоматизирует генерацию запросов Pull для продвижения вашего приложения через все среды через GitOps.
Здесь приведена демонстрация того, как автоматизировать CI/CD с несколькими средами на Kubernetes с использованием GitOps для продвижения между средами и средами предварительного просмотра по запросу Pull - с использованием Spring Boot и apps nodejs (но мы поддерживаем многие языки + фреймворки).