Оркестрация контейнеров на примере Kubernetes | Статья в журнале «Молодой ученый»

Отправьте статью сегодня! Журнал выйдет 28 декабря, печатный экземпляр отправим 1 января.

Опубликовать статью в журнале

Автор:

Рубрика: Информационные технологии

Опубликовано в Молодой учёный №51 (341) декабрь 2020 г.

Дата публикации: 15.12.2020

Статья просмотрена: 228 раз

Библиографическое описание:

Евстратов, В. В. Оркестрация контейнеров на примере Kubernetes / В. В. Евстратов. — Текст : непосредственный // Молодой ученый. — 2020. — № 51 (341). — С. 11-13. — URL: https://moluch.ru/archive/341/76636/ (дата обращения: 16.12.2024).



В данной статье приводятся общие принципы настройки кластера Kubernetes. Затронуто создание развёртывания (deployment), сервиса (service) и постоянного тома (persistent volume). В конце статьи приведена ссылка на исходный код конфигурации кластера Kubernetes с некоторыми часто используемыми сервисами.

Ключевые слова: виртуализация, контейнеризация, микросервисы, микросервисная архитектура оркестрация контейнеров, kubernetes, docker.

Введение.

Контейнеризация позволяет не затрачивать много ресурсов на запуск множества приложений, которые требуют различного окружения [1].

С ростом потребностей компании и увеличением количества предоставляемых услуг может усложняться система, которые обеспечивает эти потребности / предоставляет услуги.

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

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

В статье будет рассмотрена запуск и настройка основных элементов очень популярного на сегодняшний день [2] оркестратора контейнеров kubernetes. В конце статьи будет дана ссылка на реальную реализацию нескольких сервисов (nginx, WordPress, phpMyAdmin, MySQL, Grafana, InfluxDB и ftps server) в одном кластере.

Перед началом

Для запуска kubernetes на локальной машине необходимо следующее программное обеспечение:

Docker — ПО для создания контейнеров [1], [3].

Minikube — инструмент для создания кластера (среды, в которой будут работать наши контейнеры) на локальном компьютере [4].

Kubectl — инструмент командной строки для управления кластером, с его помощью можно управлять ресурсами кластера, развёртывать (deploy) приложения и смотреть логи [5]. Название можно читать как kube control.

VirtualBox — ПО для виртуализации кластера на локальной машине [ссылка на скачивание ВБ].

Очевидно, что для создания кластера, управляющего контейнерами необходимо иметь образы этих контейнеров. Пример сборки контейнера с помощью docker можно найти тут [1], или тут [6].

Запуск кластера

Кластер создается и запускается очень просто:

minikube start --vm-driver=virtualbox

Здесь мы конкретно указываем, какую виртуальную машину мы используем для виртуализации кластера. Если опустить этот флаг, то по умолчанию виртуальной машиной будет docker. Это не плохо, однако, в этом случае дополнительно придется настраивать взаимодействие виртуальной машины докера с основной ОС. Для VirtualBox’a это делать не нужно.

Создание развёртывания

Кластер kubernetes оперирует подами (pod) — группой из одного или нескольких контейнеров. Развёртывание (deployment) — сущность, которая управляет жизненным циклом одного или нескольких подов.

Создание развёртывания:

kubectl create deployment node --image=image_name

Здесь image_name — имя контейнера, который мы хотим развернуть, node — имя развёртывания.

После создания развертывания внутри кластера появится под, который представляет наш контейнер. К этому поду нельзя подключиться «из вне», у него есть только внутренний IP адрес, доступный изнутри кластера. Для получения доступа к поду необходимо создать сервис (service).

Создание сервиса

Мы можем создать сервис прямо для нашего развёртывания:

kubectl expose deployment node --type=LoadBalancer --port=8080

—-type=LoadBalancer необходимо для того, чтобы кластер понимал, что к данному развертыванию (нашему поду) можно подключиться из вне. --port=8080 явно указывает порт, через который это можно сделать.

Для получения краткой информации о только что созданном сервисе можно воспользоваться командой:

kubectl get services

Использование конфигурационных файлов

