容器服务 在线扩容云硬盘

TKE 支持在线扩容 PV、对应的云硬盘及文件系统,无需重启 Pod 即可完成扩容。为确保文件系统的稳定性,建议在云硬盘文件系统处于未挂载状态时进行操作。

相关产品
容器服务 产品页,含版本规格、价格与购买入口。

一、前提条件

·已创建1.16或以上版本的 TKE 集群。

·已将 CBS-CSI 升级至最新版本。

·(可选)为避免扩容失败导致数据丢失,可以在扩容前 使用快照备份数据。

·1.20以下集群中,非 CBS-CSI 类型的 PV 不支持在线扩容。

二、方式一:通过控制台创建允许扩容的 StorageClass

1. 登录 容器服务控制台,单击左侧导航栏中集群。

2. 在集群页面,选择目标集群 ID,进入集群基本信息页面。

3. 选择左侧导航中的存储,在 StorageClass 页面单击新建。如下:

4. 在新建存储页面,勾选启用在线扩容。

三、方式二:使用 YAML 创建允许扩容的 StorageClass

使用以下 YAML 创建允许扩容的 StorageClass,在 StorageClass 中设置 allowVolumeExpansion 为 true。示例如下:

allowVolumeExpansion: trueapiVersion: storage.k8s.io/v1kind: StorageClassmetadata: name: cbs-csiparameters: diskType: CLOUD_PREMIUMprovisioner: com.tencent.cloud.csi.cbsreclaimPolicy: DeletevolumeBindingMode: Immediate

四、方式一:控制台创建允许扩容的 PersistentVolumeClaim

1. 登录 容器服务控制台,单击左侧导航栏中集群。

2. 在集群页面,选择目标集群 ID,进入集群基本信息页面。

3. 选择左侧导航中的存储,在 PersistentVolumeClaim 页面单击新建。如下:

4. 在新建存储页面,指定预先创建的允许扩容的 StorageClass。

五、方式二:使用 YAML 创建允许扩容的 PersistentVolumeClaim

使用以下 YAML 创建允许扩容的 PersistentVolumeClaim,在 StorageClass 中设置 allowVolumeExpansion 为 true。示例如下:

kind: PersistentVolumeClaimapiVersion: v1metadata: name: nginx-pv-claimspec: storageClassName: cbs accessModes: – ReadWriteOnce resources: requests: storage: 10Gi

六、在线扩容

提供以下两种扩容方式:

扩容方式 说明
方式一:重启 Pod 的情况下在线扩容 待扩容的云硬盘文件系统未被挂载,能够避免扩容出错以及方式二存在的问题。推荐使用该方式进行扩容。
方式二:不重启 Pod 的情况下在线扩容 在节点上挂载着待扩容的云硬盘文件系统,如果存在 I/O 进程,将可能出现文件系统扩容错误。

重启 Pod 情况下在线扩容不重启 Pod 情况下在线扩容

1. 执行以下命令,确认扩容前 PV 和文件系统状态。示例如下,PV 和文件系统大小均为30G:

$ kubectl exec ivantestweb-0 — df /usr/share/nginx/htmlFilesystem 1K-blocks Used Available Use% Mounted on/dev/vdd 30832548 44992 30771172 1% /usr/share/nginx/html$ kubectl get pv pvc-e193201e-6f6d-48cf-b96d-ccc09225cf9c NAME CAPACITY ACCESS MODES RECLAIM POLICY STATUS CLAIM STORAGECLASS REASON AGEpvc-e193201e-6f6d-48cf-b96d-ccc09225cf9c 30Gi RWO Delete Bound default/www1-ivantestweb-0 cbs-csi 20h

注意:说明:

注意:1.1 登录 容器服务控制台,在集群页面,单击目标集群 ID,进入集群详情页。

注意:1.2 选择左侧导航中的存储,在 PersistentVolume 页面查看名称。

2. 执行以下命令,为 PV 对象打上一个非法 zone 标签,使 Pod 重启后无法调度到某个节点上。示例如下:

$ kubectl label pv pvc-e193201e-6f6d-48cf-b96d-ccc09225cf9c failure-domain.beta.kubernetes.io/zone=nozone

3. 执行以下命令重启 Pod,重启后由于 Pod 对应的 PV 的标签表明的是非法 zone,Pod 将处于 Pending 状态。示例如下:

