Развертывание ClickHouse в Kubernetes как 2*2 или пошаговая инструкция
Как раскрыть весь потенциал Big Data в два приема
В постоянно меняющемся мире аналитики данных ClickHouse стал синонимом надежности, эффективности и производительности. Эта open-source колоночная СУБД – одно из лучших решений по обработке огромных объемов данных с молниеносной скоростью. Но что действительно выгодно выделяет ClickHouse среди других подобных решений, так это ее бесшовная интеграция с Kubernetes, фактическим оркестратором контейнеризированных приложений. Сегодня мы расскажем Вам о том, как можно проще всего развернуть ClickHouse в среде Kubernetes.
На стыке инноваций: ClickHouse и Kubernetes
Почему именно ClickHouse? Да потому, что это гигант в области обработки аналитических запросов. Будь то небольшой стартап или крупное предприятие, ClickHouse прекрасно адаптируется к Вашими потребностям в обработке данных.
А Kubernetes? Потому что это платформа, которая не просто выживает в неспокойном мире управления рабочими нагрузками, а царствует в нем. Kubernetes эффективно управляет и масштабирует наши приложения как по мановению волшебной палочки.
Объединение этих двух стихий подобно созданию команды мечты для управления любой инфраструктуры данных.
Подготовка к развертыванию: что нужно знать
Прежде чем приступить к делу:
- Убедитесь в том, что кластер Kubernetes запущен и работает.
- Ознакомьтесь с основными концепциями Kubernetes: Развертывания, PV (Persistent Volumes), PVC (Persistent Volume Claims), Сервисы и ConfigMaps.
- У Вас под рукой есть kubectl, инструмент командной строки Kubernetes.
Как развернуть ClickHouse в Kubernetes
План действий таков:
- Закладываем основу с помощью PV и PVC – это фундамент для сохранения данных;
- Оживим конфигурацию с помощью ConfigMap: ConfigMap - это место, где хранятся файлы конфигурации ClickHouse;
- Развернем ClickHouse с помощью Deployment – как раз здесь – то и оживает 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: Deployment
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
Наконец, мы открываем» ClickHouse с помощью service.yaml. Теперь мы можем начать работать с СУБД.
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 не составит особого труда. Если в конфигурации службы Вы использовали LoadBalancer, то доступ к ClickHouse можно получить через его внешний IP или имя хоста.
Для операций внутри кластера:
clickhouse-client - host clickhouse.storage
В нашей системе данные ClickHouse хранятся на постоянной основе благодаря PV, смонтированному в /mnt/clickhouse на хосте. Это гарантирует безопасность нашей информации.
Развертывание ClickHouse на Kubernetes - это не просто техническая задача. Это расширение возможностей Вашей инфраструктуры данных, повышение ее устойчивости, масштабируемости и эффективности. Воспользуйтесь нашими советами, и Вы увидите, как преобразуются Ваши аналитические процессы. Эти приятные метаморфозы позволят Вам решать самые сложные задачи в области Big Data и всегда оставаться в числе лидеров в нашем постоянно развивающемся и меняющемся мире IT и BI - технологий.