В общем случае флагов настройки сервиса и развёртывания может быть очень много и может быть неудобно писать длинные команды чтобы сконфигурировать кластер. Для упрощения этой задачи используются конфигурационные файлы. Файлы используют синтаксис yaml и имеют соответствующее расширение.

Пример конфигурационного файла, который создаёт развёртывание и сервис аналогичные показанным выше, приведен ниже.

apiVersion: apps/v1

kind: Deployment

metadata:

name: node

spec:

template:

spec:

containers:

— name: node

image: image_name

ports:

— containerPort: 8080

—--

apiVersion: v1

kind: Service

metadata:

name: nginx

spec:

type: LoadBalancer

ports:

— port: 8080

Создание постоянного тома

Данные, которые хранятся в контейнере являются эфемерными. После смерти контейнера все хранящиеся на нём данные удаляются. Чтобы была возможность постоянно (независимо от жизненного цикла подов) хранить какие-либо данные, необходимо создать внутри кластера «хранилище» данных, так называемый постоянный том (persistent volume). Вообще говоря, типов «хранилищ» в kubernetes несколько [7], но для создания его на локальном компьютере подойдет persistent volume.

Пример конфигурационного файла persistent volume для mysql:

apiVersion: v1

kind: PersistentVolume

metadata:

name: mysql-pv

labels:

type: local

spec:

storageClassName: mysql

capacity:

storage: 1Gi

accessModes:

— ReadWriteOnce

hostPath:

path: "/tmp/mysql»

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

Заключение

