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

Молодой учёный

Оркестрация контейнеров на примере Kubernetes

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


В данной статье приводятся общие принципы настройки кластера 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)
Можно быстро и просто опубликовать свою научную статью в журнале «Молодой Ученый». Сразу предоставляем препринт и справку о публикации.
Опубликовать статью
Ключевые слова
виртуализация
контейнеризация
микросервисы
микросервисная архитектура оркестрация контейнеров
kubernetes
docker
Молодой учёный №51 (341) декабрь 2020 г.
Скачать часть журнала с этой статьей(стр. 11-13):
Часть 1 (стр. 1-69)
Расположение в файле:
стр. 1стр. 11-13стр. 69

Молодой учёный