ACK支持使用多种类型的云盘作为存储卷,可以满足不同场景的存储性能和成本需求。使用云盘存储卷时,您可以根据需求变更云盘类型。例如您在创建云盘时选择了SSD云盘,但后期需要更高的IOPS,您可以将SSD云盘变配为ESSD云盘。
前提条件
-
集群的版本为1.20及以上,并且使用CSI存储插件。
如需升级集群,请参见手动升级集群。
-
集群中已安装storage-operator组件,且组件版本不低于v1.26.1-50a1499-aliyun。
storage-operator在集群中默认安装,可在集群管理页的左侧导航栏选择,确认组件安装情况。
storage-operator中默认的storage-controller负责云盘变配。组件为v1.33.1以下版本时,还需修改storage-operator的ConfigMap,手动开启。
-
如果集群为ACK专有集群,需确保集群的WorkerRole和MasterRole具备ModifyDiskSpec权限。具体操作,请参见创建自定义权限策略。
ACK托管集群无需进行此授权。
注意事项
-
普通云盘、弹性临时盘不支持变更类型。
支持变配的情况如下:
ESSD云盘
属于本地冗余类型云盘:
PL0支持直接变配到:
ESSD 云盘PL1、PL2或PL3
ESSD AutoPL云盘
ESSD 同城冗余云盘
只有作为数据盘使用时,才支持变配到ESSD 同城冗余云盘。
PL1、PL2、PL3根据计费方式,支持如下变配情况:
如果原云盘的计费方式为按量付费。
PL1、PL2及PL3性能级别间可相互变配
可直接变配到ESSD AutoPL 云盘
仅PL1支持直接变配到ESSD 同城冗余云盘
只有作为数据盘使用时,才支持变配到ESSD 同城冗余云盘。
如果原云盘的计费方式为包年包月,仅支持升高性能配置。
ESSD 云盘PL1变配到ESSD云盘PL2
ESSD 云盘PL1变配到ESSD云盘PL3
ESSD 云盘PL2变配到ESSD云盘PL3
ESSD 云盘PL1变配到ESSD AutoPL云盘
ESSD 云盘PL1数据盘可变配到ESSD 同城冗余云盘
ESSD AutoPL云盘
属于本地冗余类型云盘,支持直接变配到:
ESSD 同城冗余云盘
属于同城冗余类型云盘:
请选择需要变配的可用区。
云盘状态为使用中:选项置灰且不可选择。变配后的本地冗余云盘的可用区与当前云盘所挂载实例的可用区相同。
云盘状态为待挂载:变配后的本地冗余云盘仅支持挂载至所选可用区下的实例。
选择变配后的云盘类型。
支持直接变配到:
ESSD 云盘PL1、PL2或PL3
ESSD AutoPL云盘
ESSD Entry云盘
属于本地冗余类型云盘,支持直接变配到:
ESSD云盘PL0、PL1、PL2或PL3
ESSD AutoPL云盘
ESSD 同城冗余云盘
只有作为数据盘使用时,支持变配为ESSD 同城冗余云盘。
高效云盘
属于本地冗余类型云盘,支持直接变配到:
SSD云盘
ESSD Entry云盘
仅通用算力型(U实例)和经济型实例规格族e支持挂载。
ESSD云盘PL0、PL1、PL2或PL3
ESSD AutoPL云盘
SSD云盘
属于本地冗余类型云盘,支持直接变配到:
ESSD云盘PL1、PL2或PL3
ESSD AutoPL云盘
当变配涉及到ESSD同城冗余云盘时,暂不支持调整存储卷的亲和性设置。例如,将ESSD云盘变配为ESSD同城冗余云盘后,使用该云盘的Pod将依然无法调度到其他可用区。
-
某些类型的云盘不支持挂载到某些规格的ECS实例,您需要确保当前Pod所调度到的ECS实例支持变更后的云盘类型。关于云盘类型和ECS实例规格的匹配关系,请参见实例规格族。
-
作为存储卷的云盘必须采用按量付费方式,变更云盘类型后,会直接按照新的云盘类型进行计费。
-
为了减少变配操作对您业务带来的影响,请在业务低峰期进行变配。
更多信息,请参见适用范围。
步骤一:创建示例工作负载
如果已有挂载了云盘的StatefulSet,可跳过该步骤。
-
使用以下内容,创建StatefulSet.yaml文件。
以下YAML将创建一个StatefulSet,该StatefulSet包含一个Pod,Pod挂载了一个40 GiB的ESSD PL1云盘。
apiVersion: apps/v1 kind: StatefulSet metadata: name: nginx-diskspec spec: selector: matchLabels: app: nginx replicas: 1 template: metadata: labels: app: nginx spec: containers: - name: nginx image: anolis-registry.cn-zhangjiakou.cr.aliyuncs.com/openanolis/nginx:1.14.1-8.6 ports: - containerPort: 80 volumeMounts: - name: pvc-disk mountPath: /data volumes: - name: pvc-disk persistentVolumeClaim: claimName: disk-pvc volumeClaimTemplates: - metadata: name: pvc-disk labels: app: nginx spec: accessModes: [ "ReadWriteOnce" ] storageClassName: "alicloud-disk-essd" resources: requests: storage: 40Gi -
创建StatefulSet。
kubectl create -f StatefulSet.yaml -
查看Pod部署情况。
kubectl get pod -l app=nginx预期输出:
NAME READY STATUS RESTARTS AGE nginx-diskspec-0 1/1 Running 0 4m4s -
查看PVC信息,并获取PV名称。
kubectl get pvc pvc-disk-nginx-diskspec-0返回示例如下,从
VOLUME字段中可以获得PV名称为d-uf6ijdcp3aeoi82w****。NAME STATUS VOLUME CAPACITY ACCESS MODES STORAGECLASS VOLUMEATTRIBUTESCLASS AGE pvc-disk-nginx-diskspec-0 Bound d-uf6ijdcp3aeoi82w**** 40Gi RWO alicloud-disk-essd <unset> 5m6s
步骤二:确认变更前的云盘类型
在变更前,确认当前挂载的云盘类型。
kubectl get pv d-uf6ijdcp3aeoi82w**** -o=jsonpath='{.metadata.labels}'
返回示例如下,cloud_essd.PL1表示当前云盘类型为ESSD云盘PL1。
{"csi.alibabacloud.com/disktype":"cloud_essd.PL1"}
步骤三:创建CR,执行云盘变配操作
-
创建cr.yaml文件。
YAML示例如下,请根据实际情况替换
pvNames和desiredDiskType。apiVersion: storage.alibabacloud.com/v1beta1 kind: ContainerStorageOperator metadata: name: default spec: operationType: DISKUPGRADE operationParams: pvNames: "d-uf6ijdcp3aeoi82w****" desiredDiskType: "cloud_auto"参数
说明
operationType取值为DISKUPGRADE,表明当前的操作为云盘变配。
pvNames声明操作对象(PV名称),支持填写多个pvName,多个pvName间使用英文半角逗号(,)隔开,例如
"disk-1***,disk-2***,disk-3***"。desiredDiskType声明变更后的云盘类型。请根据注意事项中支持的变配类型进行配置。
-
cloud_auto:ESSD AutoPL云盘 -
cloud_essd.PL0:ESSD云盘PL0 -
cloud_essd.PL1:ESSD云盘PL1 -
cloud_essd.PL2:ESSD云盘PL2 -
cloud_essd.PL3:ESSD云盘PL3 -
cloud_ssd:SSD云盘
-
-
创建CR。
kubectl create -f cr.yaml -
确认变更后的云盘类型。
-
观察CR Status,确认变配操作成功。
kubectl get ContainerStorageOperator default -o yaml在返回的
status字段中确认状态,示例如下:status: message: [] process: 100% status: SUCCESS -
查看PV的Label,确认已经变配到ESSD AutoPL云盘。
kubectl get pv d-uf6ijdcp3aeoi82w**** -o=jsonpath='{.metadata.labels}'预期输出:
{"csi.alibabacloud.com/disktype":"cloud_auto"}
-