Из ГОСТ Р 70860—2023 Информационные технологии. Облачные вычисления. Общие технологии и методы

6.5 Образы ВМ, метаданные и форматы ГОСТ Р 70860—2023

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

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

Принцип организации образа ВМ заключается в том, что он должен содержать все объекты, необходимые для работы экземпляра ВМ, где образ ВМ используется в качестве входных данных для гипервизора для создания и запуска ВМ. В целом образ ВМ состоит из двух наборов данных: во-первых, метаданных ВМ и, во-вторых, образов дисков. Важно понимать, что существует множество различных форматов как метаданных ВМ, так и образов дисков. Конкретный гипервизор, используемый для создания ВМ, может понимать только определенные форматы метаданных ВМ и образов дисков.

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

Существует множество используемых форматов образов ВМ и дисков, из которых значительная часть является чьей-то собственностью, а другая часть имеет открытый исходный код. Примеры форматов образов ВМ и дисков, созданных на базе отраслевых стандартов:

  • OVF (см. ГОСТ Р ИСО/МЭК 17203 и [3]). Пакет OVF состоит из нескольких файлов, размещенных в одном каталоге. Существует файл дескриптора OVF (с расширением .ovf) с данными в формате XML, описывающими ВМ в пакете, включая метаданные, такие как имя, требования к аппаратному обеспечению и ссылки на другие файлы в пакете. Пакет OVF также содержит один или несколько образов дисков, а также некоторые дополнительные файлы, например файлы сертификатов. Формат образов OVF относительно широко поддерживается как с помощью инструментов импорта/экспорта, так и без их использования;
  • формат диска ИСО — формат архива, используемый для данных, записываемых на оптические диски (см. [3] и [4]). Стандартом файловой системы для оптических дисковых носителей является [3], в основном компакт-дисков. В форматах для DVD-дисков и дисков Blu-ray (BD), как правило, применяют [4] (также известный как Universal Disk Format или UDF), идеально подходящий для (перезаписываемых оптических носителей.

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

Форматы образов ВМ и образов дисков, которые поддерживаются конкретным гипервизором, указаны в документации к гипервизору [из 6.5 Образы ВМ, метаданные и форматы ГОСТ Р 70860—2023]

    7.1 Общие положения ГОСТ Р 70860—2023

    Контейнеры представляют собой технологию, обеспечивающую виртуализированную обработку данных для облачных сервисов. Эта технология относится как к типу инфраструктурных функциональных возможностей, так и к типу платформенных функциональных возможностей облачных сервисов согласно описанию в ГОСТ ISO/IEC 17788 (см. также [1]).

    Контейнеры обеспечивают среду выполнения ПО за счет виртуализации ядра операционной системы, установленной в системе. Контейнеры представляют собой еще один подход к предоставлению среды выполнения ПО с помощью виртуализации вычислительных ресурсов. Контейнеры подразумевают виртуализацию ядра ОС, в отличие от виртуализации аппаратного обеспечения, как в случае с ВМ. Цель контейнеров — обеспечить нескольким различным наборам ПО возможность работать одновременно в одной системе, не мешая друг другу, благодаря безопасному разделению ресурсов системы.

    Облачный сервис, поддерживающий контейнеры, позволяет CSU загружать ПО из образа контейнера и запускать его в контейнере в системе CSP. Управление контейнером осуществляет либо CSP, либо CSU, в зависимости от типа функциональных возможностей облачного сервиса. В любом случае, как правило, управление осуществляется с помощью CMS (см. 7.4) [из 7.1 Общие положения ГОСТ Р 70860—2023]

      7.2.1 Описание контейнеров ГОСТ Р 70860—2023

      Контейнер представляет собой изолированную среду выполнения для работы ПО, использующую ядро виртуализированной ОС. Контейнеры работают в ОС, которая называется ОС хоста.

      Как указано в 6.2, ВМ представляет собой виртуализированную версию аппаратного обеспечения для ПО, находящегося внутри ВМ. Доступ к виртуализированным аппаратным ресурсам контролируется, и ПО внутри ВМ получает возможность видеть и использовать только контролируемую и ограниченную версию этих ресурсов (например, ограниченное количество процессоров, ограниченное количество вычислительных потоков, ограниченный объем оперативной памяти).

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

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

      На рисунке 3 показаны три контейнера, работающие на базе аппаратного обеспечения системы. Физическая система имеет свою собственную ОС хоста. Каждый контейнер содержит собственное прикладное ПО (приложение х) и запускает это ПО в одном или нескольких процессах ОС, используя такие ресурсы, как оперативная память, процессор, система хранения данных и сетевые компоненты, изолированно от других контейнеров, работающих на той же системе, но все они совместно используют ядро ОС хоста.

      Ядро ОС хоста используется всеми контейнерами совместно, поэтому ОС, используемая ПО в контейнерах, должна быть совместима с ядром ОС хоста. Благодаря этому различные контейнеры смогут использовать различные варианты ОС Linux, если ОС хоста является, например, одной из версий ОС Linux, но ОС Windows невозможно будет использовать в контейнере, если ОС хоста является одной из версий ОС Linux (и наоборот).

      Контейнеры создаются и управляются с помощью контейнерной службы, которая запускается как отдельный процесс в ОС хоста.

      - 76606

      Рисунок 3 — Виртуализация контейнеров

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

      ОС хоста, используемая контейнерами, может работать внутри ВМ, а не на базе физического аппаратного обеспечения. ПО, работающее в контейнерах, не знает, запущена ли ОС хоста на ВМ или нет [из 7.2.1 Описание контейнеров ГОСТ Р 70860—2023]

        7.2.2 Контейнерная служба ГОСТ Р 70860—2023

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

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

        Контейнерная служба поддерживает следующий набор операций с контейнерами:

        • Create: эта операция создает новый контейнер. Эта операция ссылается на используемый образ контейнера, созданный в доступном ОС хоста каталоге файловой системы (называемом bundle). При создании контейнера выделяется набор ресурсов для него и выполняются соответствующие настройки согласно метаданным контейнера, хранящимся в пакете. Контейнеру присваивается уникальный идентификатор, по которому на него впоследствии можно ссылаться;
        • Start: эта операция запускает контейнер путем выполнения прикладной программы, заданной для контейнера, с любыми параметрами согласно его метаданным;
        • Kill: эта операция останавливает программу(ы), запущенную(ые) в контейнере. Как правило, путем отправки определенного сигнала процессу, запущенному в контейнере;
        • Delete: эта операция удаляет ресурсы, выделенные контейнеру, и уничтожает контейнер. Уникальный идентификатор больше не идентифицирует контейнер, хотя этот же идентификатор может быть использован позже для создания нового контейнера.

        Контейнерная служба обычно также обеспечивает интерфейс событий, который позволяет ему сообщать о важных событиях, связанных с управляемыми им контейнерами. Интерфейс событий позволяет одному или нескольким компонентам клиентского ПО отслеживать определенные события и реагировать на них [из 7.2.2 Контейнерная служба ГОСТ Р 70860—2023]

          7.2.3 Ресурсы контейнеров, изоляция и контроль ГОСТ Р 70860—2023

          Контейнер обеспечивает изолированную среду выполнения ПО, которая контролирует ресурсы.

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

          Контроль ресурсов означает, что набор ресурсов, доступных ПО в контейнере, выделяется контейнеру (контейнерной службе) при его создании, причем эти ресурсы являются ограниченными и отслеживаются. Сюда входит выделение ресурсов процессора, рабочей памяти, сетевых ресурсов, одной или нескольких файловых систем. С точки зрения ПО, существуют только эти ресурсы. Ресурсы распределяются таким образом, что ресурсы, выделенные одному контейнеру, не могут взаимодействовать с ресурсами, выделенными другим контейнерам, работающим на той же системе.

          Изоляция и контроль ресурсов обеспечиваются с помощью функциональных возможностей ОС хоста, которые используются и управляются с помощью контейнерной службы. Конкретные функциональные возможности, доступные для контейнеров и используемые ими, зависят от ОС. Функциональные возможности, доступные в ОС Linux, описаны в настоящем стандарте в качестве примера. Дополнительная информация об аналогичных функциональных возможностях других систем приведена в соответствующей документации по этим системам.

          Для доступа к блочному вводу/выводу контейнер по умолчанию имеет доступ к файловой системе, состоящей из образа контейнера, использованного для создания контейнера в режиме «только для чтения», плюс уровень контейнера для чтения/записи. Файловая система по умолчанию является временной, и уровень контейнера удаляется при удалении контейнера. Дополнительные, обычно постоянные, ресурсы для хранения данных могут стать доступны ПО внутри контейнера за счет настройки конфигурации контейнера контейнерной службой — либо в виде дополнений файловой системы внутри контейнера, внесенных из другого места вне контейнера, либо посредством предоставления одного или нескольких сервисов хранения (как правило, облачных). Такие дополнительные средства хранения необходимы, если ПО в контейнере должно иметь возможность обращаться к объектам хранения, имеющим длительный жизненный цикл. Во всех случаях видимое расположение файлов и объектов хранения внутри контейнера сопоставляется с реальным расположением за пределами контейнера.

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

          Порты, открытые контейнером, можно контролировать и сопоставлять с сетевыми адресами и портами, видимыми извне. Например, контейнер может открыть порт 80 для HTTP-трафика, но он может быть сопоставлен с портом 8080 для внешнего доступа (например, Интернета). В целом можно контролировать и сопоставлять IP-адреса, порты, имена хостов, МАС-адреса, службы маршрутизации и службы DNS.

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

          В ОС Linux контроль над ресурсами осуществляется с помощью функциональной возможности, называемой контрольными группами или cgroups. Она обеспечивает контроль над ресурсами, доступными наборам процессов, включая процессор, память, ввод/вывод на блочные устройства (т. е. файловые системы), доступ к устройствам, сетевое подключение.

          В ОС Linux изоляция реализуется с помощью пространств имен. Таким образом, любые ресурсы, к которым обращается один контейнер, являются частью одного пространства имен, в то время как ресурсы, к которым обращаются другие контейнеры, относятся к другим пространствам имен. Пространства имен работают таким образом, что ПО, работающее в процессе, который был запущен в одном пространстве имен, может «видеть» только ресурсы в этом пространстве имен.

          В ОС Linux существуют следующие виды пространств имен (начиная с ядра Linux 4.10):

          • Interprocess Communication (ipc): относится к межпроцессному взаимодействию. Только процессы в одном и том же пространстве имен могут обмениваться данными (например, выделять общую память);
          • Mount (mnt): относится к точкам монтирования, т. е. местам, куда монтируются (дополнительные) файловые системы. Начальный набор для монтирования доступен при создании контейнера контейнерной службой, но после этого любые новые монтирования будут видны только внутри контейнера;
          • Network (net): содержит ресурсы, связанные с сетью, такие как интерфейсы, IP-адреса, таблица маршрутизации, список сокетов, таблица отслеживания соединений и т. д.;
          • Process ID (pid): содержит набор идентификаторов процессов; первый процесс в пространстве имен имеет идентификатор 1, и этот процесс имеет специальный режим, аналогичный процессу init в базовой ОС;
          • User ID (user): предоставляет идентификаторы пользователей, позволяющие как идентифицировать пользователя, так и контролировать привилегии: пространство имен пользователей сопоставляет идентификаторы пользователей в пространстве имен с идентификаторами пользователей в базовой системе, что позволяет тщательно контролировать привилегии и обеспечить более высокие привилегии в пространстве имен, которые не предоставляются для каких-либо ресурсов вне этого пространства имен;
          • UTS: дает возможность различным процессам иметь разные имена хостов и доменов.

          Совместное использование cgroups и пространств имен обеспечивает контроль ресурсов и изоляцию, необходимую для контейнеров [из 7.2.3 Ресурсы контейнеров, изоляция и контроль ГОСТ Р 70860—2023]

            7.3.1 Назначение и содержание образа ГОСТ Р 70860—2023

            Образ контейнера представляет собой исполняемый пакет, который содержит все необходимое для работы ПО, например приложение или микросервис. Это может быть программный код самого приложения, среда выполнения, библиотеки, переменные среды, файлы конфигурации и другие метаданные, используемые приложением. Цель состоит в том, чтобы образ контейнера описывался самостоятельно и был инкапсулированным, в результате чего у контейнерной службы появилась бы возможность заимствовать образ контейнера и создать из него контейнер без дополнительных зависимостей от базовой системы (независимо от инфраструктуры) и независимо от содержимого образа контейнера (независимо от содержимого).

            Образ контейнера содержит наборы файлов, которые содержат программный код приложения, его зависимости и другие файлы и метаданные, используемые приложением. Образ контейнера также содержит структурированные метаданные о содержимом образа контейнера и о том, как преобразовать это содержимое в контейнер. Метаданные контейнера могут варьироваться в зависимости от конкретного формата образа контейнера. Например, они могут включать в себя следующее:

            • указатель образа. Метаданные «верхнего уровня», которые предназначены для образов контейнеров, поддерживающих несколько различных платформ (иногда их называют fat-мэнифестом). Если поддерживается несколько платформ, для каждой платформы существует свой собственный образ, содержащий программные компоненты, которые необходимо использовать при работе контейнера на этой платформе. По сути, указатель образа ссылается на один или несколько манифестов образов;
            • манифест образа. Содержит информацию одного образа контейнера для конкретной архитектуры процессора и ОС, состоящего из конфигурации и набора уровней;
            • расположение образа. Конкретное расположение каталогов и файлов внутри образа с метаданными об уровнях файловой системы;
            • уровни файловой системы. Одна или несколько упорядоченных файловых систем (т. е. структура каталогов и файлов) и изменения в файловой системе (удаленные или обновленные файлы). Уровни накладываются друг на друга для создания полной файловой системы в работающем контейнере (см. 7.3.2 для получения дополнительной информации об уровнях файловой системы).

            Функциональные возможности указателя образа и fat-мэнифестов позволяют одному образу контейнера обеспечить поддержку образов, характерных для конкретной платформы. Платформа может содержать тип процессора (архитектура ПК), тип ОС и ее уровень. Таким образом, один образ контейнера может быть структурирован так, чтобы обеспечить доставку и развертывание одного и того же приложения на нескольких различных целевых системах.

            Одно из характерных свойств метаданных контейнера, содержащихся в образах контейнеров, заключается в том, что они предоставляют расширенные функции обеспечения безопасности, призванные предотвратить подделку содержимого образа контейнера с момента его создания. Записывается длина данных, а также их дайджесты (по сути, это устойчивый к конфликтам криптографический хеш байтов данных). Соответствующими данными могут быть содержимое уровней файловой системы или элементы метаданных. Дайджест может также служить уникальным идентификатором содержимого, который также может использоваться для доступа к данным с возможностью адресации содержимого. Отдельная безопасная передача дайджеста пользователю образа контейнера позволяет проверить содержимое образа контейнера, даже если оно получено из ненадежного источника [из 7.3.1 Назначение и содержание образа ГОСТ Р 70860—2023]

              7.3.2 Многоуровневая файловая система ГОСТ Р 70860—2023

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

              Многоуровневая файловая система представляет собой подход к созданию содержимого файловой системы, используемой контейнером. Принцип заключается в том, что содержимое файловой системы строится как набор уровней, каждый из которых содержит определенный набор каталогов и файлов, и все из них имеют общий корневой каталог. Каталоги и файлы передаются с каждого уровня по очереди, начиная с базового нижнего уровня и продвигаясь к верхним. Каждый последующий уровень может не только добавлять новые файлы, но также может заменять файл нижнего уровня файлом другой версии или даже удалять («уничтожать») файл нижнего уровня.

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

              В качестве примера рассмотрим приложение node.js. Программный код приложения node.js может находиться в файле сценария app.js, а также в других файлах сценария, файлах данных и файлах конфигурации. Приложение node.js имеет зависимость от среды выполнения node.js и ряда (внешних) пакетов. В свою очередь, среда выполнения node.js зависит от различных библиотек ОС.

              В образе контейнера для приложения node.js это может быть отображено с помощью трех уровней (начиная с самого верхнего):

              • сценарий app.js и связанные с ним программные компоненты составляют самый верхний уровень;
              • среда выполнения node.js и связанные с ней пакеты образуют следующий уровень;
              • библиотеки ОС образуют нижний уровень.

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

              Разделение на уровни позволяет организовать эффективный процесс построения (создания) образов контейнеров. Можно создать образ контейнера с одним уровнем, содержащим все необходимые файлы, но гораздо эффективнее будет разделить программный стек, используемый приложением, на отдельные уровни. Это связано с тем, что приложение и все его зависимости обычно представляют собой отдельные независимые наборы файлов, что описывается в примере на основе приложения node.js.

              Образ контейнера может быть создан с использованием другого образа контейнера в качестве основы (или родительского объекта). Поэтому, если снова обратиться к примеру с приложением node.js, первым созданным образом контейнера может быть образ для ОС. Затем можно создать второй образ контейнера для среды выполнения node.js и связанных с ней пакетов, используя образ ОС в качестве родительского объекта. Наконец, третий образ контейнера может быть создан для приложения app.js с использованием в качестве родительского объекта среды выполнения node.js. Родительские образы создают нижние уровни для нового образа, построенного поверх них. Поэтому в этом примере библиотеки ОС становятся самым нижним уровнем, среда выполнения node.js — средним уровнем, а приложение app.js — самым верхним уровнем.

              Такая модель организации позволяет каждому образу решать только свои собственные задачи. Например, если среде выполнения node.js не нужны все файлы из библиотек ОС, она может удалить ненужные файлы. Таким образом, при создании образа контейнера основной вопрос заключается в том, какой (какие) базовый(ые) образ(ы) использовать.

              Многоуровневая организация файловой системы также применяется и к контейнерам, но с одним отличием. Когда контейнер создается из образа контейнера, формируются те же уровни файловой системы, что и в образе контейнера, но они рассматриваются как доступные только для чтения. Эти уровни называются уровнями образа. Приложение, работающее в контейнере, не может изменять файлы на уровнях образа. Однако поверх уровней, присутствующих в образе контейнера, добавляется дополнительный записываемый уровень — он называется уровнем контейнера (в отдельных контейнерных средах он называется уровнем «песочницы»). Все изменения в файлах, внесенные работающим в контейнере приложением, записываются на уровне контейнера, будь то создание новых файлов, изменение существующих или удаление ненужных файлов. Это подразумевает принцип копирования при записи для файлов в контейнере.

              В результате использования уровней образа, предназначенных только для чтения, и принципа копирования при записи уровни образа могут совместно использоваться различными контейнерами. Это позволяет экономить на хранении данных и памяти во время выполнения и сократить время запуска контейнеров [из 7.3.2 Многоуровневая файловая система ГОСТ Р 70860—2023]

                Страницы

                Подписка на Из ГОСТ Р 70860—2023 Информационные технологии. Облачные вычисления. Общие технологии и методы