Легкое развертывание ClickHouse на Kubernetes: подробная инструкция
В постоянно развивающемся мире аналитики данных ClickHouse стал эталоном эффективности и производительности. Эта колоночно-ориентированная база данных с открытым исходным кодом – одно из лучших решений по быстрой обработке огромных объемов данных. Но что действительно выгодно отличает ClickHouse от других подобных решений, так это ее бесшовная интеграция с Kubernetes, оркестратором для масштабируемых приложений. Сегодня мы попробуем разобраться в том, как легко и просто развернуть ClickHouse в среде Kubernetes.
На стыке инноваций: ClickHouse и Kubernetes
Почему именно ClickHouse? Это мощная машина для обработки аналитических запросов к огромным массивам данных. Будь то небольшой стартап или крупное предприятие, ClickHouse прекрасно масштабируется в соответствии с любыми потребностями в данных.
А Kubernetes? Это один из самых популярных и эффективных оркестраторов процессов по работе с данными, который управляет и масштабирует наши приложения словно по взмаху волшебной палочки.
Объединение этих двух сил можно сравнить с формированием команды мечты для Вашей инфраструктуры данных.
Подготовка к развертыванию: что важно знать
Прежде чем приступить к работе, давайте подготовимся:
- Убедитесь в том, что кластер Kubernetes запущен и работает.
- Ознакомьтесь с основными концепциями Kubernetes: Развертывание, PV (Persistent Volumes), PVC (Persistent Volume Claims), Сервисы и ConfigMaps.
- У Вас под рукой должен быть kubectl, инструмент командной строки Kubernetes..
План: развертывание ClickHouse на Kubernetes
Наш план:
- Заложить основу с помощью PV и PVC: эти объекты Kubernetes являются базой для сохранения данных.
- Оживление конфигураций с помощью ConfigMap: ConfigMap - это место, где хранятся файлы конфигурации ClickHouse.
- Развертывание ClickHouse: или «оживление» ClickHouse на кластере Kubernetes. Мы определим развертывание, которое описывает, как должен работать ClickHouse.
- Создание соединений с помощью сервиса: служба Kubernetes Service выступает в качестве шлюза для нашего развертывания ClickHouse и обеспечивает готовность к быстрой обработке запросовк данным, содержащимся в СУБД.
Пошаговая инструкция: развертываем ClickHouse, как самые настоящие профессионалы
Неразлучная парочка: PV и PVC
В первую очередь нужно заложить основу, а именно: для обеспечения пространства хранения необходимо создать PersistentVolume (pv.yaml), а для требования этого пространства - PersistentVolumeClaim (pvc.yaml)
kubectl apply -f pv.yaml kubectl apply -f pvc.yaml
pv.yaml
apiVersion: v1
kind: PersistentVolume
metadata:
name: clickhouse-pv
labels:
type: local
spec:
capacity:
storage: 6Gi
accessModes:
- ReadWriteOnce
storageClassName: standard-rwo
hostPath:
path: /mnt/clickhouse
persistentVolumeReclaimPolicy: Retain
pvc.yaml
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
name: clickhouse
namespace: storage
spec:
accessModes:
- ReadWriteOnce
resources:
requests:
storage: 64Gi
Развертываем ConfigMap
Далее применяем ConfigMap (config.yaml). Этот шаг позволит настроить ClickHouse под наши конкретные нужды.
kubectl apply config.yaml -n your_namespace
config.yaml
apiVersion: v1
kind: ConfigMap metadata: name: ch-configmap data: storage.xml: | <clickhouse>
<listen_host>0.0.0.0</listen_host>
<path>/data/clickhouse/</path>
<user_directories>
<local_directory>
<path>/data/</path>
</local_directory>
</user_directories>
<prometheus>
<endpoint>/metrics</endpoint>
<port>9363</port>
<metrics>true</metrics>
<events>true</events>
<asynchronous_metrics>true</asynchronous_metrics>
</prometheus>
</clickhouse>
access_management.xml: | <clickhouse>
<users>
<default>
<access_management>1</access_management>
<named_collection_control>1</named_collection_control>
<show_named_collections>1</show_named_collections>
<show_named_collections_secrets>1</show_named_collections_secrets>
<double_sha1_passwords>1</double_sha1_passwords>
</default>
</users>
</clickhouse>
users.xml: | <?xml version="1.0"?>
<clickhouse>
<profiles>
<default><max_memory_usage>your_choice</max_memory_usage>
<load_balancing>random</load_balancing>
</default>
<readonly>
<readonly>1</readonly>
</readonly>
</profiles>
<users>
<default>
<password_double_sha1_hex>your_password_hex</password_double_sha1_hex><networks>
<ip>::/0</ip>
</networks>
<profile>default</profile>
<quota>default</quota>
</default>
</users><quotas>
<default>
<interval>
<duration>3600</duration>
<queries>0</queries>
<errors>0</errors>
<result_rows>0</result_rows>
<read_rows>0</read_rows>
<execution_time>0</execution_time>
</interval>
</default>
</quotas>
</clickhouse>
Запуск ClickHouse: Развертывание
Теперь о главном – переходим к развертыванию ClickHouse (deployment.yaml).
kubectl apply deployment.yaml -n your_namespace
apiVersion: apps/v1
kind: StatefulSet
metadata:
name: clickhouse
spec:
replicas: 1
selector:
matchLabels:
app: clickhouse
template:
metadata:
labels:
app: clickhouse
spec:
volumes:
- name: clickhouse-userconfigmap
configMap:
name: clickhouse-userconfigmap
- name: clickhouse-storage
persistentVolumeClaim:
claimName: clickhouse
containers:
- name: clickhouse
image: clickhouse/clickhouse-server(check image of ur choice)
ports:
- containerPort: 8123
- containerPort: 9000
resources:
limits:
cpu: 600m
memory: 4Gi
requests:
cpu: 300m
memory: 2Gi
volumeMounts:
- name: clickhouse-userconfigmap
mountPath: /etc/clickhouse-server/users.xml
subPath: users.xml
- name: clickhouse-userconfigmap
mountPath: /etc/clickhouse-server/users.d/default.xml
subPath: access_management.xml
- name: clickhouse-userconfigmap
mountPath: /etc/clickhouse-server/config.d/default_config.xml
subPath: storage.xml
- name: clickhouse-storage
mountPath: /data
Шлюз: Экспонирование ClickHouse с помощью Service
Наконец, с помощью Service (service.yaml) открываем ClickHouse.
kubectl apply service.yaml -n your_namespace
apiVersion: v1
kind: Service
metadata:
name: clickhouse
namespace: storage
annotations:
spec:
selector:
app: clickhouse
type:
ports:
- port: 80
targetPort: 9000
protocol: TCP
name: http
После развертывания: добро пожаловать в королевство ClickHouse
После развертывания Вы можете приступить к работе с ClickHouse, это совсем несложно. Если в конфигурации Service Вы использовали LoadBalancer, доступ к ClickHouse можно получить через его внешний IP или имя хоста.
Для операций внутри кластера просто используйте:
clickhouse-client - host clickhouse.storage
В нашем варианте настройки системы ClickHouse данные хранятся постоянно. PV, смонтированный в /mnt/clickhouse на хосте, гарантирует, что Ваши данные находятся под надежной защитой.
Развертывание ClickHouse на Kubernetes - это не просто техническая задача; это расширение возможностей Вашей инфраструктуры данных. Воспользуйтесь этой настройкой и понаблюдайте за тем, как преобразуются Ваши аналитические процессы. Теперь Вы готовы к решению сложных актуальных задач, связанных с большими данными.




