Skip to content

Flussonic в Kubernetes

В этой статье представлена основная информация по работе с Flussonic в Kubernetes:

Чтобы протестировать Flussonic в Kubernetes и запустить свой первый Pod, перейдите на наш Github и следуйте шагам, описанным в инструкции.

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

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'ы являются взаимозаменяемыми.
  • DaemonSet — объект, декларирующий тип развёртывания в Kubernetes. Он следит, чтобы на каждом Node был запущен ровно один Pod. Его отличие от Deployment состоит в том, что DaemonSet гарантирует уникальность каждого Pod. В DaemonSet Pod'ы имеют свои уникальные идентификаторы, которые совпадают с именем хоста Pod'а. Таким образом, Pod'ы не являются взаимозаменяемыми. DaemonSet подразумевает, что одно и то же имя хоста присваивается Pod независимо от количества перезапусков Pod. Знание об уникальности запущенного Pod для большого количества Pod в кластере является крайне полезным. В контексте Flussonic DaemonSet означает, что будет запущен экземпляр 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.

Особенности запуска Flussonic в Kubernetes

Для запуска 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.