$ kubectl delete pod ivantestweb-0$ kubectl get pod ivantestweb-0NAME READY STATUS RESTARTS AGEivantestweb-0 0/1 Pending 0 25s$ kubectl describe pod ivantestweb-0Events:Type Reason Age From Message—- —— —- —- ——-Warning FailedScheduling 40s (x3 over 2m3s) default-scheduler 0/1 nodes are available: 1 node(s) had no available volume zone.

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

kubectl patch pvc nginx-pv-claim -p '{"spec":{"resources":{"requests":{"storage":"40Gi"}}}}'

5. 执行以下命令,去除 PV 对象之前打上的标签, 标签去除之后 Pod 即可调度成功。示例如下:

$ kubectl label pv pvc-e193201e-6f6d-48cf-b96d-ccc09225cf9c failure-domain.beta.kubernetes.io/zone-persistentvolume/pvc-e193201e-6f6d-48cf-b96d-ccc09225cf9c unlabeled

6. 执行以下命令,可以查看 Pod 状态为 Running,以及对应的 PV 和文件系统扩容成功,从30G扩容到40G。示例如下:

$ kubectl get pod ivantestweb-0NAME READY STATUS RESTARTS AGEivantestweb-0 1/1 Running 0 17m$ kubectl get pv pvc-e193201e-6f6d-48cf-b96d-ccc09225cf9cNAME CAPACITY ACCESS MODES RECLAIM POLICY STATUS CLAIM STORAGECLASS REASON AGEpvc-e193201e-6f6d-48cf-b96d-ccc09225cf9c 40Gi RWO Delete Bound default/www1-ivantestweb-0 cbs-csi 20h$ kubectl get pvc www1-ivantestweb-0NAME STATUS VOLUME CAPACITY ACCESS MODES STORAGECLASS AGEwww1-ivantestweb-0 Bound pvc-e193201e-6f6d-48cf-b96d-ccc09225cf9c 40Gi RWO cbs-csi 20h$ kubectl exec ivantestweb-0 df /usr/share/nginx/htmlFilesystem 1K-blocks Used Available Use% Mounted on/dev/vdd 41153760 49032 41088344 1% /usr/share/nginx/html

1. 执行以下命令,确认扩容前 PV 和文件系统状态。示例如下,PV 和文件系统大小均为20G:$ kubectl exec ivantestweb-0 — df /usr/share/nginx/htmlFilesystem 1K-blocks Used Available Use% Mounted on/dev/vdd 20511312 45036 20449892 1% /usr/share/nginx/html$ kubectl get pv pvc-e193201e-6f6d-48cf-b96d-ccc09225cf9cNAME CAPACITY ACCESS MODES RECLAIM POLICY STATUS CLAIM STORAGECLASS REASON AGEpvc-e193201e-6f6d-48cf-b96d-ccc09225cf9c 20Gi RWO Delete Bound default/www1-ivantestweb-0 cbs-csi 20h说明:PV 名称(如 pvc-e193201e-6f6d-48cf-b96d-ccc09225cf9c)查询方式:1. 登录 容器服务控制台,在集群页面,单击目标集群 ID,进入集群详情页。2. 选择左侧导航中的存储,在 PersistentVolume 页面查看名称。2. 执行以下命令,修改 PVC 对象中的容量,将容量扩容至30G。示例如下:$ kubectl patch pvc ivantestweb-0 -p '{"spec":{"resources":{"requests":{"storage":"30Gi"}}}}'注意:扩容后的 PVC 对象容量的大小必须为10的倍数,不同硬盘类型所支持的存储容量规格可参考说明 云硬盘类型。3. 执行以下命令,可以查看到 PV 和文件系统已扩容至30G。示例如下:$ kubectl exec ivantestweb-0 — df /usr/share/nginx/htmlFilesystem 1K-blocks Used Available Use% Mounted on/dev/vdd 30832548 44992 30771172 1% /usr/share/nginx/html$ kubectl get pv pvc-e193201e-6f6d-48cf-b96d-ccc09225cf9cNAME CAPACITY ACCESS MODES RECLAIM POLICY STATUS CLAIM STORAGECLASS REASON AGEpvc-e193201e-6f6d-48cf-b96d-ccc09225cf9c 30Gi RWO Delete Bound default/www1-ivantestweb-0 cbs-csi 20h

赞 (0)
上一篇 4天前
下一篇 4天前