kubernetes 调整有状态集持久卷的大小-需要明确- AKS版本:1.26.6

vc6uscn9  于 2023-10-17  发布在  Kubernetes
关注(0)|答案(1)|浏览(82)

我今天试图调整与有状态集关联的持久卷的大小。我正在使用Azure Kubernetes服务v1.26.6。持久卷是从“default”类型的存储类创建的。
根据Kubernetes的官方文档:https://kubernetes.io/blog/2022/05/05/volume-expansion-ga/,现在可以在没有任何停机时间的情况下扩展持久卷的大小,只需更新有状态集的PVC的spec字段并重新部署有状态集。然而,我今天尝试了同样的方法(即尝试重新部署一个已经部署的有状态集,但增加了PVC的大小),我遇到了常见的错误:
错误:升级失败:无法使用类型StatefulSet修补“grafana-loki-querier”:StatefulSet.apps“grafana-loki-querier”无效:spec:Forbidden:禁止对“replicas”、“ordinals”、“template”、“updateStrategy”、“persistentVolumeClaimRetentionPolicy”和“minReadySeconds”以外的字段的statefulset规范进行更新
为了克服这个错误,我遵循以下说明:https://www.giffgaff.io/tech/resizing-statefulset-persistent-volumes-with-zero-downtime,然后终于能够成功部署helm chart,其中包含已调整大小的PVC的更新大小。

问题

  • 我是否误解了我在问题中链接的官方Kubernetes文档?
  • 我很好奇。从技术上讲,如果PVC的大小可以通过直接编辑PVC对象中的spec字段(kubectl edit pvc)来增加,那么为什么Kubernetes要通过直接更新PVC清单文件中的大小来限制PVC的大小呢?为什么我不能使用helm部署来增加PVC的大小?

为什么工作流不是使用Helm的Kubernetes部署的组成部分?
为什么它涉及删除有状态集,然后重新创建有状态集?同样的原因是什么?

isr3a4wc

isr3a4wc1#

问题-我是否误解了我在问题中链接的官方Kubernetes文档?
不是真的,但你只是部分正确。
即使Kubernetes Class支持卷扩展,Kubernetes也不支持通过StatefulSets进行卷扩展。请参考Support Volume Expansion Through StatefulSets和Kubernetes StatefulSet: support resize pvc storage上的官方增强问题。

更多洞察

为什么工作流不是使用Helm的Kubernetes部署的组成部分?
在这种情况下,这与helm charts无关,但实际上与应用程序堆栈中涉及的Kubernetes控制器有关,因为控制器持续监控应用程序并根据其定义的清单进行所需的更改,因此如解决方案文档中所述,您必须将其扩展到0
其次,我们必须使用孤儿策略删除有状态状态,这样实际的pod(工作应用程序)就不会被删除,而只有有状态的set控制器(kind)被删除。正因为如此,你被允许更新PVC,然后只有在你的storageClass->Storage Driver上支持并启用了ESPRING的情况下才能调整PVC的大小。
通常 Helm 有相当多的缺陷,但在这种情况下,它不是罪魁祸首。😬

相关问题