腾讯tke默认的cbs做存储不支持扩容

43 阅读1分钟

问题引出

扩容文档处理,报错

kubectl patch pvc data-xxxxxx-rabbitmq-0 -p '{"spec":{"resources":{"requests":{"storage":"20Gi"}}}}' -n xxxxxx
Error from server (Forbidden): persistentvolumeclaims "data-xxxxxx-rabbitmq-0" is forbidden: only dynamically provisioned pvc can be resized and the storageclass that provisions the pvc must support resize

查看sc的信息

kubectl get  storageClass -A
NAME                      PROVISIONER                 RECLAIMPOLICY   VOLUMEBINDINGMODE 
cbs (default)             com.tencent.cloud.csi.cbs   Delete          Immediate           false                  252d

VOLUMEBINDINGMODE 为false,默认确实不支持扩容。

解决方案

自定义的StorageClass

根据腾讯默认的StorageClass-cbs的yaml配置 allowVolumeExpansion: true,得到自定义的StorageClass: cbs-expand

apiVersion: storage.k8s.io/v1
kind: StorageClass
metadata:
  annotations:
    storageclass.beta.kubernetes.io/is-default-class: "false"
  name: cbs-expand
parameters:
  type: cbs
  diskType: CLOUD_PREMIUM
provisioner: com.tencent.cloud.csi.cbs
reclaimPolicy: Delete
volumeBindingMode: Immediate
allowVolumeExpansion: true

重启Pod情况下在线扩容

  • 执行以下命令,为 PV 对象打上一个非法 zone 标签,旨在下一步重启 Pod 后,使 Pod 无法调度到某个节点上。示例如下:
kubectl label pv  pvc-7e2639e1-ece2-4fa5-b5f1-687e4db973be  failure-domain.beta.kubernetes.io/zone=nozone
  • 重启 Pod

  • 执行以下命令,修改 PVC 对象中的容量,将容量扩容至30G。示例如下:

kubectl patch pvc data-xxxxxx-rabbitmq-0 -p '{"spec":{"resources":{"requests":{"storage":"30Gi"}}}}' -n xxxxxx
  • 执行以下命令,去除 PV 对象之前打上的标签, 标签去除之后 Pod 即可调度成功。示例如下:
kubectl label pv  pvc-7e2639e1-ece2-4fa5-b5f1-687e4db973be  failure-domain.beta.kubernetes.io/zone-
  • 查看是否扩容成功
kubectl get pv -n xxxxxx | grep cbs-expand