如何在不丢失数据的情况下在 AKS 上为 Cassandra 扩展 PVC?

How can I expand a PVC for Cassandra on AKS without losing data?

首先我要说我没有使用 Cassandra 的经验而且我不是创建此部署的人。

我在 AKS 的集群中有 Cassandra 运行。 statefulset 中配置的 PVC 为 1000Gi。目前 pods 已超出存储空间,并且一直处于不健康状态。

我希望扩展附加到 pods 的卷。我面临的问题是我无法缩小 statefulset,因为 statefulset 仅在 all 它们的 pods 健康时才缩小。

我什至尝试删除有状态集,然后用更大的 PVC 重新创建它(推荐 here

但是,我似乎无法删除状态集。在我看来,CassandraDatacenter CRD 会在我删除它后立即重新创建状态集。不给我改任何东西的时间。

我的问题如下:

  1. 有没有一种标准的方法可以在不丢失数据的情况下扩展卷?
  2. 如果我缩减 CassandraDatacenter 中的副本会发生什么?它会删除 PVC 还是保留它?
  3. 如果没有标准,有没有人知道如何在不丢失存储的情况下完成扩展卷大小?

通常在 Cassandra 集群中,最佳做法是水平扩展(而不是垂直扩展)。您需要更多 Cassandra 节点来分散负载以实现最大吞吐量。

Kubernetes 中的等价物是扩展您的部署。随着节点数量的增加,每个 Cassandra 节点上的数据量将按比例减少。

如果您真的想调整 PVC 的大小,只有在启用 allowVolumeExpansion 后才能动态调整。这样做不会丢失数据。

删除 STS 是行不通的,因为按照设计,它将被自动替换,如您所知。如果这样做,您也将无法缩减,因为集群中没有足够的容量(磁盘 space)。干杯!

回答:如何在不丢失数据的情况下为 AKS 上的 StatefulSet 扩展 PVC?

虽然@Erick Raminez 的回答是针对 Cassandra 的非常好的建议,但我想回答更普遍的问题“如何在不丢失数据的情况下为 AKS 上的 StatefulSet 扩展 PVC?”。

如果允许停机,您可以按照以下 4 个步骤操作:

# Delete StatefulSet 
# This is required on AKS since the azure disk must have status "Unattached" 
kubectl delete statefulsets.apps STATEFULSET_NAME

# Edit capacity in 
# - your statefulset yaml file
# - each pvc
kubectl patch pvc PVC_NAME -p '{"spec": {"resources": {"requests": {"storage": "3Gi"}}}}'

# Deploy updated statefulset yaml (or helm chart)
kubectl apply -f statefulset.yaml

# Verify Capacity
kubectl get pvc

如果您不想停机,请查看第一个参考以了解一些额外的步骤。

参考文献: