Я мало что знаю о kubernetes, но, насколько мне известно, это система, которая позволяет вам контролировать и управлять контейнерными приложениями. Так что, вообще говоря, суть выгоды, которую мы получаем от kubernetes, заключается в возможности «сказать» kubernetes, какие контейнеры мы хотим запустить, сколько их, на каких машинах, среди прочего, и kubernetes позаботится об этом. для нас. Это верно?
Если это так, то я просто не вижу преимуществ запуска конвейера CI с использованием модуля kubernetes, поскольку я понимаю, что некоторые люди это делают. Допустим, у вас есть инструменты сборки в контейнерах Docker, а не на конкретной машине, и это здорово — вы можете просто использовать эти контейнеры в процессе сборки, почему kubernetes? Есть ли прирост производительности или что-то в этом роде?
Цените некоторые идеи.
Важной деталью является то, что вы не указываете Kubernetes, на каких узлах должен работать данный модуль; он выбирает сам, и если в кластере мало ресурсов, во многих случаях он может фактически выделить больше узлов самостоятельно (с помощью автомасштабирования кластера).
Поэтому, если ваша система непрерывной интеграции довольно загружена и использует все контейнеры для всего, может иметь смысл запускать отдельное задание сборки как задание Kubernetes. Если у вас есть 100 сборок, которые запускаются одновременно, кластер может предоставить себе больше оборудования, и очередь сборки будет очищаться быстрее. В частности, если вы используете Kubernetes для других задач, это может сэкономить вам административные усилия по сравнению с поддержкой выделенного пула рабочих систем CI, которые необходимо обновлять отдельно и которые будут простаивать, пока не появится этот большой набор сборок.
Настройки безопасности Kubernetes также значительно лучше, чем у Docker. Скажем, вашей системе CI необходимо запускать контейнеры как часть сборки. В Kubernetes он может работать под служебной учетной записью и получать разрешения на создание и удаление развертываний в определенном пространстве имен, и ничего больше. В Docker стандартным подходом является предоставление вашей системе CI доступа к сокету Docker хоста, но это можно легко использовать для захвата хоста.
Настоятельно рекомендуется получить хорошее представление о том, что такое Kubernetes и что он может и чего не может делать.
Как правило, контейнеры в сочетании с инструментами оркестровки могут обеспечить лучшее управление вашими машинами и службами. Это может значительно повысить надежность вашего приложения и сократить время и ресурсы, затрачиваемые на DevOps.
Стоит отметить некоторые особенности:
Горизонтальное масштабирование инфраструктуры: можно легко добавлять или удалять новые серверы.
Автоматическое масштабирование: автоматическое изменение количества запущенных контейнеров в зависимости от загрузки ЦП или других показателей, предоставляемых приложением.
Масштабирование вручную: вручную масштабируйте количество запущенных контейнеров с помощью команды или интерфейса.
Контроллер репликации: Контроллер репликации гарантирует, что в вашем кластере работает одинаковое количество модулей. Если модулей слишком много, контроллер репликации завершает работу с дополнительными модулями. Если их слишком мало, он запускает больше стручков.
Проверка работоспособности и самовосстановление: Kubernetes может проверять работоспособность узлов и контейнеров, гарантируя, что ваше приложение не столкнется с какими-либо сбоями. Kubernetes также предлагает самовосстановление и автоматическую замену, поэтому вам не нужно беспокоиться о сбое контейнера или модуля.
Маршрутизация трафика и балансировка нагрузки. Маршрутизация трафика отправляет запросы в соответствующие контейнеры. Kubernetes также поставляется со встроенными балансировщиками нагрузки, поэтому вы можете балансировать ресурсы, чтобы реагировать на сбои или периоды высокого трафика.
Автоматическое развертывание и откат: Kubernetes обрабатывает развертывание новых версий или обновлений без простоев, отслеживая работоспособность контейнеров. В случае, если развертывание не проходит успешно, оно автоматически откатывается.
Канарские развертывания: Канарские развертывания позволяют тестировать новое развертывание в рабочей среде параллельно с предыдущей версией.
Однако вы также должны знать чем Kubernetes не является:
Kubernetes — это не традиционная всеобъемлющая PaaS (платформа как Сервис) система. Поскольку Kubernetes работает на уровне контейнера а не на аппаратном уровне, он обеспечивает некоторые общие применимые функции, общие для предложений PaaS, такие как развертывание, масштабирование, балансировка нагрузки и позволяет пользователям интегрировать свои журналы, решения для мониторинга и оповещения. Однако Kubernetes не монолитные, и эти решения по умолчанию являются дополнительными и подключаемыми. Kubernetes предоставляет строительные блоки для разработчиков платформах, но сохраняет выбор пользователя и гибкость там, где это необходимо важный.
Особенно в вашем случае использования обратите внимание, что Kubernetes:
Не развертывает исходный код и не создает ваше приложение. Рабочие процессы непрерывной интеграции, доставки и развертывания (CI/CD) определяется организационной культурой и предпочтениями, а также технические требования.
Решение остается за вами, но понимание основных концепций, приведенных выше, поможет вам его принять.
Спасибо, Дэвид, за ваш вклад. Я ценю это.