Kubernetes

обучение kafka, курсы kafka, курсы администраторов, kafka для начинающих

Kubernetes — открытое программное обеспечение (open-source) для развертывания распределенных приложений и управления ими. Kubernetes (K8s) также является платформой для организации вычислительного кластера. Система K8s реализует архитектуру «ведущий-ведомый» (master-slave), в которой выделяется «ведущая» (master) подсистема управления основным кластером. К основному кластеру прилегают «ведомые» (slave) узлы (узлы Kubernetes), которые хранят информацию о конфигурации этого кластера.

обучение kafka, курсы kafka, курсы администраторов, kafka для начинающих
Структура Kubernetes

 

Что такое подсистема управления Kubernetes: основные компоненты

Подсистема управления — это составной элемент архитектуры K8s, отвечающий за распределение нагрузки и коммуникацию узлов внутри кластера. Компоненты подсистемы управления могут выполняться на одном или нескольких параллельно работающих ведущих узлах (узлах кластера). В подсистему управления входят следующие элементы:

  1. Сервер API — это ключевой компонент подсистемы управления, используемый для организации доступа к функциям (например, маршрутизация по запросу и балансировка нагрузки в кластере) платформы K8s.
  2. Под (pod) — это базовая единица для управления и запуска приложений, которая представлена в виде совокупности контейнеров, запускающихся одновременно на одном узле и хранящими информацию о процессах, запущенных в узле.
  3. Планировщик (scheduler) — это компонент подсистемы управления, который решает, на каком узле должен выполняться конкретный под. Планировщик отслеживает использование ресурсов на каждом из узлов, обеспечивая распределение нагрузки так, чтобы она не превышала доступный объем ресурсов.
  4. Контроллер — это процесс, который отвечает за управление состоянием кластера. Управление состоянием кластера достигается посредством оперирования набором подов, который определяется с помощью селекторов меток, являющихся частью контроллера. Выполнение контроллеров обеспечивается менеджером контроллеров K8s Controller Manager. Контроллеры взаимодействуют с сервером API, создавая, обновляя и удаляя необходимые ресурсы (например, поды и различные точки входа).
  5. Менеджер контроллеров (controller manager) — это компонент, который отвечает за выполнение основных контроллеров платформы Kubernetes (например, DaemonSet Controller и Replication Controller).
  6. Kubectl — это интерфейс командной строки, отвечающий за управление ресурсами, подконтрольными Kubernetes [1].

Как появился Kubernetes: краткая история

Разработка K8s началась в 2010 году разработчиками Google Джо Бедой, Брендоном Бернсом и Крэйгом Маклаки. Это обуславливалось ростом облачного бизнеса в этот период. И уже 7 июня 2014 года были опубликованы исходные коды проекта. Первоначально проект имел название Project Seven. 21 июля 2015 года официально выпущена версия Kubernetes 1.0. Это послужило поводом для партнерства Google и Linux Foundation. Результатом этого партнерства стало создания фонда для продвижения контейнерных технологий Cloud Native Computing Foundation (CNCF), которому Google передала Kubernetes в качестве начального технологического вклада. Последняя версия Kubernetes (1.19.4) вышла 11 ноября 2020 года [2].

 

Apache Kafka в кластере Kubernetes

Одна из главных причин развертывания Kafka-приложений с помощью K8s — это простота масштабирования: для добавления новых брокеров необходимо всего лишь ввести нужную команду в командной строке или файле конфигурации. Это облегчает изменения конфигурации, обновления и перезапуск целого кластера. Чтобы настроить конфигурацию Kafka-кластера в K8s, необходимо создать ансамбль (совокупность сервисов) для развертывания ZooKeeper. Это можно через командную строку K8s следующим образом [3]:

apiVersion: v1
kind: Service
metadata:
name: zk-hs
labels:
app: zk
spec:
ports:
- port: 2888
name: server
- port: 3888
name: leader-election
clusterIP: None
selector:
app: zk
containers:
- name: kubernetes-zookeeper
imagePullPolicy: Always
image: "k8s.gcr.io/kubernetes-zookeeper:1.0-3.4.10"
resources:
requests:
memory: "1Gi"
cpu: "0.5"
ports:
- containerPort: 2181
name: client
- containerPort: 2888
name: server
- containerPort: 3888
name: leader-election
command:
- -c
- "start-zookeeper \
--servers=3 \
--data_dir=/var/lib/zookeeper/data \
--data_log_dir=/var/lib/zookeeper/data/log \
--conf_dir=/opt/zookeeper/conf \
--client_port=2181 \
--election_port=3888 \
--server_port=2888 \
--tick_time=2000 \
--init_limit=10 \
--sync_limit=5 \
--heap=512M \
--max_client_cnxns=60 \
--snap_retain_count=3 \
--purge_interval=12 \
--max_session_timeout=40000 \
--min_session_timeout=4000 \
--log_level=INFO"
readinessProbe:
exec:
command:
- sh
- -c
- "zookeeper-ready 2181"
initialDelaySeconds: 10
timeoutSeconds: 5
livenessProbe:
exec:
command:
- sh
- -c
- "zookeeper-ready 2181"
initialDelaySeconds: 10
timeoutSeconds: 5
volumeMounts:
- name: datadir
mountPath: /var/lib/zookeeper
securityContext:
runAsUser: 1000
fsGroup: 1000
volumeClaimTemplates:
- metadata:
name: datadir
spec:
accessModes: [ "ReadWriteOnce" ]
resources:
requests:
storage: 10Gi

Затем через утилиту Kafka Bridge развернуть Kafka-кластер:

apiVersion: kafka.strimzi.io/v1alpha1
kind: KafkaBridge
metadata:
name: my-bridge
spec:
replicas: 1
bootstrapServers: my-cluster-kafka-bootstrap:9092
http:
port: 8080

Однако, несмотря на преимущество настройки и эксплуатационного сопровождения, развертывание Kafka-кластера через Kubernetes имеет следующие недостатки:

  • потеря данных контейнера при перезапуске кластера — для сохранения данных требуется дополнительное хранилище данных (желательно отдельный нелокальный узел), чтобы K8s мог обратиться к нему после перезапуска с целью полного восстановления данных;
  • снижение производительности кластера — брокер Kafka потребляет большое количество оперативной памяти, поскольку он использует страничный кэш при записи блоков файлов. Также при работе с шифрованием клиенты Kafka могут сильно нагружать центральный процессор (CPU) [4].

Тем не менее, несмотря на отмеченные недостатки, платформа K8s является весьма полезным средством для организации вычислительного кластера распределенных приложений. K8s позволяет брокеру Kafka более эффективно вести работу с большими массивами данных и упрощает организацию процесса распределенных вычислений. Это делает Kubernetes неотъемлемой частью технологий работы с большими данными, включая Apache Kafka и другие технологии Big Data.

Записаться на курс

Смотреть раcписание

Источники

  1. https://ru.wikipedia.org/wiki/Kubernetes
  2. https://ru.bmstu.wiki/Kubernetes
  3. https://kubernetes.io/docs/tutorials/stateful-application/zookeeper/
  4. https://habr.com/ru/company/piter/blog/462257/

Поиск по сайту