Рубрики
Uncategorized

Масштабирование кластеров Kubernetes с оружием

Обзор Представь, если Amazon был недоступен всего один день каждый год. При этом они … помечены с Куберовщиками, дежопами, архитектурой.

Представь, если Amazon был недоступен всего один день каждый год. При этом у них будет наличие 99,7%, что кажется довольно разумным на поверхности. Однако в 2020 году доход Амазонки был почти 400 миллиардов долларов. Жизнь с наличием 99,7% вместо 100% стоило бы Amazon более 1 миллиарда долларов. Простоя — даже просто немного будет стоить ваше дело.

Мы минимизируем время простоя через избыточность. Создание надежных систем вне ненадежных компонентов требует запасных компонентов для замены неисправных. Тем не менее, хотя требуется время для замены неисправных компонентов.

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

Кубернаны вступили в известность в течение последних нескольких лет, потому что он обеспечивает прочную, но расширяемую, основу для создания таких масштабных систем. Для непрерывной доставки (CD) крупномасштабных систем, в том числе построенных на Kubernetes, платформа выбора — Spinnaker. Однако, если вы должны были использовать Spinnaker в одиночку, управление развертыванием Kubernetes на этом уровне масштаба невыносима. Тот, что необходимо, это надежный инструмент для управления управлением изменениями и конфигурацией трубопровода. В конечном итоге то, что нужно, — это распределение на уровне предприятия Armory of Spinnaker.

В этой статье мы рассмотрим проблемы Управление Kubernetes в масштабе и препятствия обработки Операционные среды и Обновление Kubernetes Отказ Затем мы посмотрим на роль Spinnaker в качестве CD платформы для Kubernetes Отказ Наконец, мы посмотрим на простоту и безопасность, которая приходит с использованием Оружейная спинакер Для задачи управления такими крупными системами Kubernetes.

Кубернаны великолепны, однако он работает на уровне кластера. И кластер Kubernetes имеет ограничения. Кубернаны 1.21 Поддерживает до 5000 узлов на кластер и 110 стручек на узел, до 150 000 стручек и в общей сложности 300 000 контейнеров. Это много, но большинство предприятий превышают даже эти пределы на несколько порядков.

Эти пределы кластера вряд ли могут измениться в ближайшее время. Для более крупных систем решение — запускать несколько кластеров Kubernetes. Но, как устойчивое управление мульти-кластером без поддержки хороших инструментов? Кроме того, у нас есть проблемы управления контролем доступа для пользователей и услуг, координируя множественные среды и иметь дело с потенциально разбитыми обновлениями Kubernetes. На уровне масштаба мы рассматриваем — и для предприятий, где простоя от времени недопустимо — задача — это Геркулес. Давайте подробно посмотрим на каждую из этих проблем.

Multi-Cluster Management

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

Этот вид ручной работы перерывается довольно быстро. Кубернаны способствуют концепции лечения ваших серверов как крупного рогатого скота, а не домашних животных. В масштабе следует также взять эту концепцию к вашим кластерам. Что это значит? Это означает, что кластеры одноразовые. Кластер, который запускает некоторые рабочие нагрузки (включая критические нагрузки), может быть масштабирован (есть более похожие кластеры, выполняющие одинаковые рабочие нагрузки), могут быть удалены и/или могут быть осушены, и его рабочие нагрузки передаются в другой кластер.

Этот уровень контроля в масштабе требует много специального программного обеспечения для управления кластером. Одним из самых полезных узоров является кластер управления. Кластер управления — кластер Kubernetes, задача которого состоит в том, чтобы управлять другими кластерами Kubernetes. Хорошая отправная точка для этого подхода — это Kubernetes Cluster API , который является подпроектом Kubernetes, который имеет дело именно с этой проблемой.

Пользователи, учетные записи службы и разрешения

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

Здесь есть несколько вопросов, которые мы кратко коснулись.

Пользовательский опыт

Пользовательский опыт включает в себя запрос правильного уровня доступа на каждом кластере. Без надлежащей поддержки пользователей нелегко узнать, какой уровень доступа им нужен для каждого кластера. Зачастую пользователи попытаются получить доступ к некоторому ресурсу через интернет-интерфейс и столкнуться с неясным «доступом запрещенным» ошибкой.

Оператор Опыт

Опыт оператора включает в себя управление сложным графиком ресурсов и пользователей. Часто они организованы в иерархических структурах ресурсных групп и групп пользователей. Операторы должны иметь возможность управлять правильными разрешениями для каждого пользователя/группы, а также членов пользователя в группах. Эти разрешения необходимо регулировать всякий раз, когда новые пользователи присоединяются к организации, оставьте организацию или изменять роли. Все это требует интеграции между разработчиками, операторами и его.

Радиус взрыва

