ACK支持使用多种类型的云盘作为存储卷,可以满足不同场景的存储性能和成本需求。使用云盘存储卷时,您可以根据需求变更云盘类型。例如您在创建云盘时选择了SSD云盘,但后期需要更高的IOPS,您可以将SSD云盘变配为ESSD云盘。
前提条件
集群的版本为1.20及以上,并且使用CSI存储插件。
如需升级集群,请参见手动升级集群。
集群中已安装storage-operator组件,且组件版本不低于v1.26.1-50a1499-aliyun。
说明storage-operator组件在集群中默认安装。您可以在集群管理页的左侧导航栏选择管理storage-operator组件。
,在存储页签下确认storage-operator组件的安装情况和版本信息。更多信息,请参见如果您的集群是ACK专有集群,需确保集群的WorkerRole和MasterRole具备ModifyDiskSpec权限。具体操作,请参见创建自定义权限策略。
ACK托管集群无需进行此授权。
注意事项
普通云盘、弹性临时盘不支持变更类型。
支持变配的情况如下:
高效云盘
属于本地冗余类型云盘,支持变配到:
SSD云盘
ESSD Entry云盘
说明仅通用算力型(U实例)和经济型实例规格族e支持挂载ESSD Entry云盘。
ESSD云盘PL0、PL1、PL2或PL3
ESSD AutoPL云盘
说明若您需要变配为ESSD 同城冗余云盘:
作为系统盘使用:不支持变配。
作为数据盘使用:不支持直接变配,您可以先变配到ESSD PL0/PL1或ESSD AutoPL云盘后,再变配到ESSD 同城冗余云盘。
SSD云盘
属于本地冗余类型云盘,支持变配到:
ESSD云盘PL1、PL2或PL3
ESSD AutoPL云盘
说明若您需要变配为ESSD 同城冗余云盘:
作为系统盘使用:不支持变配。
作为数据盘使用:不支持直接变配,您可以先变配到ESSD PL1或ESSD AutoPL云盘后,再变配到ESSD 同城冗余云盘。
ESSD Entry云盘
属于本地冗余类型云盘,支持变配到:
ESSD云盘PL0、PL1、PL2或PL3
ESSD AutoPL云盘
ESSD 同城冗余云盘
说明只有作为数据盘使用时,支持变配为ESSD 同城冗余云盘。
ESSD云盘
属于本地冗余类型云盘:
PL0支持变配到:
ESSD 云盘PL1、PL2或PL3
ESSD AutoPL云盘
ESSD 同城冗余云盘
说明只有作为数据盘使用时,支持变配为ESSD 同城冗余云盘。
PL1、PL2、PL3根据计费方式,支持如下变配情况:
如果源云盘是按量付费的计费方式。
PL1、PL2或PL3性能级别间相互变配
变配到ESSD AutoPL 云盘
PL1支持变配到ESSD 同城冗余云盘
说明只有作为数据盘使用时,才支持变配为ESSD 同城冗余云盘。
ESSD PL2或PL3类型的数据盘不支持直接变配到ESSD 同城冗余云盘,您可以先变配到ESSD PL1或ESSD AutoPL 云盘后,再变配到ESSD 同城冗余云盘。
如果源云盘是包年包月的计费方式,仅支持从低性能模式升配到高性能模式。
ESSD 云盘PL1变配到ESSD云盘PL2
ESSD 云盘PL1变配到ESSD云盘PL3
ESSD 云盘PL2变配到ESSD云盘PL3
ESSD 云盘PL1变配到ESSD AutoPL云盘
ESSD 云盘PL1数据盘可变配到ESSD 同城冗余云盘
说明ESSD 云盘可以选择的性能级别与云盘容量有关,如果您的ESSD云盘无法选择更高性能级别,可以先扩容云盘,然后再升级ESSD云盘性能级别。
如果变配的目标云盘为ESSD PL3云盘,变配完成后需要重新挂载云盘或重启实例才能达到ESSD PL3的最佳性能。如果变配后没有重新挂载云盘或重启实例,则该云盘无法获得ESSD PL3的最佳性能,但不会影响数据的可靠性。
ESSD AutoPL云盘
属于本地冗余类型云盘,支持变配到:
ESSD AutoPL云盘
在变配中可以修改ESSD AutoPL云盘的预配置性能,但不支持变配中修改性能突发,您可在变配成功后开启或关闭ESSD AutoPL云盘的性能突发。
ESSD 同城冗余云盘
ESSD 同城冗余云盘
属于同城冗余类型云盘:
选择变配后的云盘类型前需要选择变配的可用区
云盘状态为使用中:选项置灰且不可选择。变配后的本地冗余云盘的可用区与当前云盘所挂载实例的可用区相同。
云盘状态为待挂载:变配后的本地冗余云盘仅支持挂载至所选可用区下的实例。
支持变配到:
ESSD 云盘PL1、PL2或PL3
ESSD AutoPL云盘
ESSD PL-X 云盘(邀测)
属于本地冗余类型云盘:
不支持变配为其他类型,仅支持修改IOPS的大小。
不支持将其他云盘变更为ESSD PL-X 云盘。
说明当变配涉及到ESSD同城冗余云盘时,暂不支持调整存储卷的亲和性设置。例如,您将ESSD云盘变配为ESSD同城冗余云盘后,使用该云盘的Pod将依然无法调度到其他可用区。
某些类型的云盘不支持挂载到某些规格的ECS实例,您需要确保当前Pod所调度到的ECS实例支持变更后的云盘类型。关于云盘类型和ECS实例规格的匹配关系,请参见实例规格族。
作为存储卷的云盘必须采用按量付费方式,变更云盘类型后,会直接按照新的云盘类型进行计费。
更多信息,请参见使用限制。
步骤一:配置storage-operator组件开启云盘变配
连接集群,执行以下命令修改storage-operator的ConfigMap文件,开启云盘变配功能。storage-operator组件中默认的storage-controller负责云盘变配。
kubectl patch configmap/storage-operator \
-n kube-system \
--type merge \
-p '{"data":{"storage-controller":"{\"imageRep\":\"acs/storage-controller\",\"imageTag\":\"\",\"install\":\"true\",\"template\":\"/acs/templates/storage-controller/install.yaml\",\"type\":\"deployment\"}"}}'
步骤二:创建CR实现云盘变配
为了减少变配操作对您业务带来的影响,请您在业务低峰期进行变配。
创建用于测试云盘变配的StatefulSet。
如果您已有挂载了云盘的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云盘PL0cloud_essd.PL1
:ESSD云盘PL1cloud_essd.PL2
:ESSD云盘PL2cloud_essd.PL3
:ESSD云盘PL3cloud_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"}