<!DOCTYPE article
PUBLIC "-//NLM//DTD JATS (Z39.96) Journal Publishing DTD v1.4 20190208//EN"
       "JATS-journalpublishing1.dtd">
<article xmlns:mml="http://www.w3.org/1998/Math/MathML" xmlns:xlink="http://www.w3.org/1999/xlink" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" article-type="research-article" dtd-version="1.4" xml:lang="en">
 <front>
  <journal-meta>
   <journal-id journal-id-type="publisher-id">Vestnik of Astrakhan State Technical University. Series: Management, computer science and informatics</journal-id>
   <journal-title-group>
    <journal-title xml:lang="en">Vestnik of Astrakhan State Technical University. Series: Management, computer science and informatics</journal-title>
    <trans-title-group xml:lang="ru">
     <trans-title>Вестник Астраханского государственного технического университета. Серия: Управление, вычислительная техника и информатика</trans-title>
    </trans-title-group>
   </journal-title-group>
   <issn publication-format="print">2072-9502</issn>
   <issn publication-format="online">2224-9761</issn>
  </journal-meta>
  <article-meta>
   <article-id pub-id-type="publisher-id">90456</article-id>
   <article-id pub-id-type="doi">10.24143/2072-9502-2024-4-35-43</article-id>
   <article-categories>
    <subj-group subj-group-type="toc-heading" xml:lang="ru">
     <subject>КОМПЬЮТЕРНОЕ ОБЕСПЕЧЕНИЕ И ВЫЧИСЛИТЕЛЬНАЯ ТЕХНИКА</subject>
    </subj-group>
    <subj-group subj-group-type="toc-heading" xml:lang="en">
     <subject>COMPUTER ENGINEERING AND SOFTWARE</subject>
    </subj-group>
    <subj-group>
     <subject>КОМПЬЮТЕРНОЕ ОБЕСПЕЧЕНИЕ И ВЫЧИСЛИТЕЛЬНАЯ ТЕХНИКА</subject>
    </subj-group>
   </article-categories>
   <title-group>
    <article-title xml:lang="en">Using multiple linear regression algorithm  and design patterns to complete Kubernetes cluster configuration files</article-title>
    <trans-title-group xml:lang="ru">
     <trans-title>Использование алгоритма множественной  линейной регрессии и паттернов проектирования  для составления файлов конфигурации кластера Kubernetes</trans-title>
    </trans-title-group>
   </title-group>
   <contrib-group content-type="authors">
    <contrib contrib-type="author">
     <name-alternatives>
      <name xml:lang="ru">
       <surname>Фомин</surname>
       <given-names>Дмитрий Сергеевич </given-names>
      </name>
      <name xml:lang="en">
       <surname>Fomin</surname>
       <given-names>Dmitry Sergeevich </given-names>
      </name>
     </name-alternatives>
     <email>nkfominsa@mail.ru</email>
     <xref ref-type="aff" rid="aff-1"/>
    </contrib>
    <contrib contrib-type="author">
     <name-alternatives>
      <name xml:lang="ru">
       <surname>Бальзамов</surname>
       <given-names>Александр Витальевич </given-names>
      </name>
      <name xml:lang="en">
       <surname>Balsamov</surname>
       <given-names>Alexander Vitalevich </given-names>
      </name>
     </name-alternatives>
     <email>veron13rus@yandex.ru</email>
     <xref ref-type="aff" rid="aff-2"/>
    </contrib>
    <contrib contrib-type="author">
     <name-alternatives>
      <name xml:lang="ru">
       <surname>Савкина</surname>
       <given-names>Анастасия Васильевна </given-names>
      </name>
      <name xml:lang="en">
       <surname>Savkina</surname>
       <given-names>Anastasia Vasilevna </given-names>
      </name>
     </name-alternatives>
     <email>av-savkina@yandex.ru</email>
     <xref ref-type="aff" rid="aff-3"/>
    </contrib>
    <contrib contrib-type="author">
     <name-alternatives>
      <name xml:lang="ru">
       <surname>Федосин</surname>
       <given-names>Сергей Алексеевич </given-names>
      </name>
      <name xml:lang="en">
       <surname>Fedosin</surname>
       <given-names>Sergey Alekseevich </given-names>
      </name>
     </name-alternatives>
     <email>fedosinsa@mrsu.ru</email>
     <xref ref-type="aff" rid="aff-4"/>
    </contrib>
    <contrib contrib-type="author">
     <name-alternatives>
      <name xml:lang="ru">
       <surname>Никулин</surname>
       <given-names>Владимир Валерьевич </given-names>
      </name>
      <name xml:lang="en">
       <surname>Nikulin</surname>
       <given-names>Vladimir Valer'evich </given-names>
      </name>
     </name-alternatives>
     <email>nikulinvv@mail.ru</email>
     <xref ref-type="aff" rid="aff-5"/>
    </contrib>
   </contrib-group>
   <aff-alternatives id="aff-1">
    <aff>
     <institution xml:lang="ru">Национальный исследовательский Мордовский государственный университет им. Н. П. Огарёва</institution>
     <country>Россия</country>
    </aff>
    <aff>
     <institution xml:lang="en">National Research Ogarev Mordovia State University</institution>
     <country>Russian Federation</country>
    </aff>
   </aff-alternatives>
   <aff-alternatives id="aff-2">
    <aff>
     <institution xml:lang="ru">Национальный исследовательский Мордовский государственный университет им. Н. П. Огарёва</institution>
     <country>Россия</country>
    </aff>
    <aff>
     <institution xml:lang="en">National Research Ogarev Mordovia State University</institution>
     <country>Russian Federation</country>
    </aff>
   </aff-alternatives>
   <aff-alternatives id="aff-3">
    <aff>
     <institution xml:lang="ru">Национальный исследовательский Мордовский государственный университет им. Н. П. Огарёва</institution>
     <country>Россия</country>
    </aff>
    <aff>
     <institution xml:lang="en">National  Research Ogarev Mordovia State University</institution>
     <country>Russian Federation</country>
    </aff>
   </aff-alternatives>
   <aff-alternatives id="aff-4">
    <aff>
     <institution xml:lang="ru">Национальный исследовательский Мордовский государственный университет им. Н. П. Огарёва</institution>
     <country>Россия</country>
    </aff>
    <aff>
     <institution xml:lang="en">National Research Ogarev Mordovia State University</institution>
     <country>Russian Federation</country>
    </aff>
   </aff-alternatives>
   <aff-alternatives id="aff-5">
    <aff>
     <institution xml:lang="ru">Национальный  исследовательский Мордовский государственный университет им. Н. П. Огарева</institution>
     <city>Саранск</city>
     <country>Россия</country>
    </aff>
    <aff>
     <institution xml:lang="en">National Research Ogarev Mordovia State University</institution>
     <city>Saransk</city>
     <country>Russian Federation</country>
    </aff>
   </aff-alternatives>
   <pub-date publication-format="print" date-type="pub" iso-8601-date="2024-11-08T07:34:44+03:00">
    <day>08</day>
    <month>11</month>
    <year>2024</year>
   </pub-date>
   <pub-date publication-format="electronic" date-type="pub" iso-8601-date="2024-11-08T07:34:44+03:00">
    <day>08</day>
    <month>11</month>
    <year>2024</year>
   </pub-date>
   <volume>2024</volume>
   <issue>4</issue>
   <fpage>35</fpage>
   <lpage>43</lpage>
   <history>
    <date date-type="received" iso-8601-date="2024-04-10T00:00:00+03:00">
     <day>10</day>
     <month>04</month>
     <year>2024</year>
    </date>
    <date date-type="accepted" iso-8601-date="2024-10-11T00:00:00+03:00">
     <day>11</day>
     <month>10</month>
     <year>2024</year>
    </date>
   </history>
   <self-uri xlink:href="https://vestnik.astu.ru/en/nauka/article/90456/view">https://vestnik.astu.ru/en/nauka/article/90456/view</self-uri>
   <abstract xml:lang="ru">
    <p>Рассматривается проблема конфигурации кластеров Kubernetes. Так как настройки кластера производятся с помощью конфигурационных файлов YAML, содержащих в себе большое количество параметров, ссылок на репозитории (открытые и закрытые) и внешние источники данных, то довольно просто допустить ошибку, которая может привести к существенным издержкам в будущем. Когда все необходимые данные для файла корректно подготовлены, необходимо их правильно скомпоновать в соответствии с синтаксисом разметки YAML. Цель работы – поиск оптимального метода автоматизации построения конфигурационного файла Kubernetes на основе статистических данных. Проведен анализ проблемы конфигурации Kubernetes на основе YAML-файлов и проблемы интерпретации статистических данных в структурированный файл YAML и предложены конкретные методы и подходы по решению указанных проблем. Приводится измененный алгоритм множественной линейной регрессии для работы с собранными статистическими данными, результат выходных данных алгоритма и блок-схема паттерна, адаптированного для построения YAML-файлов. Предложенные подходы позволяют использовать дополнительные инструменты для работы с тестовыми и рабочими кластерами Kubernetes, что позволяет снизить сложность взаимодействия разработчиков с ними и повысить скорость развертывания и масштабируемость. Кроме того, описанные методы позволяют упростить администрирование крупных сетей и автоматизировать процесс создания конфигурационных YAML-фалов для популярных шаблонов программного обеспечения.</p>
   </abstract>
   <trans-abstract xml:lang="en">
    <p>The problem of configuration of Kubernetes clusters is considered. Since cluster settings are made using YAML configuration files containing a large number of parameters, links to repositories (open and closed) and external data sources, it is quite easy to make a mistake that will incur significant costs in the future. When all the necessary data for the file is correctly prepared, it is necessary to arrange them correctly in accordance with the syntax of the YAML markup. The purpose of the work is to search for the optimal method of automati-zation of building a Kubernetes configuration file based on statistical data.The analysis of the Kubernetes configuration problem based on YAML files and the problem of interpreting statistical data into a structured YAML file is carried out and specific methods and approaches to solving these problems are proposed. The modified algorithm of multiple linear regression for working with the collected statistical data, the result of the output data of the algorithm and the flowchart of the pattern adapted for building YAML files are presented. The proposed approaches make it possible to use additional tools to work with Kubernetes test and production clusters, which reduces the complexity of developers' interaction with them and increases deployment speed and scalability. In addition, the described methods make it possible to simplify the administration of large networks and automate the process of creating configuration YAML files for popular software templates.</p>
   </trans-abstract>
   <kwd-group xml:lang="ru">
    <kwd>алгоритм</kwd>
    <kwd>файл</kwd>
    <kwd>конфигурация</kwd>
    <kwd>библиотека классов</kwd>
    <kwd>паттерн</kwd>
   </kwd-group>
   <kwd-group xml:lang="en">
    <kwd>algorithm</kwd>
    <kwd>file</kwd>
    <kwd>configuration</kwd>
    <kwd>class library</kwd>
    <kwd>pattern</kwd>
   </kwd-group>
  </article-meta>
 </front>
 <body>
  <p>ВведениеКонфигурация кластера Kubernetes состоит из нескольких компонентов, каждый из которых имеет свои особенности настройки. Основные принципы конфигурации кластера Kubernetes [1]:1. Иерархическая структура ресурсов: Kubernetes использует иерархическую структуру ресурсов, начиная от кластера и заканчивая отдельными контейнерами. Каждый уровень конфигурации определяет свой контекст и содержит определения других ресурсов.2. Атомарность данных: значения в конфигурации должны быть атомарными, т. е. не должны содержать вложенные структуры данных.3. Инверсия контекста: с помощью символа $ можно ссылаться на другие ресурсы в конфигурации, что позволяет избегать дублирования кода.4. Валидация конфигурации: перед применением конфигурация проверяется на наличие ошибок, чтобы избежать проблем в работе кластера.Эти принципы применимы ко всем уровням конфигурации Kubernetes, начиная от определения Pod и заканчивая настройками кластера.YAML (YAML Ain’t Markup Language) – это язык сериализации данных, который используется для описания структуры объектов и ресурсов в Kubernetes. YAML-файлы имеют определенную структуру и содержат информацию о ресурсах: их название, описание, конфигурацию и зависимости между ними [2].При построении YAML-файла Kubernetes возможны следующие проблемы [3]:– неправильная структура файла: YAML-файлы должны иметь определенную структуру, состоящую из уровней вложенности. Если структура файла нарушена, Kubernetes не сможет его обработать;– ошибки в синтаксисе: YAML – это язык разметки, который требует строгого соблюдения синтаксиса. Ошибки в синтаксисе могут привести к тому, что Kubernetes не сможет прочитать файл конфигурации;– дублирование ключей: в YAML-файлах не допускается дублирование ключей, т. к. это может привести к ошибкам в работе приложения;– использование не валидных значений: некоторые свойства ресурсов в Kubernetes могут принимать только определенные значения. Если используется недопустимое значение, это может вызвать ошибки в работе приложения.При изучении указанных проблем были рассмотрены проблемы конфигурации кластера и определены методы их решения с целью упрощения конфигурации кластера. Проблема конфигурации кластераKubernetes состоит из двух основных объектов: Pod и Service [4]. Pod – это минимальный строительный блок в Kubernetes. Он представляет собой группу контейнеров, которые работают вместе и обеспечивают определенную функцию или сервис. Pod может содержать один или несколько контейнеров, каждый из которых выполняет свою часть приложения.Service – это объект, который обеспечивает внешний доступ к Pod. Он создает виртуальный IP-адрес, который можно использовать для обращения к Pod внутри кластера. Service также может обеспечить балансировку нагрузки, автоматическое масштабирование и отказоустойчивость.Существует несколько видов сервисов. Перечисленные ниже типы для простоты понимания можно рассматривать как «матрешку»: каждый последующий оборачивает предыдущий и добавляет некоторые правила маршрутизации. При создании сервиса более высокого уровня автоматически создаются сервисы нижележащего типа. Рассмотрим следующие типы сервисов [5]:– ClusterIP – тип сервиса, существующий в любом кластере. Единая точка доступа к Pod-элементам по постоянному IP-адресу, доступному только изнутри кластера;– NodePort – общий IP-адрес Pod-элементов (полученный из ClusterIP) соединяется с определенным портом всех Node-элементов, на которых развернуты обслуживаемые Pod-элементы. При этом Pod-элементы становятся доступны по адресу &lt;NodeIP&gt;:&lt;NodePort&gt;;– LoadBalancer – выходной порт NodePort, который присоединяется к внешнему балансировщику нагрузки, предоставляемому облачным провайдером. Таким образом мы получаем статический внешний IP-адрес для нашего приложения.При этом для конфигурации используются следующие объекты [6]:– Namespace – пространство имен. Объекты могут взаимодействовать, только если находятся в одном пространстве имен. С помощью пространств имен возможно развернуть несколько виртуальных кластеров на одном физическом;– ReplicaSet – контроллер, позволяющий создать набор одинаковых Pod-элементов и работать с ними как с единой сущностью. Он поддерживает нужное количество реплик, при необходимости создавая новые Pod-элементы или удаляя старые;– Deployment – контроллер развертывания, являющийся абстракцией более высокого уровня над ReplicaSet&amp;#39;ом. Добавляет возможность обновления управляемых Pod-элементов;– ConfigMap – объект с произвольными конфигурациями, которые могут, например, быть переданы в контейнеры через переменные среды;– Secret – объект с некоей конфиденциальной информацией. Секреты могут быть файлами (SSL-сертификатами), которые монтируются к контейнеру, либо base64-закодированными строками, передающимися через те же переменные среды.Для внесения небольших изменений в объекты действующего кластера можно использовать стандартную веб-консоль Kubernetes Dashboard, но для стартовой настройки всегда необходимо использовать файлы конфигурации формата YAML. На построение синтаксически правильных файлов, как правило, уходит большое количество времени, кроме того, необходимо использовать корректные адреса репозиториев для загрузки образов контейнеров [7]. Алгоритм множественной линейной регрессииТак как файл состоит из структурных стандартизованных блоков определенного типа, наполнение которых зависит от множества других параметров, для автоматизации процесса построения файла можно использовать алгоритм множественной линейной регрессии, применяемый при построении математических моделей для нейронных сетей. Воспользуемся уравнением множественной линейной регрессии, которое имеет следующий вид:y = θ0 + θ1x1 + θ2x2 + … + θjxj + ε,где y – зависимая переменная; θ0 – коэффициент, задающий базовый уровень; θ1, θ2, …, θj – коэффициенты изменения зависимой переменной; x1, x2, …, xj – независимые переменные; ε – коэффициент отклонения фактических данных от прогнозируемых.В отличие от простой линейной регрессии в данном случае несколько признаков x (независимых переменных) и несколько коэффициентов θ.Коэффициент θ0 задает некоторый базовый уровень при условии, что остальные коэффициенты равны нулю и зачастую не имеют смысла с точки зрения интерпретации модели.Параметры θ1, θ2, …, θj показывают изменение зависимой переменной при условии «неподвижности» остальных коэффициентов.Переменная ε (ошибка) представляет собой отклонение фактических данных от прогнозируемых. В этой переменной заложены две составляющие. Во-первых, она может включать вариативность целевой переменной, описанную другими (не включенными в указанную модель) признаками. Во-вторых, «улавливать» случайный шум, случайные колебания [8].В предложенном алгоритме будет использована выборка данных на основе опыта пользователей. Кроме того, будут заданы известные стартовые эталонные данные для корректной работы алгоритма, представленные на рис. 1.  Рис. 1. Пример эталонных данныхдля одного из шаблонов Fig. 1. Example of reference datafor one of the templates Математическая модель содержит в себе следующие переменные:– идентификатор справочника типов объекта Kubernetes (Pod, Service и т. д.);– идентификатор справочника ссылок на репозиторий Docker контейнера;– идентификатор справочника типов модулей, используемых объектами Kubernetes, который представляет собой значение справочника модулей объектов Kubernetes, использующихся при создании кластера;– зависимая переменная, вычисляемая для каждой записи в массиве данных.На рис. 2 представлен пример файла  Kubernetes  с соответствием переменных предикторов с реальными сущностями файла.   Рис. 2. Пример файла конфигурации Kubernetes Fig. 2. Example of Kubernetes configuration file  Перед применением алгоритма множественной линейной регрессии следует убедиться, что данные можно аппроксимировать с помощью линейной модели.Для проверки линейной зависимости достаточно построить диаграмму рассеяния для каждой переменной-предиктора и переменной-ответа. Диаграмма рассеяния, построенная с помощью встроенных инструментов языка программирования R, представлена на рис. 3.   Рис. 3. Диаграмма рассеяния Fig. 3. Scattering diagram  Как видно из диаграммы, каждая переменная-предиктор имеет линейную корреляцию с переменной отклика.Далее можно проверить распределение невязок модели, которое должно быть нормальным. Для этого построим гистограмму остатков математической модели, представленной на рис. 4.    Рис. 4. Гистограмма остатков Fig. 4. Histogram of residuals Хотя распределение немного смещено вправо, оно не настолько ненормально, чтобы вызывать серьезные опасения.Также нужно проверить выполнение условия гомоскедастичности. Чтобы проверить, соблюдается ли это предположение, построим график зависимости подходящего значения от остатка. График представлен на рис. 5.   Рис. 5. График зависимости подходящего значения от остатка Fig. 5. Graph of the dependence of the appropriate value on the remainder  Как видно из графика, разброс имеет тенденцию к увеличению при малых подобранных значениях, но эта закономерность не вызывает большого беспокойства.Для реализации алгоритма множественной линейной регрессии необходима стартовая матрица, состоящая из набора данных, описанного ранее. При этом набор данных запрашивается из заранее подготовленной базы данных по идентификатору справочника типа шаблона Kubernetes. Алгоритм состоит из следующих шагов [9]:1. Исходная матрица транспонируется.2. Транспонированная матрица перемножается с исходной.3. Перемноженная матрица инвертируется.4. Инвертированная матрица перемножается с транспонированной.5. Из матрицы извлекается вектор коэффициента b для линейного уравнения y = b0 x0 + b1 x1 + b2x2 + … + bn xn, где bn – коэффициенты изменения зависимой переменной; xn – независимые переменные на основе выбранных предикторов и зависимой переменной.6. На основании извлеченного вектора b вычисляется зависимая переменная y.Полученные значения зависимой переменной обновляются в базе данных для всех отобранных записей и затем выбираются уникальные записи с самым большим коэффициентом для требуемого шаблона. Затем обработанные данные используем для построения конфигурационного файла Kubernetes.  Результирующий набор данныхВ результате анализа массива данных с помощью алгоритма множественной линейной регрессии, собранных на основе опыта пользователей через web-приложение конструктора YAML-файлов, были составлены наборы объектов Kubernetes для разных шаблонов кластеров. Для каждого шаблона было взято около 500 оценочных значений в виде, представленном на рис. 6.   Рис. 6. Часть массива данных опыта пользователей Fig. 6. Part of the user experience data set Столбец Value содержит рассчитанное значение значимой переменной. Столбцы SourceLinkId, KubernetesModuleTypeId и KubernetesObjectTypeId содержат значения переменных-предикторов.Были отобраны записи с наибольшими значимыми коэффициентами. Шаблоны и наборы объектов представлены в таблице. Выходные данные алгоритмаThe output of the algorithmШаблонТип объектаРепозиторий Docker HubТип модуля объектаЗначение зависимой переменнойSPADeploymentAlpine https://hub.docker.com/_/alpineOS0,69ServiceNGINX https://hub.docker.com/_/nginxWeb server0,505ASP NET Core WebApp SSRDeploymenthttps://hub.docker.com/_/microsoft-dotnet-aspnetOS0,73ServiceNGINX https://hub.docker.com/_/nginxWeb server0,47StatefulSetPostgres https://hub.docker.com/_/postgresDB0,39Secret–API keys0,87ServiceNextJS https://hub.docker.com/r/richardkovacs/nextjsSSR Web server0,45DB ClusterStatefulSetPostgres https://hub.docker.com/_/postgresMaster DB0,92Slave DB0,640,33  Для каждого шаблона отобраны определенные наборы модулей, без которых полноценное функционирование невозможно. Для кластера баз данных (шаблон DB Cluster) необходимы хотя бы один мастер-экземпляр и несколько зависимых. Одностраничному приложению (шаблон SPA) достаточно легковесного Linux дистрибутива Alpine и веб-сервера NGINX для доступа извне. Самым требовательным является полноценное веб-приложение (шаблон ASP NET Core WebApp SSR). Для него была подобрана среда с предустановленным пакетом SDK ASP NET Core, веб-сервер NGINX, база данных Postgres, сервис хранения API-ключей и веб-сервер NextJS для технологии серверного рендеринга контента страницы (SSR) [10]. По оценкам опыта пользователей указанные наборы объектов используют открытый исходный код и являются минимальными и достаточными. Реализация сервиса построения конфигурационного YAML-файла для KubernetesЧтобы интерпретировать полученные данные после обработки алгоритмом в конечный файл конфигурации YAML, можно воспользоваться паттерном «Компоновщик» [11].Паттерн состоит из следующих компонентов:– Component: определяет интерфейс для всех компонентов в древовидной структуре;– Composite: представляет компонент, который может содержать другие компоненты и реализует механизм для их добавления и удаления;– Leaf: представляет отдельный компонент, который не может содержать другие компоненты;– Client: клиент, который использует компоненты.В упрощенной схеме паттерна реализацию компонента Leaf можно опустить при условии, что использоваться будут только составные иерархические объекты [12].Как было сказано ранее, YAML-файл представляет собой иерархическую структуру составных объектов, что полностью совпадает со спецификой и областью применения паттерна «Компоновщик».После выполнения алгоритма множественной линейной регрессии и обновления весовых коэффициентов на основе зависимой переменной из базы данных выбираются уникальные записи с самым большим коэффициентом для требуемого шаблона и передаются в сервис построения конфигурационных файлов Kubernetes. Данный сервис, применяя паттерн «Компоновщик» на основе входных записей требуемых объектов для данного шаблона, собирает конечный YAML-файл для дальнейшего его применения на Kubernetes кластере. Сервис реализован на языке C#. Схема работы реализованного сервиса представлена в виде диаграммы последовательности на рис. 7.   Рис. 7. Схема работы реализованного сервиса Fig. 7. Scheme of operation of the implemented service  В диаграмме отражен основной бизнес-процесс сервиса построения конфигурационного YAML-файла для Kubernetes:1. Пользователь отправляет http-запрос к сервису на формирование конфигурационного сервиса по требуемому шаблону.2. Сервис запрашивает данные из реляционной СУБД, содержащей статистические и структурные данные.3. Найденные данные возвращаются сервису.4. Полученные данные обрабатываются с помощью алгоритма множественной линейной регрессии.5. Рассчитанные коэффициенты записываются в СУБД.6. СУБД возвращает наибольшие коэффициенты для обрабатываемого типа шаблона.7. Применяется паттерн «Стратегия» для вызова класса в соответствии с типом шаблона.8. Применяется паттерн «Компоновщик» для рекурсивного построения конфигурационного файла на основе коэффициентов, полученных в шаге 6.9. Скомпонованный файл возвращается пользователю. ЗаключениеТаким образом, используя алгоритм множественной линейной регрессии, можно добиться автоматизации процесса построения кластеров Kubernetes. Описанный метод позволит снизить временные и человеческие ресурсы, но при этом возрастут требования к производительности сервера, где будут происходить алгоритмические вычисления. При этом важно отметить, что затраты на вычислительные мощности всегда ниже остальных. К тому же, с постоянно обновляющимся массивом данных, основанным на опыте пользователей, сервис обеспечит возможность проводить аналитику удачных решений и применять их в будущем.Описанный метод оптимизации может быть применен в различных сферах деятельности, где используются механизмы Kubernetes, без привязки к специфике и области работы, будь то образовательное учреждение либо коммерческое или государственное предприятие, т. е. метод является универсальным и эффективным средством построения кластеров Kubernetes.Приведенный метод для построения конфигурационных YAML-файлов для Kubernetes позволяет автоматизировать процесс построения YAML-файла Kubernetes, который сводится к подготовке статистических обработанных данных и дальнейшей их интерпретации. Описанный метод построения файлов позволит снизить временные и человеческие ресурсы, кроме этого, возможность ошибки при построении кластера существенно снизится. Сервис компоновщика файлов может быть использован и для построения других форматов файлов, имеющих как иерархическую, так и flat (плоскую) структуру.</p>
 </body>
 <back>
  <ref-list>
   <ref id="B1">
    <label>1.</label>
    <citation-alternatives>
     <mixed-citation xml:lang="ru">Основы Kubernetes. URL: https://habr.com/ru/articles/258443/ (дата обращения: 23.10.2023).</mixed-citation>
     <mixed-citation xml:lang="en">Osnovy Kubernetes. Available at: https://habr.com/ru/articles/258443/ (accessed: 23.10.2023).</mixed-citation>
    </citation-alternatives>
   </ref>
   <ref id="B2">
    <label>2.</label>
    <citation-alternatives>
     <mixed-citation xml:lang="ru">Objects In Kubernetes // Kubernetes. URL: https://kubernetes.io/docs/concepts/overview/working-with-objects (дата обращения: 23.10.2023).</mixed-citation>
     <mixed-citation xml:lang="en">Objects In Kubernetes. Kubernetes. Available at: https://kubernetes.io/docs/concepts/overview/working-with-objects/ (accessed: 23.10.2023).</mixed-citation>
    </citation-alternatives>
   </ref>
   <ref id="B3">
    <label>3.</label>
    <citation-alternatives>
     <mixed-citation xml:lang="ru">Managing YAML Errors for Kubernetes Configura-tion. URL: https://dev.to/olabayobalogun/managing-yaml-errors-for-kubernetes-configuration-k85 (дата обращения: 23.10.2023).</mixed-citation>
     <mixed-citation xml:lang="en">Managing YAML Errors for Kubernetes Configuration. Available at: https://dev.to/olabayobalogun/managing-yaml-errors-for-kubernetes-configuration-k85 (accessed: 23.10.2023).</mixed-citation>
    </citation-alternatives>
   </ref>
   <ref id="B4">
    <label>4.</label>
    <citation-alternatives>
     <mixed-citation xml:lang="ru">Balzamov A. V., Fomin D. S., Savkina A. V., Nikulin V. V., Fedosin S. A. Development of a methodology for migration of monolithic systems to micro-service architecture using cloud technologies // Journal of Physics: Conference Series. 2021. 5. Сер.: 5th International Scientific Conference on Information, Control, and Communication Technologies, ICCT 2021. С. 012036.</mixed-citation>
     <mixed-citation xml:lang="en">Balzamov A. V., Fomin D. S., Savkina A. V., Nikulin V. V., Fedosin S. A. Development of a methodology for migration of monolithic systems to micro-service architecture using cloud technologies. Journal of Physics: Conference Series. 2021. 5. Seriia: 5th International Scientific Conference on Information, Control, and Communication Technologies, ICCT 2021. P. 012036.</mixed-citation>
    </citation-alternatives>
   </ref>
   <ref id="B5">
    <label>5.</label>
    <citation-alternatives>
     <mixed-citation xml:lang="ru">Фомин Д. С., Савкина А. В. Проблемы реализации монолитных систем // XLIX Огаревские чтения: материалы Науч. конф.: в 3 ч. Саранск: Национ. исслед. Мордов. гос. ун-т им. Н. П. Огарёва, 2021. С. 257–263.</mixed-citation>
     <mixed-citation xml:lang="en">Fomin D. S., Savkina A. V. Problemy realizatsii monolitnykh sistem [Problems of implementation of monolithic systems]. XLIX Ogarevskie chteniia: materialy Nauchnoi konferentsii: v 3 ch. Saransk, Natsion. issled. Mordov. gos. un-t im. N. P. Ogareva, 2021. Pp. 257-263.</mixed-citation>
    </citation-alternatives>
   </ref>
   <ref id="B6">
    <label>6.</label>
    <citation-alternatives>
     <mixed-citation xml:lang="ru">Namespaces // Kubernetes. URL: https://kubernetes.io/docs/concepts/overview/working-with-objects/namespaces/ (дата обращения: 24.10.2023).</mixed-citation>
     <mixed-citation xml:lang="en">Namespaces. Kubernetes. Available at: https://kubernetes.io/docs/concepts/overview/working-with-objects/namespaces/ (accessed: 24.10.2023).</mixed-citation>
    </citation-alternatives>
   </ref>
   <ref id="B7">
    <label>7.</label>
    <citation-alternatives>
     <mixed-citation xml:lang="ru">Маркелов А. Введение в технологии контейнеров и Kubernetes. М.: ДМК Пресс, 2019. С. 110–152.</mixed-citation>
     <mixed-citation xml:lang="en">Markelov A. Vvedenie v tekhnologii konteinerov i Kubernetes [Introduction to Container and Kubernetes Technologies]. Moscow, DMK Press, 2019. Pp. 110-152.</mixed-citation>
    </citation-alternatives>
   </ref>
   <ref id="B8">
    <label>8.</label>
    <citation-alternatives>
     <mixed-citation xml:lang="ru">Множественная линейная регрессия. URL: https://www.dmitrymakarov.ru/opt/mlr-04/#9-3-gomoskedastichnost-ostatkov (дата обращения: 25.10.2023).</mixed-citation>
     <mixed-citation xml:lang="en">Mnozhestvennaia lineinaia regressiia [Multiple linear regression]. Available at: https://www.dmitrymakarov.ru/opt/mlr-04/#9-3-gomoskedastichnost-ostatkov (accessed: 25.10.2023).</mixed-citation>
    </citation-alternatives>
   </ref>
   <ref id="B9">
    <label>9.</label>
    <citation-alternatives>
     <mixed-citation xml:lang="ru">Модель множественной линейной регрессии: содержательная интерпретация и предпосылки. URL: https://sun.tsu.ru/mminfo/2016/Dombrovski/book/chapter-3/chapter-3-1.htm (дата обращения: 25.10.2023).</mixed-citation>
     <mixed-citation xml:lang="en">Model' mnozhestvennoi lineinoi regressii: soder-zhatel'naia interpretatsiia i predposylki [Multiple linear regression model: meaningful interpretation and back-ground]. Available at: https://sun.tsu.ru/mminfo/2016/Dombrovski/book/chapter-3/chapter-3-1.htm (accessed: 25.10.2023).</mixed-citation>
    </citation-alternatives>
   </ref>
   <ref id="B10">
    <label>10.</label>
    <citation-alternatives>
     <mixed-citation xml:lang="ru">Дейтрей С., Харрелл Ф. Линейная регрессия с примерами приложений. М.: Вильямс, 2018. 800 с.</mixed-citation>
     <mixed-citation xml:lang="en">Deitrei S., Kharrell F. Lineinaia regressiia s pri-merami prilozhenii [Linear regression with application examples]. Moscow, Vil'iams Publ., 2018. 800 p.</mixed-citation>
    </citation-alternatives>
   </ref>
   <ref id="B11">
    <label>11.</label>
    <citation-alternatives>
     <mixed-citation xml:lang="ru">Гамма Э., Хелм Р., Джонсон Р. Паттерны объектно-ориентированного проектирования. СПб.: Питер, 2021. 142 с.</mixed-citation>
     <mixed-citation xml:lang="en">Gamma E., Khelm R., Dzhonson R. Patterny ob&quot;ektno-orientirovannogo proektirovaniia [Object-oriented design patterns]. Saint Petersburg, Piter Publ., 2021. 142 p.</mixed-citation>
    </citation-alternatives>
   </ref>
   <ref id="B12">
    <label>12.</label>
    <citation-alternatives>
     <mixed-citation xml:lang="ru">Фримен Э., Робсон Э., Сьерра К. Паттерны проектирования. СПб.: Питер, 2021. 640 c.</mixed-citation>
     <mixed-citation xml:lang="en">Frimen E., Robson E., S'erra K. Patterny proektiro-vaniia [Design patterns]. Saint Petersburg, Piter Publ., 2021. 640 p.</mixed-citation>
    </citation-alternatives>
   </ref>
  </ref-list>
 </back>
</article>
