Skip to content

Запуск Flussonic в Kubernetes

В этой статье мы разберём простой пример конфигурации Flussonic, необходимый для запуска Flussonic в среде Kubernetes. Вам не понадобятся глубокие познания в Kubernetes и умение им пользоваться. После окончания этого туториала вы узнаете:

  • два способа развёртывания Flussonic в среде Kubernetes:
    • с облачным Kubernetes на DigitalOcean,
    • с локальным Kubernetes в Docker Desktop,
  • создадите свой первый Pod.

Во Flussonic есть различные функции для работы в Kubernetes. В этом документе мы запустим базовый пример для того, чтобы показать вам как ими пользоваться.

Этот документ актуален как для тех, кто только начинает своё знакомство с Kubernetes и хочет попробовать запустить Flussonic в этой среде, так и для тех, кто уже активно использует Kubernetes в своём бизнесе.

Предполагается, что вы имеете опыт работы с Docker, DigitalOcean и Flussonic Media Server.

Note

В этом документе не рассматриваются основы Kubernetes, его настройки и использования. Для этого ознакомьтесь с Kubernetes Overview и Начало работы.

Глоссарий

Этот глоссарий предназначен для тех, кто не знаком с Kubernetes и только начинает своё знакомство с ним. Мы постараемся объяснить вам некоторые термины и понятия Kubernetes так, чтобы вы могли посмотреть на них с другой стороны:

  • Kubernetes (также известный как k8s) — это программа управления кластером, набор стандартов и правил, который позволяет унифицированным способом управлять сложным и динамичным кластером микросервисов. Можно сказать, что Kubernetes — кластерная операционная система.
  • Node (также нода, узел) — машина (виртуальная или физическая) в кластере Kubernetes, на которой и запускаются контейнеры.
  • Pod — это экземпляр программы, запущенной в ОС Kubernetes. Эта программа может состоять из одного или нескольких контейнеров. Pod — мельчайшая единица развёртывания экосистемы Kubernetes. Pod — это группа из одного или нескольких контейнеров, работающих на нодах в кластере Kubernetes. Эта программа может состоять из одного или нескольких контейнеров.
  • Deployment — объект, декларирующий тип развёртывания в Kubernetes. Он следит, чтобы в Kubernetes было запущено необходимое кол-во единообразных Pod. Так, если бы вы захотели запустить несколько Pod, то без Deployment вам бы пришлось вручную определять каждый Pod. Deployment используется для запуска stateless-приложений, т.е. приложений, без отслеживания состояния. Pod'ы в Deployment являются эфемерными, т.е. непостоянными. Это значит, что если Pod упал и перестал работать, то вместо него будет запущен новый Pod, который не будет знать ничего о том Pod, после которого он был запущен. В Deployment Pod'ы являются взаимозаменяемыми.
  • StatefulSet — объект, декларирующий тип развёртывания в Kubernetes. Он так же следит, чтобы в Kubernetes было запущено необходимое кол-во единообразных Pod. Его отличие от Deployment состоит в том, что StatefulSet гарантирует уникальность каждого Pod. В StatefulSet Pod'ы имеют свои уникальные идентификаторы и порядок запуска. StatefulSet гарантирует, что Каждый Pod имеет своё собственное доменное имя и постоянное хранилище. Таким образом, Pod'ы не являются взаимозаменяемыми. StatefulSet подразумевает, что одно и то же доменное имя присваивается Pod независимо от количества перезапусков Pod. Знание об уникальности запущенного Pod для большого количества Pod в кластере является крайне полезным. В контексте Flussonic StatefulSet означает, что будет запущен экземпляр Flussonic со своим лицензионным ключом, на своём доменном имени и со своей конфигурацией.
  • Volume — каталог, смонтированный в контейнере Pod.
  • PersistentVolume (также называемый PV) — дисковое пространство, используемое для хранения данных. Жизненный цикл PersistentVolume не зависит от жизненного цикла использующего его Pod. Поэтому, даже если Pod упадёт и остановит или прекратит свою работу, то PV выживет. В контексте Flussonic, PersistentVolume отлично подходит для записи и хранения архива. В случае с облаком, в качестве PersistentVolume предоставляется облачное хранилище. В случае размещения на своих серверах, PersistentVolume — это диски на конкретной ноде.
  • PersistentVolumeClaim (также называемый PVC) — механизм запроса Pod на PersistentVolume. Pod запрашивает хранилище с помощью PVC. Затем PersisentVolumeClaim пытается найти подходящее хранилище в кластере.
  • ConfigMap — тип volume, содержащий неконфиденциальные данные в виде пар ключ-значение. В контексте Flussonic, в ConfigMap будет храниться статическая конфигурация Flussonic. ConfigMap может быть определён как файл на диске либо через переменные окружения.
  • Secret — тип volume (хранилища), содержащего конфиденциальные данные, такие как имя пользователя, пароль, ключ активации лицензии и т.д. В контексте Flussonic, в Secret будут храниться данные edit_auth: логин и пароль администратора. Secret может быть определён как файл на диске либо через переменные окружения. В отличие от ConfigMap, данные в Secret надёжно спрятаны.
  • Service — объект, позволяющий агрегировать много Pod в одном месте сразу. Он даёт доступ через единую точку входа для разных Pod. Service даёт возможность через себя получить доступ к группе Pod.

