Flussonic в Kubernetes¶
В этой статье представлена базовая информация по работе с Flussonic в Kubernetes:
Чтобы протестировать Flussonic в Kubernetes, воспользуйтесь инструкцией по работе с media-server-operator
Этот документ актуален как для тех, кто только начинает своё знакомство с 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
.