Поскольку наши клиенты все чаще используют контейнеры для выполнения своих рабочих нагрузок, мы увидели потребность в дистрибутиве Linux, разработанном с нуля до запускать контейнеры, уделяя особое внимание безопасности, операциям и управляемости в любом масштабе. Заказчикам нужна была операционная система, которая дала бы им возможность автоматизировать управление тысячами хостов, на которых запущены контейнеры.
Встречайте Bottlerocket, новый дистрибутив Linux с открытым исходным кодом, созданный для запуска контейнеров. Bottlerocket разработан для повышения безопасности и повышения эффективности вашей контейнерной инфраструктуры. Его встроенное усиление безопасности помогает упростить соответствие требованиям безопасности, а его механизм обновления транзакций позволяет использовать оркестраторы контейнеров для автоматизации обновлений операционной системы (ОС) и снижения эксплуатационных расходов.
Bottlerocket разрабатывается как проект с открытым исходным кодом на GitHub с общедоступной дорожной картой. Мы с нетерпением ждем создания сообщества вокруг Bottlerocket на GitHub и приветствуем ваши запросы функций, сообщения об ошибках или предложения.
Содержание статьи
Бутылочно-ракетная технология
Мы начали разрабатывать и создавать Bottlerocket на основе того, что мы узнали из того, как клиенты используют Amazon Linux для запуска контейнеров, и из запуска таких сервисов, как AWS Fargate. На каждом этапе процесса проектирования мы оптимизировали Bottlerocket для обеспечения безопасности, скорости и простоты обслуживания.
Bottlerocket повышает безопасность за счет включения только программного обеспечения, необходимого для запуска контейнеров, что снижает вероятность атаки на систему безопасности. Он использует Linux с улучшенной безопасностью (SELinux) в принудительном режиме для увеличения изоляции между контейнерами и операционной системой хоста, в дополнение к стандартным технологиям ядра Linux для реализации изоляции между контейнерными рабочими нагрузками, такими как группы управления (cgroups), пространства имен и seccomp .
Кроме того, Bottlerocket использует verity target (dm-verity) Device-mapper, функцию ядра Linux, которая обеспечивает проверку целостности, чтобы предотвратить постоянные угрозы для ОС злоумышленниками, такие как перезапись основного программного обеспечения системы. Современное ядро Linux в Bottlerocket включает eBPF, что снижает потребность в модулях ядра для многих низкоуровневых системных операций. Большая часть Bottlerocket написана на Rust, современном языке программирования, который помогает обеспечить безопасность потоков и предотвратить ошибки, связанные с памятью, такие как переполнение буфера, которое может привести к уязвимостям безопасности.
Bottlerocket также применяет операционную модель, которая дополнительно повышает безопасность, препятствуя административным подключениям к производственным серверам. Он подходит для больших распределенных сред, в которых ограничен контроль над любым отдельным хостом. Для отладки вы можете запустить «контейнер администратора» с помощью API Bottlerocket (вызываемого через пользовательские данные или AWS Systems Manager), а затем войти в систему с помощью SSH для расширенной отладки и устранения неполадок. Контейнер администратора представляет собой образ контейнера Amazon Linux 2 и содержит утилиты для устранения неполадок и отладки Bottlerocket и работает с повышенными привилегиями. Он позволяет устанавливать и использовать стандартные инструменты отладки, такие как traceroute, strace, tcpdump. Акт входа в отдельный экземпляр Bottlerocket предназначен для нечастой операции для расширенной отладки и устранения неполадок.
Bottlerocket улучшает операции и управляемость в масштабе, упрощая управление узлами и автоматизацию обновлений узлов в кластере. В отличие от дистрибутивов Linux общего назначения, предназначенных для поддержки приложений, упакованных в различные форматы, Bottlerocket специально создан для запуска контейнеров. Обновления для других дистрибутивов Linux общего назначения применяются для отдельных пакетов, и сложные зависимости между их пакетами могут привести к ошибкам, что затрудняет автоматизацию процесса.
Кроме того, операционные системы общего назначения обладают гибкостью, позволяющей индивидуально настраивать каждый экземпляр в соответствии с его рабочей нагрузкой, что усложняет управление, осуществляемое с помощью традиционных инструментов Linux. Напротив, обновления для Bottlerocket можно применять и откатывать атомарно, что упрощает их автоматизацию, сокращая накладные расходы на управление и сокращая эксплуатационные расходы.
Bottlerocket интегрируется с оркестраторами контейнеров, что позволяет автоматически устанавливать исправления на хостах, чтобы снизить эксплуатационные расходы, управляемость и время безотказной работы. Он разработан для работы с любым оркестратором, а сборки, предоставленные AWS, работают с Amazon EKS (в общедоступной версии) и Amazon ECS (в предварительной версии).
Открытый исходный код проекта Bottlerocket
Мы запустили Bottlerocket как проект с открытым исходным кодом, чтобы позволить нашим клиентам вносить изменения в операционную систему (например, интеграцию с настраиваемыми оркестраторами / ядрами / средами выполнения контейнеров), используемыми для запуска их инфраструктуры, отправлять их для включения в восходящий поток и производить кастомные сборки. Все проектные документы, код, инструменты сборки, тесты и документация будут размещены на GitHub. Мы будем использовать системы отслеживания ошибок и функций GitHub для управления проектами. Вы можете просматривать исходный код Bottlerocket и вносить в него свой вклад, используя стандартные рабочие процессы GitHub. Доступность инфраструктуры сборки, выпуска и тестирования позволяет легко создавать пользовательские сборки, включающие их изменения. Партнеры ISV могут быстро проверить свое программное обеспечение, прежде чем их клиенты обновят до последних версий Bottlerocket.
Мы хотим развивать активное сообщество пользователей и участников, которые принимают и поддерживают Bottlerocket как проект с открытым исходным кодом. Мы считаем, что подход с открытым исходным кодом позволяет нам стимулировать инновации, основываясь на нашем опыте работы с другими проектами с открытым исходным кодом в области контейнеров, такими как containerd, ядро Linux, Kubernetes и Firecracker.
Bottlerocket включает стандартные компоненты с открытым исходным кодом, такие как ядро Linux, среда выполнения контейнера контейнера и т. Д. Добавления, специфичные для Bottlerocket, сосредоточены на надежных обновлениях и механизме на основе API для внесения изменений в конфигурацию и запуска обновлений / откатов. Код Bottlerocket предоставляется по лицензии Apache 2.0 или лицензии MIT по вашему выбору. Базовый сторонний код, такой как ядро Linux, по-прежнему подлежит исходной лицензии. Если вы изменяете Bottlerocket, вы можете использовать «Bottlerocket Remix» для ссылки на свои сборки в соответствии с руководящими принципами политики.
Начало работы с Bottlerocket
Хотя вы можете запускать Bottlerocket как автономную ОС без оркестратора для сценариев разработки и тестирования (с использованием утилит в контейнере администратора для администрирования и обновления Bottlerocket), мы рекомендуем использовать его с оркестратором контейнеров, чтобы воспользоваться всеми его преимуществами. .
Самый простой способ начать — использовать предоставленные AWS образы AMI Bottlerocket с Amazon EKS или Amazon ECS (в предварительной версии). Идентификаторы этих AMI можно найти, запросив SSM с помощью интерфейса командной строки AWS, как показано ниже.
Чтобы найти последний идентификатор AMI для варианта Bottlerocket aws-k8s-1.17, запустите:
В обоих приведенных выше примерах команд вы можете изменить регион, если вы работаете в другом регионе, или изменить архитектуру с x86_64 на arm64, если вы используете экземпляры на базе Graviton.
Получив этот AMI ID, вы можете запустить экземпляр EC2 и подключить его к существующему кластеру EKS или ECS. Чтобы подключиться к кластеру EKS с вариантом Kubernetes для Bottlerocket, вам нужно будет предоставить пользовательские данные, например следующие, при запуске экземпляра EC2:
Чтобы подключиться к кластеру ECS с вариантом ECS для Bottlerocket, вы можете предоставить следующие пользовательские данные:
Дополнительные инструкции по началу работы см. В руководстве по EKS и в руководстве по ECS .
Вклад в Bottlerocket
Помимо использования предоставленных AWS AMI Bottlerocket, вы можете создавать собственные сборки Bottlerocket с вашими собственными изменениями. Для этого вы можете разветвить репозиторий GitHub, внести изменения и следовать нашему руководству по сборке. В качестве обязательного шага вы должны сначала настроить среду сборки. Система сборки основана на языке Rust. Мы рекомендуем вам установить последнюю стабильную версию Rust, используя rustup
. Для организации задач сборки мы используем cargo-make
и cargo-deny
в процессе сборки. Чтобы получить их, запустите:
Bottlerocket использует Docker для организации сборки пакетов и образов. Мы рекомендуем Docker 19.03 или новее. Вам нужно будет установить и запустить Docker с вашей учетной записью, имеющей доступ к Docker API. Обычно это можно сделать, добавив вашу учетную запись пользователя в группу докеров.
Чтобы создать образ, запустите после внесения изменений в исходный код:
Все пакеты будут построены по очереди, а затем скомпилированы в файл img
в каталоге build
/.
Затем, чтобы зарегистрировать AMI Bottlerocket для использования в Amazon EC2, необходимо настроить aws-cli и запустить:
Мы приглашаем вас присоединиться к нам в дальнейшем улучшении Bottlerocket. См. Список проблем с бутылочной ракетой и дорожную карту по бутылочной ракете. Мы приветствуем вклад. Рассмотрение существующих проблем — отличный способ начать вносить свой вклад. См. Подробности в руководстве для авторов.
Мы надеемся, что вы используете Bottlerocket для запуска своих контейнеров, и ждем ваших отзывов!