Запуск на DigitalOcean Kubernetes

Здесь мы рассмотрим как развернуть Flussonic в среде Kubernetes на DigitalOcean.

Caution

Пример в данной статье только для учебных целей и ни в коем случае не подойдёт для продакшн.

Предварительные требования

Прежде чем начать, вам понадобится:

  • Активная учётная запись на DigitalOcean и персональный API-токен, который вы получите в вашей учётной записи.
  • Установленный kubectl. kubectl — это утилита для управления кластером Kubernetes.
  • Установленный doctl. doctl — это инструмент командной строки для работы с DigitalOcean API.
  • Активная лицензия Flussonic.

Шаг 1. Клонируйте репозиторий на свою локальную машину

Перейдите в наш публичный git-репозиторий и склонируйте его себе локально. Там мы подготовили для вас все необходимые файлы для запуска.

Шаг 2. Авторизуйтесь в вашей учётной записи в Digital Ocean с помощью токена

Чтобы получить доступ к вашей учётной записи в DigitalOcean, запустите в терминале следующую команду:

doctl auth init -t YOUR_TOKEN

где YOUR_TOKEN — это ваш персональный API-токен DigitalOcean.

Шаг 3. Создайте кластер Kubernetes и примените конфигурацию для Pod

Чтобы создать кластер с Pod:

  1. Запустите в терминале скрипт ./start.sh.
  2. Система запросит у вас лицензионный ключ Flussonic. Укажите ваш активный ключ и нажмите Enter.

В результате выполнения скрипта у вас будут созданы:

  • кластер publish-01,
  • объект Secret с записанным в нём лицензионным ключом,
  • Flussonic Pod с конфигурацией по умолчанию*

Caution

Flussonic по умолчанию запускается с логином администратора root и паролем password. Мы настоятельно вам рекомендуем изменить эти настройки перед тем, как запускать Pod в публичной сети. Чтобы узнать как изменить логин и пароль по умолчанию и как устроена конфигурация Flussonic Media Server в Kubernetes, см. О конфигурации Flussonic Pod.

Шаг 5. Выведите информацию о состоянии запущенного Flussonic

Выведите информацию о состоянии запущенного Flussonic Pod следующим образом:

kubectl get service/flussonic

В выводе вы получите что-то вроде:

NAME        TYPE           CLUSTER-IP       EXTERNAL-IP      PORT(S)                       AGE
flussonic   LoadBalancer   10.245.165.235   132.45.123.101   80:31626/TCP,1935:32726/TCP   3m32s

Обратите внимание на External-IP. Он вам понадобится в следующем шаге.

Шаг 6. Откройте UI и проверьте работоспособность сервера Flussonic

Откройте UI во вкладке вашего браузера, используя External-IP, полученный на предыдущем шаге. Введите ваши логин и пароль и убедитесь, что у вас запущен работающий сервер Flussonic.

Поздравляем, вы запустили свой первый Flussonic Pod в среде Kubernetes на Digital Ocean!

Шаг 7. Остановите работу Pod

Чтобы остановить работу Pod и удалить кластер Kubernetes со всеми его файлами, запустите скрипт ./stop.sh в вашем терминале.

Запуск на Docker Desktop

Здесь мы рассмотрим как развернуть Flussonic в среде Kubernetes на Docker Desktop.

Предварительные требования

Прежде чем начать, вам понадобится:

  • Установленный Docker Desktop. Docker Desktop — это настольное приложение, предоставляющее среду для сборки и запуска контейнеризированных приложений. В Docker Desktop уже встроены minikube и kubectl. minikube — это инструмент командной строки для создания и управления Kubernetes-кластером из одной ноды на локальном компьютере. В minikube также встроена среда выполнения контейнеров Docker. kubectl — это утилита для управления кластером Kubernetes.
  • Активная лицензия Flussonic.

Шаг 1. Клонируйте репозиторий на свою локальную машину

