ACK支持使用多种类型的云盘作为存储卷,可以满足不同场景的存储性能和成本需求。使用云盘存储卷时,您可以根据需求变更云盘类型。例如您在创建云盘时选择了SSD云盘,但后期需要更高的IOPS,您可以将SSD云盘变配为ESSD云盘。
前提条件
集群的版本为v1.20及以上,并且使用CSI存储插件。
集群中已安装storage-operator组件,且组件版本不低于v1.26.1-50a1499-aliyun。
说明storage-operator组件在集群中默认安装。您可以在集群管理页的左侧导航栏选择管理storage-operator组件。
,在存储页签下确认storage-operator组件的安装情况和版本信息。更多信息,请参见如果您的集群是ACK专有集群,需确保集群的WorkerRole和MasterRole具备ModifyDiskSpec权限。具体操作,请参见创建自定义权限策略。
说明如果是ACK托管集群,无需进行授权操作。
注意事项
当前云盘类型为ESSD AutoPL云盘或者普通云盘时,不支持变更类型。
支持变配的情况如下:
当前云盘类型
可变配到的云盘类型
高效云盘
SSD云盘、ESSD云盘(PL0、PL1、PL2或PL3)、ESSD AutoPL云盘
说明华东1(杭州)D可用区暂不支持高效云盘变更为SSD云盘。
SSD云盘
ESSD云盘(PL0、PL1、PL2或PL3)、ESSD AutoPL云盘
ESSD云盘PL0
ESSD云盘(PL1、PL2或PL3)、ESSD AutoPL云盘
ESSD云盘PL1、PL2、PL3
ESSD云盘PL1、PL2或PL3性能级别间相互变配、ESSD AutoPL云盘
某些类型的云盘不支持挂载到某些规格的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的labels,确认已经变配到ESSD AutoPL云盘。
kubectl get pv d-uf6ijdcp3aeoi82w**** -o=jsonpath='{.metadata.labels}'
预期返回如:
{"csi.alibabacloud.com/disktype":"cloud_auto"}