Есть ли причина запуска CI-сборок в кластере kubernetes?

Я мало что знаю о kubernetes, но, насколько мне известно, это система, которая позволяет вам контролировать и управлять контейнерными приложениями. Так что, вообще говоря, суть выгоды, которую мы получаем от kubernetes, заключается в возможности «сказать» kubernetes, какие контейнеры мы хотим запустить, сколько их, на каких машинах, среди прочего, и kubernetes позаботится об этом. для нас. Это верно?

Если это так, то я просто не вижу преимуществ запуска конвейера CI с использованием модуля kubernetes, поскольку я понимаю, что некоторые люди это делают. Допустим, у вас есть инструменты сборки в контейнерах Docker, а не на конкретной машине, и это здорово — вы можете просто использовать эти контейнеры в процессе сборки, почему kubernetes? Есть ли прирост производительности или что-то в этом роде?

Цените некоторые идеи.

"DevOps: Jenkins & AWS Series, часть 5: Установка Gradle на Ubuntu 22.04
"DevOps: Jenkins & AWS Series, часть 5: Установка Gradle на Ubuntu 22.04
В этой статье блога мы проведем вас через процесс установки Gradle на Ubuntu 22.04, интеграции его с Jenkins и создания задания Gradle. Мы...
1
0
66
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

Важной деталью является то, что вы не указываете Kubernetes, на каких узлах должен работать данный модуль; он выбирает сам, и если в кластере мало ресурсов, во многих случаях он может фактически выделить больше узлов самостоятельно (с помощью автомасштабирования кластера).

Поэтому, если ваша система непрерывной интеграции довольно загружена и использует все контейнеры для всего, может иметь смысл запускать отдельное задание сборки как задание Kubernetes. Если у вас есть 100 сборок, которые запускаются одновременно, кластер может предоставить себе больше оборудования, и очередь сборки будет очищаться быстрее. В частности, если вы используете Kubernetes для других задач, это может сэкономить вам административные усилия по сравнению с поддержкой выделенного пула рабочих систем CI, которые необходимо обновлять отдельно и которые будут простаивать, пока не появится этот большой набор сборок.

Настройки безопасности Kubernetes также значительно лучше, чем у Docker. Скажем, вашей системе CI необходимо запускать контейнеры как часть сборки. В Kubernetes он может работать под служебной учетной записью и получать разрешения на создание и удаление развертываний в определенном пространстве имен, и ничего больше. В Docker стандартным подходом является предоставление вашей системе CI доступа к сокету Docker хоста, но это можно легко использовать для захвата хоста.

Спасибо, Дэвид, за ваш вклад. Я ценю это.

learner 26.04.2021 22:28
Ответ принят как подходящий

Настоятельно рекомендуется получить хорошее представление о том, что такое Kubernetes и что он может и чего не может делать.

Как правило, контейнеры в сочетании с инструментами оркестровки могут обеспечить лучшее управление вашими машинами и службами. Это может значительно повысить надежность вашего приложения и сократить время и ресурсы, затрачиваемые на DevOps.

Стоит отметить некоторые особенности:

  • Горизонтальное масштабирование инфраструктуры: можно легко добавлять или удалять новые серверы.

  • Автоматическое масштабирование: автоматическое изменение количества запущенных контейнеров в зависимости от загрузки ЦП или других показателей, предоставляемых приложением.

  • Масштабирование вручную: вручную масштабируйте количество запущенных контейнеров с помощью команды или интерфейса.

  • Контроллер репликации: Контроллер репликации гарантирует, что в вашем кластере работает одинаковое количество модулей. Если модулей слишком много, контроллер репликации завершает работу с дополнительными модулями. Если их слишком мало, он запускает больше стручков.

  • Проверка работоспособности и самовосстановление: Kubernetes может проверять работоспособность узлов и контейнеров, гарантируя, что ваше приложение не столкнется с какими-либо сбоями. Kubernetes также предлагает самовосстановление и автоматическую замену, поэтому вам не нужно беспокоиться о сбое контейнера или модуля.

  • Маршрутизация трафика и балансировка нагрузки. Маршрутизация трафика отправляет запросы в соответствующие контейнеры. Kubernetes также поставляется со встроенными балансировщиками нагрузки, поэтому вы можете балансировать ресурсы, чтобы реагировать на сбои или периоды высокого трафика.

  • Автоматическое развертывание и откат: Kubernetes обрабатывает развертывание новых версий или обновлений без простоев, отслеживая работоспособность контейнеров. В случае, если развертывание не проходит успешно, оно автоматически откатывается.

  • Канарские развертывания: Канарские развертывания позволяют тестировать новое развертывание в рабочей среде параллельно с предыдущей версией.

Однако вы также должны знать чем Kubernetes не является:

Kubernetes — это не традиционная всеобъемлющая PaaS (платформа как Сервис) система. Поскольку Kubernetes работает на уровне контейнера а не на аппаратном уровне, он обеспечивает некоторые общие применимые функции, общие для предложений PaaS, такие как развертывание, масштабирование, балансировка нагрузки и позволяет пользователям интегрировать свои журналы, решения для мониторинга и оповещения. Однако Kubernetes не монолитные, и эти решения по умолчанию являются дополнительными и подключаемыми. Kubernetes предоставляет строительные блоки для разработчиков платформах, но сохраняет выбор пользователя и гибкость там, где это необходимо важный.

Особенно в вашем случае использования обратите внимание, что Kubernetes:

Не развертывает исходный код и не создает ваше приложение. Рабочие процессы непрерывной интеграции, доставки и развертывания (CI/CD) определяется организационной культурой и предпочтениями, а также технические требования.

Решение остается за вами, но понимание основных концепций, приведенных выше, поможет вам его принять.

Другие вопросы по теме