Перейдите в наш публичный git-репозиторий и скопируйте его себе локально. Там мы подготовили для вас все необходимые файлы для запуска.

Шаг 2. Создайте кластер Kubernetes

Чтобы создать кластер Kubernetes:

  1. Откройте Docker Desktop.
  2. В открывшемся Docker Dashboard нажмите на иконку Setting, чтобы перейти в настройки.
  3. В левом меню перейдите на вкладку Kubernetes и установите галочку напротив пункта Enable Kubernetes.
  4. Нажмите кнопку Apply & Restart в нижнем правом углу, чтобы сохранить настройки. Затем нажмите Install, чтобы применить их. Это запускает процесс создания кластера на вашей локальной машине.

Как только процесс завершится, вам будут доступны все команды kubectl для управления кластером.

Шаг 3. Создайте Secret с вашим лицензионным ключом

Откройте командную строку и введите следующую команду, чтобы создать Secret с вашим лицензионным ключом:

kubectl create secret generic flussonic-license --from-literal=license_key="YOUR_LICENSE_KEY"

, где YOUR_LICENSE_KEY — ваш активный лицензионный ключ Flussonic.

Шаг 4. Примените конфигурацию для Pod

Чтобы запустить Flussonic Pod с настройками по умолчанию, выполните следующую команду:

kubectl apply -f publish.yaml

Caution

Flussonic по умолчанию запускается с логином администратора root и паролем password. Мы настоятельно вам рекомендуем изменить эти настройки перед тем, как запускать Pod в публичной сети. Чтобы узнать как изменить логин и пароль по умолчанию и как устроена конфигурация Flussonic Media Server в Kubernetes, см. О конфигурации Flussonic Pod.

Шаг 5. Проверьте состояние запущенного Flussonic Pod

Выведите информацию о состоянии запущенного Flussonic Pod следующим образом:

kubectl get service/flussonic

В выводе вы получите что-то подобное:

NAME        TYPE           CLUSTER-IP       EXTERNAL-IP      PORT(S)                       AGE
flussonic   LoadBalancer   10.245.165.235   132.45.123.101   80:31626/TCP,1935:32726/TCP   3m32s

Обратите внимание на External-IP. Он вам понадобится в следующем шаге.

Шаг 6. Откройте UI и проверьте работоспособность сервера Flussonic

Откройте UI во вкладке вашего браузера, используя External IP (в этом случае localhost). Введите ваши логин и пароль и убедитесь, что у вас запущен работающий сервер Flussonic.

Поздравляем, вы запустили свой первый Flussonic Pod в среде Kubernetes на Docker Desktop!

О конфигурации Flussonic Pod

Для запуска Flussonic использует данные, указанные в переменных окружения поля env в конфигурационном файле Pod publish.yaml. Когда речь идёт о конфиденциальных данных, таких как логин и пароль администратора (edit_auth в Flussonic), Kubernetes рекомендует помещать эту информацию в Secrets в виде Base64-строк. Учётные данные извлекаются из Secret и попадают в окружение (поле env).

kind: Secret
metadata:
  name: test-secret
data:
# root:password
  edit_auth: cm9vdDpwYXNzd29yZA==

Для того, чтобы запустить Pod со своими настройками, вам необходимо вместо значений по умолчанию (root:password) подставить в переменную edit_auth ваши логин и пароль администратора в формате Base64-строки.

Концепции конфигурационных файлов для Flussonic Media Server и Kubernetes значительно отличаются. Kubernetes позволяет создать конфигурационный файл Flussonic (flussonic.conf) из каталога конфигурационных файлов, в котором содержатся несколько файлов .conf, представляющих из себя кусочек конфигурационного файла Flussonic (flussonic.conf). Давайте посмотрим, как это выглядит на примере:

kind: ConfigMap
metadata:
  name: streamer-presets
data:
  ports: |
    rtmp 1935;
  vod: |
    file vod {
      storage /opt/flussonic/priv;
    }
  publish: |
    template pub {
      prefix pub;
      url publish://;
    }

В объекте ConfigMap в поле data содержатся кусочки конфига Flussonic, разделённые по смысловым частям (ports, vod и publish). Вы можете заменить эту конфигурацию на свою собственную. Вы также можете задавать части, на которые разбита конфигурация.
Затем эти кусочки конфигурации записываются в файлы .conf. Это определяется в поле volumes -> configMap в секции items.

volumes:
      - name: config-templates
        configMap:
          name: streamer-presets
          items:
          - key: ports
            path: ports.conf
          - key: vod
            path: vod.conf
          - key: publish
            path: publish.conf

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