Радиус взрыва нарушения часто связан с гранулярностью управления разрешениями. Если у каждого застройщика есть полные права администратора, то один скомпрометированный ноутбук может привести к общему кризису. С другой стороны, пользовательские пошив разрешения каждого пользователя могут привести к большому количеству занятости. Ошибки оставляют людей, запертые из ресурсов, которые им нужно выполнить свою работу.

Безопасность

Проблемы безопасности тесно связаны. Если ресурсы не защищены правильно, то конфиденциальная информация может вытекать. Злоумышленники могут предпринять контроль над критическими системами.

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

Суть в том, что эта шкала управления невозможна, нажав на кнопки в какой-то веб-консоли. Весь процесс должен быть динамичным, с автоматическим открытием и последовательным руководством по всему предприятию.

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

Производственная среда, конечно, наиболее важна. Но часто промежуточная среда должна придерживаться очень высоких стандартов доступности, имитируя производственную среду, поскольку она служит привратником до развертывания производства.

Ранее мы упомянули избыточность и отказ. Системная архитектура и топология могут диктовать, если ваши кластеры Kubernetes развернуты в виде многозонных, многоразовых или даже многоуровневых, чтобы защитить себя от разных режимов отказов. Избыточность дорого; Управление отработкой не тривиально.

Если ваши кластеры работают на смеси облачных поставщиков и частных центров обработки данных, это добавляет еще одно измерение сложности.

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

Хорошо. Ваши кластеры Kubernetes ждут и бегут. Все счастливы. Однако даже сейчас ваша работа еще не закончена. Kubernetes выпускает новую версию три раза в год (раньше, они выпустит новые версии четыре раза в год). Он не замечает, что вы часто обновляете. Это особенно верно, если вы используете управляемые Kubernetes, предлагающие как GKE, EKS или AKS. Ваш облачный поставщик обновит ваши кластеры Kubernetes, нравится вам это или нет.

Kubernetes имеет очень упорядоченный процесс амортизации и удаления. У каждого ресурса есть группа, версия, добрый (GVK). Во-первых, определенная версия будет устарена. Это означает, что версия все еще поддерживается, но все знают, что это на разделочный блок, чтобы полностью удалить в более позднее время. Если вы обновитесь на новую версию Kubernetes, и вы пытаетесь создать или обновить удаленный объект, это будет не удастся. Ваш кластер сейчас содержит разбитые ресурсы.

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

Как вы ходите об этом? Во-первых, вы прочитали заметки выпуска Kubernetes, чтобы узнать, какие ресурсы будут устарены или удалены. Затем сканируйте все ваши кластеры для пострадавших ресурсов. После выявления этих ресурсов работайте с заинтересованными сторонами, чтобы обновить свои ресурсы для поддержания версий.

В масштабе вам понадобятся инструменты для оценки совместимости. Я написал два инструмента, которые я могу открыть источник в ближайшее время: один инструмент принимает список устаревших/удаленных версий ресурсов и сканирует список кластеров для ресурсов, которые используют эти версии. Другой инструмент предпринимает список кластеров и целевой кластер и делает сухой импорт всех исходных ресурсов для целевого кластера.

Например, если вы хотите обновить из Kubernetes 1.18 Кубернану 1.19 тогда вы создадите 1.19 Пустой кластер и запустить инструмент со списком всех ваших 1.18 кластеры. Инструмент попытается создать (в режиме сухого прогона) все ресурсы из 1.18 кластеры в 1.19 кластер. Любая несовместимость приведет к ошибке, которая будет сообщена.

Как только вы будете готовы к обновлению, и все ваши рабочие нагрузки используют поддерживаемую версию, пришло время выполнять фактическое обновление. Существует две части до процесса обновления: обновление плоскости управления и модернизация плоскости данных (рабочие узлы). Версия плоскости данных означает версию компонентов Kubernetes, которые устанавливаются на каждом узле (Kubelet, Container Runtime, Kube-Proxy). Различные узлы могут иметь разные версии, но они не могут быть старше двух второстепенных версий плоскости управления, ни более нового, чем версия плоскости управления.

Это означает, что, когда вы обновляете свой кластер, сначала вы должны обновить плоскость управления к версии, которая является больше всего Две второстепенные версии впереди вашей старой версии узла. Например, если ваши узлы на Kubernetes 1.18 Вы можете обновить свою плоскость управления до 1.19 или 1.20 Отказ Затем вы можете выполнить и обновить свои узлы в ту же версию.

Наилучшая практика заключается в том, чтобы все консистентное — ваша плоскость управления, и все ваши узлы все должны быть на одной второстепенной версии Куберов. Единственным исключением является во время самого процесса обновления; Там временно будут некоторые компоненты на старой версии и некоторые на новой версии.

Все это требует значительной координации, особенно если вы запускаете кластеры Kubernetes на комбинации облачных поставщиков и On-Prem. Возможно, не все облачные провайдеры поддерживают одни и те же версии Кубебени. Вам нужно будет найти общую почву или отклоняться от наилучшей практики и запустить разные версии Кубератесов на разных провайдерах.

