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

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

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

Автор:

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

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

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

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

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

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



В данной статье приводятся общие принципы настройки кластера 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
Задать вопрос