Конкретные примеры создания и настройки сервисов: nginx, WordPress, phpMyAdmin, MySQL, Grafana, InfluxDB и ftps server, — можно посмотреть в github репозитории автора [https://github.com/vesord/ft_services]. Там же можно посмотреть скриншоты того, как выглядит панель управления кластером (запускается командой minikube dashboard).

Дополнительную информацию о kubernetes или о работе с minikube можно найти на официальном сайте www.kubernetes.io.

Литература:

  1. Евстратов В., Контейнеризация как современный способ виртуализации / В. В. Евстратов // Молодой учёный № 49 (339) декабрь 2020.
  2. Почему Kubernetes стал настолько популярен — Текст: электронный // Тараненко П. // URL: https://vc.ru/dev/107126-pochemu-kubernetes-stal-nastolko-populyaren (дата обращения 12.12.2020)
  3. Get Started with Docker. — Текст: электронный // Официальный сайт Docker — URL: https://www.docker.com/get-started (дата обращения 12.12.2020)
  4. Minikube start. — Текст: электронный // Официальный сайт minikube. — URL: https://minikube.sigs.k8s.io/docs/start/ (дата обращения 13.12.2020)
  5. Install and Set Up Kubectl. — Текст: электронный // Официальный сайт Kubernetes. — URL: https://kubernetes.io/docs/tasks/tools/install-kubectl/ (дата обращения 13.12.2020)
  6. Изучаем Docker. — Текст: электронный // Хабр. — URL: https://habr.com/ru/company/ruvds/blog/438796/ (дата обращения 13.12.2020)
  7. Volumes. — Текст: электронный // Официальный сайт Kubernetes. — URL: https://kubernetes.io/docs/concepts/storage/volumes/ (дата обращения 14.12.2020)
Основные термины (генерируются автоматически): кластер, контейнер, конфигурационный файл, локальная машина, локальный компьютер, сервис, система, создание кластера, создание развертывания, том.


Ключевые слова

виртуализация, docker, микросервисы, контейнеризация, микросервисная архитектура оркестрация контейнеров, kubernetes

Похожие статьи

Разработка веб-сервиса для хранения и передачи данных

В данной статье рассматривается процесс разработки веб-сервиса для облачного хранения и передачи данных, описываются основные аспекты создания серверной части с использованием фреймворка Spring и реализации клиентской части с использованием React, а ...

Автоматизация развертывания компонент распределенного приложения современными средствами управления конфигурацией

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

Использование библиотеки CoreUI в приложениях .NET+React.js

В данной научной работе рассматривается использование CoreUI -шаблона панели управления и библиотеки компонентов пользовательского интерфейса, в приложении.NET Core c React.js. Приводится сравнительная характеристика способов подключения библиотеки в...

Systemd и SysVinit: сравнение систем инициализации Linux

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

Требования к разработке специализированных меток для функционирования маркерных приложений с AR-технологией на базе платформы Vuforia

Данная статья посвящена теме разработки и корректуры маркеров для AR-приложений. В настоящей работе отображается процесс взаимодействия с алгоритмом анализа маркеров Vuforia, демонстрируется перечень требований к разработке, а также реализация коррек...

Обзор различных средств фаззинга как инструментов динамического анализа программного обеспечения

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

Hibernate-6: обзор изменений и преимуществ

Современное развитие технологий требует обновления фреймворков. Данная статья анализирует изменения в Hibernate при переходе с 5 на 6 версию. Рассматриваются новые возможности, изменения в API и аннотациях, а также предоставляются практические советы...

Сравнительный анализ производительности сетевых плагинов оркестратора Kubernetes

В статье анализируются сетевые плагины (CNI) в Kubernetes: Flannel, Cilium, Calico и Canal. Представлены описания каждого плагина, их принцип работы. Целью является сравнительный анализ различных параметров, таких как производительность, безопасность...

Адаптивный дизайн в проектировании интерфейсов

В статье описывается разработка мобильных приложений и сайтов. Дается определение языкам, используемым при создании сайта, а также характеристика front-end и back-end разработкам. Подробно рассматривается адаптивный дизайн, выделяются его особенности...

Создание клиент-серверного приложения на основе restful api архитектуры

В данной работе было спроектировано и разработано клиент-серверное приложение с архитектурой Restfull и взаимодействием с клиентом по API. Затронуты проблемы, связанные с проектированием микросервисов и его взаимодействия с клиентом. В качестве клиен...

Похожие статьи

Разработка веб-сервиса для хранения и передачи данных

В данной статье рассматривается процесс разработки веб-сервиса для облачного хранения и передачи данных, описываются основные аспекты создания серверной части с использованием фреймворка Spring и реализации клиентской части с использованием React, а ...

Автоматизация развертывания компонент распределенного приложения современными средствами управления конфигурацией

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

Использование библиотеки CoreUI в приложениях .NET+React.js

В данной научной работе рассматривается использование CoreUI -шаблона панели управления и библиотеки компонентов пользовательского интерфейса, в приложении.NET Core c React.js. Приводится сравнительная характеристика способов подключения библиотеки в...

Systemd и SysVinit: сравнение систем инициализации Linux

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

Требования к разработке специализированных меток для функционирования маркерных приложений с AR-технологией на базе платформы Vuforia

Данная статья посвящена теме разработки и корректуры маркеров для AR-приложений. В настоящей работе отображается процесс взаимодействия с алгоритмом анализа маркеров Vuforia, демонстрируется перечень требований к разработке, а также реализация коррек...

Обзор различных средств фаззинга как инструментов динамического анализа программного обеспечения

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

Hibernate-6: обзор изменений и преимуществ

Современное развитие технологий требует обновления фреймворков. Данная статья анализирует изменения в Hibernate при переходе с 5 на 6 версию. Рассматриваются новые возможности, изменения в API и аннотациях, а также предоставляются практические советы...

Сравнительный анализ производительности сетевых плагинов оркестратора Kubernetes

В статье анализируются сетевые плагины (CNI) в Kubernetes: Flannel, Cilium, Calico и Canal. Представлены описания каждого плагина, их принцип работы. Целью является сравнительный анализ различных параметров, таких как производительность, безопасность...

Адаптивный дизайн в проектировании интерфейсов

В статье описывается разработка мобильных приложений и сайтов. Дается определение языкам, используемым при создании сайта, а также характеристика front-end и back-end разработкам. Подробно рассматривается адаптивный дизайн, выделяются его особенности...

Создание клиент-серверного приложения на основе restful api архитектуры

В данной работе было спроектировано и разработано клиент-серверное приложение с архитектурой Restfull и взаимодействием с клиентом по API. Затронуты проблемы, связанные с проектированием микросервисов и его взаимодействия с клиентом. В качестве клиен...

Задать вопрос