Container Linux (ранее CoreOS Linux ) — это прекращенная разработка облегченной операционной системы с открытым исходным кодом на основе ядра Linux , разработанной для предоставления инфраструктуры для кластерных развертываний. Одним из ее направлений была масштабируемость . Как операционная система, Container Linux предоставляла только минимальную функциональность, необходимую для развертывания приложений внутри программных контейнеров , вместе со встроенными механизмами для обнаружения служб и совместного использования конфигурации. [10] [11] [12] [13] [14]
Container Linux разделяет основы с Gentoo Linux , [15] [16] ChromeOS и ChromiumOS через общий комплект разработки программного обеспечения (SDK). Container Linux добавляет новые функциональные возможности и настройки к этой общей основе для поддержки серверного оборудования и вариантов использования. [13] [17] : 7:02 CoreOS была разработана в первую очередь Алексом Полви, Брэндоном Филипсом и Майклом Марино, [12] а ее основные функции доступны в стабильной версии . [18] [19] [20]
Команда CoreOS объявила об окончании поддержки Container Linux 26 мая 2020 года [1], предложив в качестве замены Fedora CoreOS [ 21] и RHEL CoreOS, обе основаны на Red Hat Enterprise Linux .
Container Linux не предоставляет менеджер пакетов в качестве способа распределения приложений полезной нагрузки, требуя вместо этого, чтобы все приложения запускались внутри своих контейнеров. Выступая в качестве единого управляющего хоста, экземпляр Container Linux использует базовые функции виртуализации на уровне операционной системы ядра Linux для создания и настройки нескольких контейнеров, которые работают как изолированные системы Linux . Таким образом, разделение ресурсов между контейнерами выполняется через несколько изолированных экземпляров пользовательского пространства , вместо использования гипервизора и предоставления полноценных виртуальных машин . Этот подход опирается на функции cgroups и пространств имен ядра Linux , [22] [23], которые вместе предоставляют возможности ограничивать, учитывать и изолировать использование ресурсов ( ЦП , память, дисковый ввод -вывод и т. д.) для наборов процессов пользовательского пространства . [11] [14] [24]
Первоначально Container Linux использовал Docker исключительно в качестве компонента, обеспечивающего дополнительный уровень абстракции и интерфейса [25] для функций виртуализации на уровне операционной системы ядра Linux, а также предоставляющего стандартизированный формат для контейнеров, который позволяет приложениям работать в различных средах. [11] [24] В декабре 2014 года CoreOS выпустила и начала поддерживать rkt (первоначально выпущенный как Rocket ) в качестве альтернативы Docker, предоставляя через него другой стандартизированный формат образов приложений-контейнеров, связанное определение среды выполнения контейнеров и протокол для обнаружения и извлечения образов контейнеров. [26] [27] [28] [29] CoreOS предоставляет rkt как реализацию так называемой спецификации контейнера приложений (appc), которая описывает требуемые свойства образа контейнера приложений (ACI). CoreOS создала appc и ACI как независимый, управляемый комитетом набор спецификаций [30] [31], направленный на то, чтобы стать частью независимой от поставщиков и операционных систем инициативы Open Container Initiative ( OCI), первоначально названной стандартом контейнеризации Open Container Project (OCP) [32] , который был анонсирован [ кем? ] в июне 2015 года. [33] [34] [35]
Container Linux использует скрипты ebuild из Gentoo Linux для автоматизированной компиляции своих системных компонентов, [15] [16] и использует systemd в качестве основной системы инициализации с тесной интеграцией между systemd и различными внутренними механизмами Container Linux. [11] [36]
Container Linux достигает дополнительной безопасности и надежности обновлений своей операционной системы, используя FastPatch в качестве схемы с двумя разделами для части установки, доступной только для чтения, что означает, что обновления выполняются как единое целое и устанавливаются на пассивный вторичный загрузочный раздел , который становится активным после перезагрузки или kexec . Такой подход позволяет избежать возможных проблем, возникающих при обновлении только определенных частей операционной системы, обеспечивает легкий откат к заведомо стабильной версии операционной системы и позволяет подписывать каждый загрузочный раздел для дополнительной безопасности. [11] [14] [37] Корневой раздел и его корневая файловая система автоматически изменяются для заполнения всего доступного дискового пространства при перезагрузках; в то время как корневой раздел предоставляет дисковое пространство для чтения и записи, сама операционная система монтируется только для чтения в /usr . [38] [39] [40]
Чтобы гарантировать, что только определенная часть кластера перезагружается одновременно при применении обновлений операционной системы, сохраняя ресурсы, необходимые для запуска развернутых приложений, CoreOS предоставляет locksmith в качестве менеджера перезагрузки для Container Linux. [41] Используя locksmith, можно выбирать между различными стратегиями обновления, которые определяются тем, как выполняются перезагрузки на последнем этапе применения обновлений; например, можно настроить, сколько членов кластера могут перезагружаться одновременно. Внутри себя locksmith работает как демон locksmithd , который запускается на членах кластера, в то время как утилита командной строки locksmithctl управляет параметрами конфигурации. [42] [43] Locksmith написан на языке Go и распространяется в соответствии с условиями Apache License 2.0 . [44]
Система распространения обновлений, используемая Container Linux, основана на проекте Google с открытым исходным кодом Omaha , который предоставляет механизм для развертывания обновлений и базовый протокол запроса-ответа на основе XML . [6] [45] [46] Кроме того, CoreOS предоставляет CoreUpdate в качестве веб- панели управления обновлениями в масштабах всего кластера. Операции, доступные через CoreUpdate, включают назначение членов кластера в различные группы, которые совместно используют настраиваемые политики обновления, просмотр общекластерных разбивок версий Container Linux, остановку и перезапуск обновлений и просмотр записанных журналов обновлений. CoreUpdate также предоставляет API на основе HTTP , что позволяет интегрировать его в сторонние утилиты или системы развертывания . [37] [47] [48]
Container Linux предоставляет etcd, демон, который работает на всех компьютерах в кластере и предоставляет динамический реестр конфигурации, позволяя легко и надежно совместно использовать различные данные конфигурации между членами кластера. [6] [38] Поскольку данные «ключ-значение», хранящиеся в etcd, автоматически распределяются и реплицируются с помощью автоматизированных выборов главного узла и установления консенсуса с использованием алгоритма Raft , все изменения в хранимых данных отражаются во всем кластере, в то время как достигнутая избыточность предотвращает потерю данных из-за сбоев отдельных членов кластера. [29] [50] Помимо управления конфигурацией, etcd также обеспечивает обнаружение служб , позволяя развернутым приложениям объявлять о себе и предлагаемых ими службах. Связь с etcd осуществляется через открытый API на основе REST , который внутренне использует JSON поверх HTTP; API можно использовать напрямую ( например , через curl или wget ) или косвенно через etcdctl , которая является специализированной утилитой командной строки, также поставляемой CoreOS. [11] [14] [51] [52] [53] etcd также используется в программном обеспечении Kubernetes .
Container Linux также предоставляет диспетчер кластера флота , который управляет отдельными экземплярами systemd Container Linux на уровне кластера. С 2017 года «fleet» больше не разрабатывается активно и устарел в пользу Kubernetes. [54] Используя Fleetd , Container Linux создает распределенную систему инициализации , которая связывает отдельные экземпляры systemd и развертывание etcd на уровне кластера ; [50] внутри демон Fleetd взаимодействует с локальными экземплярами systemd через D-Bus , а с развертыванием etcd — через свой открытый API. Использование Fleetd позволяет развертывать один или несколько контейнеров на уровне кластера с более продвинутыми параметрами, включая избыточность , отказоустойчивость , развертывание на определенных членах кластера, зависимости между контейнерами и групповое развертывание контейнеров. Утилита командной строки под названием Fleetctl используется для настройки и мониторинга этой распределенной системы инициализации; [55] внутри он взаимодействует с демоном Fleetd с помощью API на основе JSON поверх HTTP, который также можно использовать напрямую. При локальном использовании на члене кластера fleetctl взаимодействует с локальным экземпляром Fleetd через сокет домена Unix ; при использовании с внешнего хоста используется туннелирование SSH с аутентификацией, предоставляемой через открытые ключи SSH . [56] [57] [58] [59] [60]
Все вышеупомянутые демоны и утилиты командной строки ( etcd , etcdctl , fleetd и fleetctl ) написаны на языке Go и распространяются на условиях Apache License 2.0. [8] [61]
При запуске на выделенном оборудовании Container Linux может быть либо постоянно установлен на локальном хранилище, таком как жесткий диск (HDD) или твердотельный накопитель (SSD), [62] либо загружен удаленно по сети с использованием Preboot Execution Environment (PXE) в целом или iPXE как одной из ее реализаций. [63] [64] CoreOS также поддерживает развертывания на различных платформах виртуализации оборудования , включая Amazon EC2 , DigitalOcean , Google Compute Engine , Microsoft Azure , OpenStack , QEMU / KVM , Vagrant и VMware . [14] [65] [66] [67] Container Linux также может быть установлен на Citrix XenServer, при этом следует отметить, что «шаблон» для CoreOS существует.
Container Linux также может быть развернут через его коммерческий дистрибутив под названием Tectonic , который дополнительно интегрирует Kubernetes от Google в качестве утилиты управления кластером. По состоянию на апрель 2015 года [обновлять]Tectonic планируется предлагать в качестве бета-версии программного обеспечения для избранных клиентов. [30] [68] [69] Кроме того, CoreOS предоставляет Flannel в качестве компонента, реализующего оверлейную сеть , необходимую в первую очередь для интеграции с Kubernetes. [30] [70] [71]
По состоянию на февраль 2015 года [обновлять]Container Linux поддерживает только архитектуру x86-64 . [6]
После приобретения CoreOS, Inc. [72] в январе 2018 года компания Red Hat объявила [73] , что она объединит CoreOS Container Linux с проектом Red Hat Atomic для создания новой операционной системы Red Hat CoreOS, одновременно объединив сообщество разработчиков ПО с открытым исходным кодом Fedora Project вокруг Fedora CoreOS, объединив технологии обоих предшественников.
6 марта 2018 года Kinvolk GmbH анонсировала [74] Flatcar Container Linux, производную от CoreOS Container Linux. Это отслеживает альфа-, бета- и стабильные выпуски CoreOS, а экспериментальный канал Edge был добавлен в мае 2019 года. [75]
LWN.net сделал обзор CoreOS в 2014 году: [76]
Для тех, кто собирает большие распределенные системы (в качестве примера можно привести веб-приложения), CoreOS, по-видимому, обладает множеством интересных функций. Она должна позволять приложениям такого типа расти и уменьшаться по мере необходимости, а также обеспечивать стабильную платформу, где обновления не являются постоянной головной болью. Для «массовых развертываний серверов» CoreOS или что-то с многими из тех же характеристик выглядит как будущее.
Анонсированный на конференции DockerCon в Сан-Франциско в понедельник, проект Open Container Project (OCP) будет поддерживать и развивать общую среду выполнения контейнеров и формат образов, частично основанный на коде и спецификациях, предоставленных Docker.