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] , целью которого было стать частью независимой от поставщика и операционной системы инициативы открытых контейнеров, или 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 год «флот» больше не активно развивается и устарел в пользу Kubernetes . [54] Используя флот , Container Linux создает распределенную систему инициализации , которая связывает воедино отдельные экземпляры systemd и развертывание etcd в масштабе всего кластера ; [50] Внутренне демон флота взаимодействует с локальными экземплярами systemd через D-Bus и с развертыванием etcd через свой открытый API. Использование флота позволяет развертывать один или несколько контейнеров по всему кластеру с более продвинутыми параметрами, включая избыточность , отработку отказа , развертывание на определенных элементах кластера, зависимости между контейнерами и групповое развертывание контейнеров. Утилита командной строки, называемая flowctl , используется для настройки и мониторинга этой распределенной системы инициализации; [55] внутри него он взаимодействует с демоном флота , используя API на основе JSON поверх HTTP, который также можно использовать напрямую. При локальном использовании на члене кластера флотктл взаимодействует с локальным экземпляром флота через сокет домена Unix ; при использовании с внешнего хоста используется туннелирование SSH с аутентификацией, обеспечиваемой с помощью открытых ключей SSH . [56] [57] [58] [59] [60]
Все вышеупомянутые демоны и утилиты командной строки ( etcd , etcdctl , floated и floatctl ) написаны на языке Go и распространяются на условиях лицензии Apache License 2.0. [8] [61]
При работе на выделенном оборудовании Container Linux может быть либо постоянно установлен в локальном хранилище, например, на жестком диске (HDD) или твердотельном диске (SSD) [62] , либо загружен удаленно по сети с использованием среды предварительной загрузки (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 , который дополнительно интегрирует Google Kubernetes в качестве утилиты управления кластером. С апреля 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 с Project Atomic от Red Hat для создания новой операционной системы Red Hat CoreOS, одновременно согласовывая исходную версию Fedora. Проект сообщества открытого исходного кода вокруг Fedora CoreOS, объединяющий технологии обоих предшественников.
6 марта 2018 года компания Kinvolk GmbH анонсировала [74] Flatcar Container Linux, производную от CoreOS Container Linux. Здесь отслеживаются альфа-, бета-версии и стабильные выпуски основного канала CoreOS, а в мае 2019 года был добавлен экспериментальный канал выпуска Edge. [75]
LWN.net рассмотрел CoreOS в 2014 году: [76]
Для тех, кто собирает большие распределенные системы (ярким примером являются веб-приложения), CoreOS, по-видимому, обладает множеством интересных функций. Он должен позволять приложениям такого типа расти и сокращаться по мере необходимости в зависимости от спроса, а также обеспечивать стабильную платформу, обновления которой не станут постоянной головной болью. Для «массового развертывания серверов» будущее за CoreOS или чем-то еще, имеющим многие из тех же характеристик.
Проект Open Container Project (OCP), о котором было объявлено на конференции DockerCon в Сан-Франциско в понедельник, будет поддерживать и развивать общую среду выполнения контейнеров и формат изображений, частично основанный на коде и спецификациях, предоставленных Docker.