Linux Cassandra 与 Kubernetes 部署实践
一、为什么在 Kubernetes 部署 Cassandra?
1.1 优势
- Operator助力:自动repair、备份、升级
1.2 挑战
- 存储:Local PV或CSI(如Ceph/Rook)
- 网络:Headless Service + DNS发现
生产趋势:大厂(如Apple、Netflix部分集群)已全面K8s化。
1.3 Operator 对比(2026年现状)
| | | | |
|---|
| | | 完整(repair、backup、multi-DC) | |
| | | | |
| | | | |
本篇以datastax/cass-operator为主(最活跃)。
二、基础部署:StatefulSet + Helm
2.1 准备环境
- StorageClass:支持RWX(备份)+ RWOP(数据)
2.2 Helm Chart 部署(简单场景)
官方Chart:https://github.com/k8ssandra/cass-operator/tree/main/charts/cassandra
示例values.yaml(单DC 3节点):
cassandra:
version:"5.1.0"
datacenters:
-name:dc1
size:3
resources:
requests:
cpu:4
memory:16Gi
limits:
cpu:8
memory:32Gi
cassandraConfig:
authenticator:PasswordAuthenticator
authorizer:CassandraAuthorizer
num_tokens:32
memtable_allocation_type:offheap_objects
storageConfig:
persistentVolumeClaim:
storageClassName:premium-ssd
resources:
requests:
storage:1Ti
rack:
-name:rack1
安装:
helm repo add k8ssandra https://charts.k8ssandra.io/
helm install mycluster k8ssandra/cass-operator -f values.yaml
2.3 关键资源解释
- StatefulSet:有序Pod(cassandra-dc1-rack1-sts-0)
- Headless Service:DNS发现种子(mycluster-dc1-seed-service)
- PVC:每个Pod独立卷(数据/CommitLog分离)
- Sidecar:Operator注入metrics、reaper
验证:
kubectl get sts,pvc,svc -l app=cassandra
kubectl exec -it mycluster-dc1-rack1-sts-0 -- nodetool status
三、Cass Operator 高级实践
3.1 安装 Operator
helm install cass-operator k8ssandra/cass-operator --namespace cass-operator --create-namespace
3.2 CRD 定义 CassandraCluster
示例CR(multi-dc.yaml):
apiVersion:cassandra.datastax.com/v1beta1
kind:CassandraCluster
metadata:
name:prod-cluster
spec:
clusterName:ProdCluster
datacenters:
-name:dc1
size:6
racks:
-name:rack1
storageConfig:
cassandraDataVolumeClaimSpec:
storageClassName:fast-ssd
resources:
requests:
storage:2Ti
-name:dc2
size:3
config:
cassandra_yaml:
num_tokens:32
authenticator:PasswordAuthenticator
jvm_options:
max_heap_size:24G
podTemplateSpec:
spec:
containers:
-name:cassandra
resources:
limits:
cpu:"12"
memory:48Gi
应用:
kubectl apply -f multi-dc.yaml
Operator自动:创建STS、Service、种子管理、repair调度。
3.3 持久化最佳实践
四、运维操作在 K8s
4.1 扩容
修改CR spec.size → apply
Operator滚动添加Pod,自动bootstrap。
监控:kubectl describe cassandracluster
4.2 升级
- 大版本:滚动+upgradesstables(Operator支持)
4.3 Repair/Backup 集成
Operator内置Reaper侧车:
4.4 监控集成
- Prometheus Operator scrape cassandra-exporter侧车
- Grafana预置K8s Cassandra Dashboard
五、多DC 与云原生扩展
- 多Region:Federation或独立集群+跨集群复制(5.1新特性)
- Service Mesh:Istio加密节点间流量
六、生产迁移与常见坑
6.1 从裸机迁移
6.2 常见坑
- PVC绑定错 → 数据丢失 → affinity规则
- OOM → 资源限额 → offheap + requests/limits合理
- Compaction风暴 → Operator限速