如何在不丢失数据的情况下在 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 会在我删除它后立即重新创建状态集。不给我改任何东西的时间。
我的问题如下:
- 有没有一种标准的方法可以在不丢失数据的情况下扩展卷?
- 如果我缩减 CassandraDatacenter 中的副本会发生什么?它会删除 PVC 还是保留它?
- 如果没有标准,有没有人知道如何在不丢失存储的情况下完成扩展卷大小?
通常在 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
如果您不想停机,请查看第一个参考以了解一些额外的步骤。
参考文献:
首先我要说我没有使用 Cassandra 的经验而且我不是创建此部署的人。
我在 AKS 的集群中有 Cassandra 运行。 statefulset 中配置的 PVC 为 1000Gi。目前 pods 已超出存储空间,并且一直处于不健康状态。
我希望扩展附加到 pods 的卷。我面临的问题是我无法缩小 statefulset,因为 statefulset 仅在 all 它们的 pods 健康时才缩小。
我什至尝试删除有状态集,然后用更大的 PVC 重新创建它(推荐 here)
但是,我似乎无法删除状态集。在我看来,CassandraDatacenter CRD 会在我删除它后立即重新创建状态集。不给我改任何东西的时间。
我的问题如下:
- 有没有一种标准的方法可以在不丢失数据的情况下扩展卷?
- 如果我缩减 CassandraDatacenter 中的副本会发生什么?它会删除 PVC 还是保留它?
- 如果没有标准,有没有人知道如何在不丢失存储的情况下完成扩展卷大小?
通常在 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
如果您不想停机,请查看第一个参考以了解一些额外的步骤。
参考文献: