infrastructure/databases/clickhouse.yaml

177 lines
4.7 KiB
YAML

apiVersion: v1
kind: PersistentVolumeClaim
metadata:
name: clickhouse-data-pvc
namespace: databases
spec:
accessModes:
- ReadWriteOnce
storageClassName: longhorn
resources:
requests:
storage: 120Gi
limits:
storage: 100Gi
---
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
name: clickhouse-logs-pvc
namespace: databases
spec:
accessModes:
- ReadWriteOnce
storageClassName: longhorn
resources:
requests:
storage: 1Gi
limits:
storage: 1Gi
---
apiVersion: v1
kind: ConfigMap
metadata:
name: clickhouse-configmap
namespace: databases
data:
custom-config.xml: |
<clickhouse>
<logger>
<level>warning</level>
<size>100M</size>
<console>1</console>
</logger>
<listen_host>0.0.0.0</listen_host>
<http_port>8123</http_port>
<tcp_port>9000</tcp_port>
<prometheus>
<endpoint>/metrics</endpoint>
<port>9363</port>
<metrics>true</metrics>
<events>true</events>
<asynchronous_metrics>true</asynchronous_metrics>
</prometheus>
<backups>
<allowed_disk>s3_plain</allowed_disk>
</backups>
</clickhouse>
---
apiVersion: apps/v1
kind: StatefulSet
metadata:
name: clickhouse
namespace: databases
spec:
serviceName: "clickhouse"
replicas: 1
selector:
matchLabels:
ms: clickhouse
template:
metadata:
labels:
ms: clickhouse
annotations:
prometheus.io/scrape: "true"
prometheus.io/port: "9363"
spec:
terminationGracePeriodSeconds: 120
containers:
- name: clickhouse
image: clickhouse/clickhouse-server:23.10
ports:
- containerPort: 8123
- containerPort: 9000
- containerPort: 9363
volumeMounts:
- name: data
mountPath: /var/lib/clickhouse/
- name: logs
mountPath: /var/log/clickhouse-server/
- name: config
mountPath: /etc/clickhouse-server/config.d/
env:
- name: CLICKHOUSE_PASSWORD
valueFrom:
secretKeyRef:
name: secrets
key: CLICKHOUSE_PASSWORD
- name: AWS_ACCESS_KEY_ID
valueFrom:
secretKeyRef:
name: secrets
key: AWS_ACCESS_KEY_ID
- name: AWS_SECRET_ACCESS_KEY
valueFrom:
secretKeyRef:
name: secrets
key: AWS_SECRET_ACCESS_KEY
volumes:
- name: data
persistentVolumeClaim:
claimName: clickhouse-data-pvc
- name: logs
persistentVolumeClaim:
claimName: clickhouse-logs-pvc
- name: config
configMap:
name: clickhouse-configmap
---
apiVersion: batch/v1
kind: CronJob
metadata:
name: clickhouse-backup
namespace: databases
spec:
schedule: "0 6 * * *"
jobTemplate:
spec:
template:
spec:
restartPolicy: Never
containers:
- name: clickhouse-backup
image: clickhouse/clickhouse-server:23.10
env:
- name: CLICKHOUSE_PASSWORD
valueFrom:
secretKeyRef:
name: secrets
key: CLICKHOUSE_PASSWORD
- name: AWS_ACCESS_KEY_ID
valueFrom:
secretKeyRef:
name: secrets
key: AWS_ACCESS_KEY_ID
- name: AWS_SECRET_ACCESS_KEY
valueFrom:
secretKeyRef:
name: secrets
key: AWS_SECRET_ACCESS_KEY
command:
- /bin/sh
- -c
- >
clickhouse client --host clickhouse.databases --user default --password $CLICKHOUSE_PASSWORD --query="BACKUP TABLE nocodelytics_production.events TO S3('https://eu2.contabostorage.com/clickhouse/backup/events/$(date +\%Y-\%m-\%d).zip', '$AWS_ACCESS_KEY_ID', '$AWS_SECRET_ACCESS_KEY');" &&
clickhouse client --host clickhouse.databases --user default --password $CLICKHOUSE_PASSWORD --query="BACKUP TABLE nocodelytics_production.visitors TO S3('https://eu2.contabostorage.com/clickhouse/backup/visitors/$(date +\%Y-\%m-\%d).zip', '$AWS_ACCESS_KEY_ID', '$AWS_SECRET_ACCESS_KEY');"
---
apiVersion: v1
kind: Service
metadata:
name: clickhouse
namespace: databases
spec:
type: ClusterIP
selector:
ms: clickhouse
ports:
- name: http
port: 8123
targetPort: 8123
- name: native
port: 9000
targetPort: 9000
- name: prometheus
port: 9363
targetPort: 9363