Стало ясно, что управление Kubernetes в масштабе — это нетривиальная задача? Для этого хорошо требуется много поддержки программного обеспечения, большинство из которых не просто доступен с полки. Вам нужно будет создать свои собственные инструменты, развивать их и поддерживать расширенные сценарии развертывания.

За задачей управления ваши кластеры Kubernetes — это колоссальная задача развертывания и масштабирования; И это то, где входит спинакер.

Хотя Spinnaker есть несколько мощных и популярных решений для непрерывных доставний для Kubernetes, имеет некоторые уникальные функции, особенно для предприятий, которые необходимо иметь дело с большим количеством кластеров Kubernetes.

Прежде всего, Spinnaker был тестирован в битве в масштабе. Это было разработано изначально Netflix, а затем расширено Google. Во-вторых, Spinnaker поддерживает несколько поставщиков и не только Кубернеты. Не будучи специфическим в Кубейнете, может показаться недостатком, однако, ни одна компания с тысячами кластеров Kubernetes не имеет Только эти кластеры. Компании, которые работают в этом масштабе, были во время задолго до того, как Кубернаны пришли (что было всего шесть лет назад). Обычно они имеют большой портфель систем, развернутых в средах некубернетиков. Spinnaker поддерживает свои среды Kubernetes, а также их среды некубернетики.

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

Наконец, Spinnaker — в то время как проект с открытым исходным кодом — также наслаждается сильной коммерческой поддержкой от таких компаний, как Оружейная Отказ

Хотя Spinnaker получает ногу в дверь в отношении масштабных развертываний, для предприятий это всего лишь начало. В предприятиях работающих систем этого масштаба, это не только один дежопт Гуру, управляющий всеми вещами Spinnaker. Есть целые команды DevOps (множественное число) все прикосновелись к трубопроводам Spinnaker одновременно. Один только Spinnaker не позволяет своим управлению управлению политиками и управлением трубопроводами, которые нужны эти предприятия. Чтобы удовлетворить эту потребность, ARMORY разработала распределение уровня предприятия Spinnaker. Оружейная расширяется Spinnaker в очень значительных способах сделать его лучшим гражданином Кубератеса, особенно в масштабе.

Во-первых, Armore строит на вершине ванильного спинакера с помощью собственных плагинов Spinnaker. Это имеет решающее значение для устойчивой интеграции. Около десяти лет назад я работал в компании, которая построила социальный браузер на основе Хромиум Отказ Проект был очень инновационным и успешным, но он включал в себя глубокую настройку хрома. Всякий раз, когда Chromium выпустил новую версию, нам пришлось повторно применить все наши настройки на вершину. Всякий раз, когда была раскрыта исправление безопасности, мы были уязвимы, пока мы не закончили интеграцию, которая заняла дни (в некоторых случаях, недель). В связи с этим, Оружейная дорога принимает высокую дорогу, используя стандартные механизмы для внесения структуры плагина в Spinnaker с открытым исходным кодом. Поставить просто, Оружейные строки на вершине спиннакера с открытым исходным кодом Отказ

Во-вторых, Оружейность также посвящена Kubernetes, ориентированным на то, чтобы сделать Spinnaker лучшим гражданином Куберане. Это начинается с Оружный агент для Кубератесов Отказ Агент позволяет распределять развертывание тысячам кластеров и децентрализованного управления учетными записями. Кроме того, Armore предоставляет политический двигатель Это позволяет установить организационную политику, растущую безопасность и соответствие.

Если этого достаточно, оружия бросает некоторые другие вкусности, такие как интеграция террафора и управление секретами. Но, возможно, наиболее важными возможностями для управления Куберовщиками в масштабе является Оружейные «трубопроводы как Code» функция Отказ Гитопсы для трубопроводов Spinnaker — это важная особенность. Сохранение трубопровода Spinnaker в качестве кода в контроле исходного кода и использование вашего стандартного обзора и управления изменением имеет огромное значение.

Kubernetes решает многие проблемы для современных распределенных контейнеров распределенных приложений. Когда вы мигрируете системы корпоративных масштабов в Kubernetes, вы можете в конечном итоге управлять большим количеством кластеров Kubernetes. Для этого ну нужно твердое решение для развертывания ваших рабочих нагрузок ко всем этим кластерам, а также управлять самими кластерами. Spinnaker и Orike могут служить вам хорошо. Если вы управляете большим количеством кластеров Kubernetes или планируйте миграцию больших существующих систем в Kubernetes, вы, скорее всего, найдете Spinnaker и Armory в качестве вашего решения непрерывного развертывания.

Оригинал: «https://dev.to/mbogan/scaling-kubernetes-clusters-with-armory-24n4»