当前位置:首页>Linux>Linux Cassandra 与 Kubernetes 部署实践

Linux Cassandra 与 Kubernetes 部署实践

  • 2026-10-21 13:28:50
Linux Cassandra 与 Kubernetes 部署实践

Linux Cassandra 与 Kubernetes 部署实践

一、为什么在 Kubernetes 部署 Cassandra?

1.1 优势

  • 自动化:Pod自愈、滚动更新、自动扩容
  • 资源统一:与业务容器共平台,调度优化
  • 多云/混合云:EKS/GKE/AKS统一管理
  • Operator助力:自动repair、备份、升级

1.2 挑战

  • Stateful特性:持久化、种子发现、有序启动
  • 存储:Local PV或CSI(如Ceph/Rook)
  • 网络:Headless Service + DNS发现
  • 资源争抢:CPU/Memory限额易GC

生产趋势:大厂(如Apple、Netflix部分集群)已全面K8s化。

1.3 Operator 对比(2026年现状)

Operator
维护者
成熟度
特性
推荐场景
cass-operator
Datastax
高
完整(repair、backup、multi-DC)
生产首选
casskop
Orange
中
基础+Helm
开源社区
instaclustr-operator
Instaclustr
高
企业级(监控集成)
托管迁移

本篇以datastax/cass-operator为主(最活跃)。


二、基础部署:StatefulSet + Helm

2.1 准备环境

  • K8s 1.25+
  • StorageClass:支持RWX(备份)+ RWOP(数据)
  • Helm 3+

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 持久化最佳实践

  • 数据盘:Local PV或CSI(NVMe)
  • CommitLog分离:多PVC模板
  • 备份:Velero + Snapshot

四、运维操作在 K8s

4.1 扩容

修改CR spec.size → apply

Operator滚动添加Pod,自动bootstrap。

监控:kubectl describe cassandracluster

4.2 升级

  • 小版本:修改image tag
  • 大版本:滚动+upgradesstables(Operator支持)

4.3 Repair/Backup 集成

Operator内置Reaper侧车:

  • 自动调度repair
  • Medusa备份容器

4.4 监控集成

  • Prometheus Operator scrape cassandra-exporter侧车
  • Grafana预置K8s Cassandra Dashboard

五、多DC 与云原生扩展

  • 多AZ:rack对应AZ
  • 多Region:Federation或独立集群+跨集群复制(5.1新特性)
  • Service Mesh:Istio加密节点间流量

六、生产迁移与常见坑

6.1 从裸机迁移

  1. Snapshot备份
  2. 新K8s集群
  3. sstableloader加载(或双写迁移)

6.2 常见坑

  • PVC绑定错 → 数据丢失 → affinity规则
  • OOM → 资源限额 → offheap + requests/limits合理
  • 种子发现慢 → Headless SVC DNS
  • Compaction风暴 → Operator限速
  • 存储慢 → 用Local Volume

最新文章

随机文章