Kubernetes sa stal de facto štandardom pre nasadzovanie kontajnerizovaných aplikácií a analytické platformy nie sú výnimkou. Prevádzka ClickHouse, Matomo, Plausible a súvisiacich nástrojov na Kubernetes poskytuje škálovateľnosť, odolnosť a prevádzkovú efektivitu, ktorú je ťažké dosiahnuť s tradičnými nasadeniami.
Tento sprievodca pokrýva všetko, čo potrebujete vedieť o nasadzovaní a prevádzkovaní analytických workloadov na Kubernetes, od Helm chartov po produkčné best practices.
Prečo Kubernetes pre analytiku?
Pred tým, ako sa ponoríme do implementácie, pochopme, prečo je Kubernetes vhodný pre analytické workloady:
- Elastické škálovanie: Zvládnite nárazový traffic počas launch produktov alebo marketingových kampaní
- Self-healing: Automatické reštarty podov a rescheduling pri zlyhaniach
- Efektivita zdrojov: Bin-packing optimalizuje využitie hardvéru
- Deklaratívna konfigurácia: Verzované, reprodukovateľné nasadenia
- Bohatý ekosystém: Operátory, service mesh a observability nástroje
Možnosti analytických platforiem pre Kubernetes
Niekoľko open-source analytických platforiem aktívne podporuje Kubernetes nasadenia:
- ClickHouse: Vysoko výkonná stĺpcová databáza ideálna pre real-time analytiku (plne podporovaná cez Altinity Operator)
- Matomo: Plnohodnotná alternatíva k Google Analytics s podporou self-hostingu
- Plausible: Ľahká, na súkromie zameraná webová analytika
- Metabase: Business intelligence a platforma pre vizualizáciu dát
- Apache Superset: Moderná platforma pre prieskum a vizualizáciu dát
Prerekvizity
Pred nasadením analytických workloadov na Kubernetes sa uistite, že máte:
- Kubernetes cluster (1.28+) s minimálne 4 nodmi — aktuálne podporované verzie sú 1.33, 1.34 a 1.35
- Nainštalované kubectl a Helm 3
- Storage class podporujúca dynamické provisioning
- Ingress controller (nginx, traefik alebo cloud provider)
- Minimálne 8GB RAM na node pre ClickHouse workloady
ClickHouse na Kubernetes
ClickHouse je chrbtovou kosťou mnohých analytických platforiem a vyžaduje špeciálnu pozornosť kvôli svojej stavovej povahe a požiadavkám na výkon.
Použitie Altinity ClickHouse Operátora
Altinity ClickHouse Operator (aktuálne v0.25.6) je najpopulárnejší a odporúčaný spôsob prevádzky ClickHouse v Kubernetes. Od verzie 0.24.0 zahŕňa natívnu podporu pre ClickHouse Keeper, eliminujúc potrebu externých ZooKeeper inštalácií.
# Inštalácia operátora cez Helm (odporúčané)
helm repo add clickhouse-operator https://docs.altinity.com/clickhouse-operator
helm repo update
# Inštalácia operátora
helm upgrade --install --create-namespace \
--namespace clickhouse \
clickhouse-operator \
clickhouse-operator/altinity-clickhouse-operator
# Overenie inštalácie
kubectl get pods -n clickhouse
ClickHouse Cluster s ClickHouse Keeper
Moderné nasadenia by mali používať ClickHouse Keeper namiesto ZooKeeper pre koordináciu:
# clickhouse-keeper.yaml
apiVersion: clickhouse-keeper.altinity.com/v1
kind: ClickHouseKeeperInstallation
metadata:
name: keeper-analytics
namespace: analytics
spec:
configuration:
clusters:
- name: keeper
layout:
replicasCount: 3
templates:
podTemplates:
- name: keeper-pod
spec:
containers:
- name: clickhouse-keeper
resources:
requests:
cpu: "500m"
memory: 1Gi
limits:
cpu: "1"
memory: 2Gi
volumeClaimTemplates:
- name: keeper-storage
spec:
accessModes:
- ReadWriteOnce
resources:
requests:
storage: 10Gi
storageClassName: fast-ssd
# clickhouse-cluster.yaml
apiVersion: clickhouse.altinity.com/v1
kind: ClickHouseInstallation
metadata:
name: analytics-clickhouse
namespace: analytics
spec:
configuration:
clusters:
- name: analytics
layout:
shardsCount: 2
replicasCount: 2
templates:
podTemplate: clickhouse-pod
volumeClaimTemplate: clickhouse-storage
zookeeper:
nodes:
- host: keeper-keeper-analytics
port: 2181
users:
admin/password_sha256_hex: "your-sha256-password-hash"
admin/networks/ip:
- 10.0.0.0/8
readonly/password: "readonly-password"
readonly/profile: readonly
profiles:
readonly:
readonly: 1
templates:
podTemplates:
- name: clickhouse-pod
spec:
containers:
- name: clickhouse
resources:
requests:
cpu: "2"
memory: 8Gi
limits:
cpu: "4"
memory: 16Gi
volumeClaimTemplates:
- name: clickhouse-storage
spec:
accessModes:
- ReadWriteOnce
resources:
requests:
storage: 500Gi
storageClassName: fast-ssd
Matomo na Kubernetes
Matomo je vyspelá, plnohodnotná analytická platforma s komplexnou podporou Kubernetes:
# Pridanie Bitnami Helm repozitára
helm repo add bitnami https://charts.bitnami.com/bitnami
helm repo update
# Vytvorenie namespace
kubectl create namespace matomo
# Inštalácia Matomo
helm install matomo bitnami/matomo \
--namespace matomo \
--values matomo-values.yaml
# matomo-values.yaml
replicaCount: 2
resources:
requests:
cpu: 250m
memory: 512Mi
limits:
cpu: 1000m
memory: 1Gi
mariadb:
enabled: true
architecture: replication
auth:
rootPassword: "secure-root-password"
database: matomo
primary:
persistence:
size: 50Gi
storageClass: fast-ssd
ingress:
enabled: true
hostname: analytics.example.com
annotations:
kubernetes.io/ingress.class: nginx
cert-manager.io/cluster-issuer: letsencrypt-prod
tls: true
persistence:
enabled: true
size: 10Gi
storageClass: standard
Plausible na Kubernetes
Plausible je ľahká, na súkromie zameraná alternatíva, ktorá sa jednoducho nasadzuje:
# plausible-deployment.yaml
apiVersion: apps/v1
kind: Deployment
metadata:
name: plausible
namespace: analytics
spec:
replicas: 2
selector:
matchLabels:
app: plausible
template:
metadata:
labels:
app: plausible
spec:
containers:
- name: plausible
image: ghcr.io/plausible/community-edition:v2.1
ports:
- containerPort: 8000
env:
- name: DATABASE_URL
valueFrom:
secretKeyRef:
name: plausible-secrets
key: database-url
- name: CLICKHOUSE_DATABASE_URL
valueFrom:
secretKeyRef:
name: plausible-secrets
key: clickhouse-url
- name: SECRET_KEY_BASE
valueFrom:
secretKeyRef:
name: plausible-secrets
key: secret-key
- name: BASE_URL
value: "https://analytics.example.com"
resources:
requests:
cpu: 250m
memory: 512Mi
limits:
cpu: 1000m
memory: 2Gi
Správa zdrojov
Správna alokácia zdrojov je kritická pre analytické workloady:
Odporúčania pre CPU a pamäť
| Komponent | CPU Request | Memory Request | Poznámky |
|---|---|---|---|
| ClickHouse | 2000m | 8Gi | Viac RAM = lepší výkon dotazov |
| ClickHouse Keeper | 500m | 1Gi | Minimum 3 repliky pre HA |
| Matomo Web | 250m | 512Mi | Škálujte horizontálne pre traffic |
| Plausible | 250m | 512Mi | Ľahké, jednoduché na škálovanie |
| PostgreSQL | 1000m | 2Gi | Závisí od objemu metadát |
| Redis | 250m | 1Gi | Veľkosť podľa potrieb cache |
| Kafka | 1000m | 4Gi | Na broker, škálujte brokery pre priepustnosť |
Resource Quotas
Chráňte váš cluster pomocou resource quotas:
# resource-quota.yaml
apiVersion: v1
kind: ResourceQuota
metadata:
name: analytics-quota
namespace: analytics
spec:
hard:
requests.cpu: "32"
requests.memory: 64Gi
limits.cpu: "64"
limits.memory: 128Gi
persistentvolumeclaims: "20"
requests.storage: 2Ti
Konfigurácia auto-scaling
Nakonfigurujte Horizontal Pod Autoscaler pre premenlivé workloady:
HPA pre webové služby
# hpa-analytics.yaml
apiVersion: autoscaling/v2
kind: HorizontalPodAutoscaler
metadata:
name: analytics-web-hpa
namespace: analytics
spec:
scaleTargetRef:
apiVersion: apps/v1
kind: Deployment
name: analytics-web
minReplicas: 2
maxReplicas: 20
metrics:
- type: Resource
resource:
name: cpu
target:
type: Utilization
averageUtilization: 70
- type: Resource
resource:
name: memory
target:
type: Utilization
averageUtilization: 80
behavior:
scaleUp:
stabilizationWindowSeconds: 60
policies:
- type: Pods
value: 4
periodSeconds: 60
scaleDown:
stabilizationWindowSeconds: 300
policies:
- type: Pods
value: 2
periodSeconds: 120
KEDA pre event-driven škálovanie
KEDA (Kubernetes Event-Driven Autoscaling) umožňuje škálovanie na základe externých metrík ako Kafka consumer lag. KEDA je graduated CNCF projekt so 70+ vstavanými scalermi:
# Inštalácia KEDA cez Helm
helm repo add kedacore https://kedacore.github.io/charts
helm repo update
helm install keda kedacore/keda \
--namespace keda \
--create-namespace
# keda-scaledobject.yaml
apiVersion: keda.sh/v1alpha1
kind: ScaledObject
metadata:
name: analytics-worker-scaler
namespace: analytics
spec:
scaleTargetRef:
name: analytics-worker
minReplicaCount: 2
maxReplicaCount: 20
pollingInterval: 30
cooldownPeriod: 300
triggers:
- type: kafka
metadata:
bootstrapServers: kafka:9092
consumerGroup: analytics-workers
topic: events_ingestion
lagThreshold: "1000"
- type: prometheus
metadata:
serverAddress: http://prometheus:9090
metricName: http_requests_total
query: sum(rate(http_requests_total{job="analytics"}[2m]))
threshold: "100"
Persistent Storage
Analytické workloady vyžadujú spoľahlivé, výkonné úložisko:
Výber Storage Class
- ClickHouse: Použite najrýchlejšie dostupné úložisko (gp3/io2 na AWS, pd-ssd na GCP)
- Kafka: Úložisko s vysokou priepustnosťou a dobrými IOPS
- PostgreSQL: Štandardné SSD úložisko je zvyčajne postačujúce
# storage-class.yaml
apiVersion: storage.k8s.io/v1
kind: StorageClass
metadata:
name: fast-ssd
provisioner: ebs.csi.aws.com
parameters:
type: gp3
iops: "10000"
throughput: "500"
reclaimPolicy: Retain
allowVolumeExpansion: true
volumeBindingMode: WaitForFirstConsumer
Volume Snapshots pre zálohovanie
# volume-snapshot.yaml
apiVersion: snapshot.storage.k8s.io/v1
kind: VolumeSnapshot
metadata:
name: clickhouse-backup-daily
namespace: analytics
spec:
volumeSnapshotClassName: csi-aws-vsc
source:
persistentVolumeClaimName: clickhouse-data-0
Sieťové best practices
Network Policies
Obmedzte traffic medzi komponentmi:
# network-policy.yaml
apiVersion: networking.k8s.io/v1
kind: NetworkPolicy
metadata:
name: clickhouse-network-policy
namespace: analytics
spec:
podSelector:
matchLabels:
app: clickhouse
policyTypes:
- Ingress
- Egress
ingress:
- from:
- podSelector:
matchLabels:
app: analytics-web
- podSelector:
matchLabels:
app: clickhouse
ports:
- port: 8123
- port: 9000
egress:
- to:
- podSelector:
matchLabels:
app: clickhouse
- podSelector:
matchLabels:
app: clickhouse-keeper
ports:
- port: 9000
- port: 2181
Úvahy o Service Mesh
Ak používate Istio alebo Linkerd:
- Vylúčte ClickHouse natívny protokol (port 9000) z mTLS na začiatku
- Nakonfigurujte správne retry politiky pre prechodné zlyhania
- Nastavte primerané timeouty pre dlhotrvajúce dotazy (ClickHouse dotazy môžu bežať minúty)
Monitoring Stack
Komplexný monitoring je esenciálny pre produkčnú prevádzku:
Prometheus ServiceMonitor
# servicemonitor.yaml
apiVersion: monitoring.coreos.com/v1
kind: ServiceMonitor
metadata:
name: clickhouse-monitor
namespace: analytics
spec:
selector:
matchLabels:
app: clickhouse
endpoints:
- port: metrics
interval: 30s
path: /metrics
Kľúčové metriky na monitorovanie
- ClickHouse:
ClickHouseProfileEvents_Query,ClickHouseMetrics_ReplicasMaxQueueSize,ClickHouseAsyncMetrics_ReplicasSumQueueSize - Kafka:
kafka_consumer_lag,kafka_messages_in_per_sec - Kubernetes: Reštarty podov, využitie zdrojov, využitie PVC
- Aplikácia: Latencia požiadaviek, miera chýb, priepustnosť ingescie
Grafana Dashboardy
Nasaďte predpripravené dashboardy pre viditeľnosť. Altinity Operator zahŕňa Prometheus alertovacie pravidlá a Grafana dashboardy:
# grafana-dashboard-configmap.yaml
apiVersion: v1
kind: ConfigMap
metadata:
name: clickhouse-dashboard
namespace: monitoring
labels:
grafana_dashboard: "1"
data:
clickhouse-overview.json: |
{
"title": "ClickHouse Overview",
"panels": [...]
}
Produkčné best practices
Pod Disruption Budgets
Zabezpečte dostupnosť počas údržby:
# pdb.yaml
apiVersion: policy/v1
kind: PodDisruptionBudget
metadata:
name: clickhouse-pdb
namespace: analytics
spec:
minAvailable: 2
selector:
matchLabels:
app: clickhouse
Pod Anti-Affinity
Rozložte repliky naprieč nodmi a zónami:
affinity:
podAntiAffinity:
requiredDuringSchedulingIgnoredDuringExecution:
- labelSelector:
matchLabels:
app: clickhouse
topologyKey: kubernetes.io/hostname
preferredDuringSchedulingIgnoredDuringExecution:
- weight: 100
podAffinityTerm:
labelSelector:
matchLabels:
app: clickhouse
topologyKey: topology.kubernetes.io/zone
Priority Classes
Zabezpečte, aby kritické komponenty dostali zdroje ako prvé:
# priority-class.yaml
apiVersion: scheduling.k8s.io/v1
kind: PriorityClass
metadata:
name: analytics-critical
value: 1000000
globalDefault: false
description: "Priority class pre kritické analytické komponenty"
Bezpečnostné úvahy
Správa secrets
Použite externé secrets operátory pre citlivé údaje:
# external-secret.yaml
apiVersion: external-secrets.io/v1beta1
kind: ExternalSecret
metadata:
name: clickhouse-credentials
namespace: analytics
spec:
refreshInterval: 1h
secretStoreRef:
name: aws-secrets-manager
kind: ClusterSecretStore
target:
name: clickhouse-credentials
data:
- secretKey: admin-password
remoteRef:
key: analytics/clickhouse
property: admin-password
Pod Security Standards
securityContext:
runAsNonRoot: true
runAsUser: 101
fsGroup: 101
seccompProfile:
type: RuntimeDefault
containerSecurityContext:
allowPrivilegeEscalation: false
readOnlyRootFilesystem: true
capabilities:
drop:
- ALL
Stratégie upgrade
Rolling Updates
Nakonfigurujte bezpečné rolling updates:
strategy:
type: RollingUpdate
rollingUpdate:
maxSurge: 1
maxUnavailable: 0
Blue-Green nasadenia
Pre major version upgrady zvážte blue-green nasadenia:
- Nasaďte novú verziu vedľa existujúcej
- Spustite obe verzie s rozdelením trafficu
- Validujte konzistenciu dát a výkon
- Prepnite traffic na novú verziu
- Ponechajte starú verziu pre rýchly rollback
Upgrady ClickHouse Operátora
Altinity Operator teraz používa SYSTEM SHUTDOWN namiesto rekreácie podov pri aplikovaní zmien konfigurácie, čo výrazne urýchľuje aktualizácie na nodoch s veľkými volumami.
Riešenie bežných problémov
Pod Evictions
Ak sú pody evicted:
- Skontrolujte resource limits a requests
- Preskúmajte resource pressure na nodoch pomocou
kubectl describe node - Zvážte použitie priority classes
- Skontrolujte memory leaky v dlho bežiacich dotazoch
Výkon úložiska
Ak sú dotazy pomalé:
- Overte limity IOPS storage class
- Skontrolujte throttling u cloud providera
- Monitorujte metriky využitia disku
- Zvážte použitie lokálneho NVMe úložiska pre ClickHouse
Sieťové timeouty
Pre problémy s pripojením:
- Overte, že network policies povoľujú požadovaný traffic
- Skontrolujte logy service mesh sidecar
- Preskúmajte DNS resolution s CoreDNS
- Uistite sa, že ClickHouse Keeper/ZooKeeper je zdravý
ClickHouse CrashLoopBackOff
Ak ClickHouse pody zlyhávajú pri štarte:
- Skontrolujte konfiguračné šablóny na syntaktické chyby
- Overte spätnú kompatibilitu pri upgrade verzií
- Zmeňte entrypoint na debug: upravte pod na použitie
sleep infinitypre prístup ku kontajneru - Preskúmajte Altinity troubleshooting guide pre špecifické chybové správy
Optimalizácia nákladov
Right-sizing zdrojov
- Použite Vertical Pod Autoscaler (VPA) v režime odporúčaní na identifikáciu optimálnych resource requests
- Implementujte KEDA scale-to-zero pre vývojové prostredia
- Použite spot/preemptible inštancie pre nekritické workloady
Storage Tiering
ClickHouse podporuje vrstvené úložisko — použite cold storage pre historické dáta:
<storage_configuration>
<disks>
<hot>
<path>/var/lib/clickhouse/hot/</path>
</hot>
<cold>
<type>s3</type>
<endpoint>https://s3.amazonaws.com/bucket/</endpoint>
</cold>
</disks>
<policies>
<tiered>
<volumes>
<hot><disk>hot</disk></hot>
<cold><disk>cold</disk></cold>
</volumes>
<move_factor>0.1</move_factor>
</tiered>
</policies>
</storage_configuration>
Ďalšie kroky
Úspešná prevádzka analytiky na Kubernetes vyžaduje kontinuálnu pozornosť:
- Začnite s oficiálnymi Helm chartmi a postupne customizujte
- Implementujte komplexný monitoring pred produkciou
- Dokumentujte runbooky pre bežné prevádzkové úlohy
- Pravidelne praktizujte disaster recovery procedúry
- Sledujte upstream releasy a bezpečnostné patche
- Zvážte spravované služby (Altinity.Cloud, ClickHouse Cloud) ak je prevádzková záťaž príliš vysoká
Dodatočné zdroje
- Dokumentácia Altinity Kubernetes Operátora
- Oficiálna dokumentácia ClickHouse
- Dokumentácia KEDA
- Sprievodca self-hostingom Matomo
- Dokumentácia self-hostingu Plausible
Kubernetes poskytuje silný základ pre škálovateľnú analytickú infraštruktúru, ale vyžaduje investíciu do prevádzkovej expertízy na realizáciu jeho plného potenciálu.