容器服务ACK提供在集群内创建多种云盘类型的功能,以满足不同场景的存储性能和价格需求。您可以根据业务需求变更云盘的类型。例如,创建云盘时选择了SSD云盘,但后期需要更高的IOPS时,您可以将该云盘变配为ESSD云盘。本文介绍如何变更云盘类型。
索引
前提条件
已创建Kubernetes集群,Kubernetes版本为v1.20及以上,且存储插件选择为CSI。具体操作,请参见已创建Kubernetes托管版集群。
storage-operator组件版本不低于v1.26.1-50a1499-aliyun。关于升级storage-operator组件的操作,请参见管理组件。
若您的集群为ACK专有版集群,则需要为集群WorkerRole和MasterRole配置如下权限。具体操作,请参见创建自定义权限策略。
说明ACK Pro版集群无需配置权限。
使用限制
不支持ESSD AutoPL云盘和ESSD PL-X云盘的变配。
关于变更云盘类型的限制条件,请参见限制条件。
注意事项
关于变更云盘类型的注意事项,请参见注意事项。
计费说明
关于变更云盘类型的计费说明,请参见计费说明。
使用方式
使用以下命令,修改集群中ConfigMap配置。
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。
apiVersion: storage.alibabacloud.com/v1beta1 kind: ContainerStorageOperator metadata: name: default spec: operationType: DISKUPGRADE operationParams: pvNames: "disk-1***,disk-2***,disk-3***" desiredDiskType: "cloud_essd.PL2"
参数
说明
operationType
取值为DISKUPGRADE,表明当前的操作为云盘升级。
pvNames
声明当前的操作对象,支持填写多个pvName,多个pvName间使用英文半角逗号(,)隔开,例如 "disk-1***,disk-2***,disk-3***"。
desiredDiskType
声明变更后的云盘类型,支持如下类型。
cloud_efficiency
cloud_ssd
cloud_essd.PL0
cloud_essd.PL1
cloud_essd.PL2
cloud_essd.PL3
使用示例
使用以下内容,创建sts-test.yaml文件。
apiVersion: apps/v1 kind: StatefulSet metadata: name: sts-test spec: podManagementPolicy: Parallel selector: matchLabels: app: sts-test replicas: 1 serviceName: sts-test template: metadata: labels: app: sts-test spec: containers: - name: mysql image: mysql:5.7 env: - name: MYSQL_ROOT_PASSWORD valueFrom: secretKeyRef: name: mysql-pass key: password imagePullPolicy: IfNotPresent volumeMounts: - name: disk mountPath: /data volumeClaimTemplates: - metadata: name: disk spec: accessModes: [ "ReadWriteMany" ] storageClassName: alicloud-disk-topology-alltype resources: requests: storage: 40Gi --- apiVersion: v1 kind: Secret metadata: name: mysql-pass type: Opaque data: username: dGVz**** password: dGVzdDEt****
执行以下命令,部署一个使用云盘存储的应用。
kubectl apply -f sts-test.yaml
执行以下命令,查看Pod状态。
kubectl get pods sts-test-0
预期输出:
NAME READY STATUS RESTARTS sts-test-0 1/1 Running 0
等待Pod处于Running状态后,执行以下命令,获取Pod关联的pvName。
kubectl get pvc disk-sts-test-0
预期输出:
NAME STATUS VOLUME CAPACITY ACCESS MODES disk-sts-test-0 Bound disk-1aaf007e-36ac-4985-acf0-fc3c85de0e08 500Gi RWX
预期输出表明,此Pod关联的pvName为disk-1aaf007e-36ac-4985-acf0-fc3c85de0e08。
使用以下内容,将pvName作为参数写入CR中并创建。
apiVersion: storage.alibabacloud.com/v1beta1 kind: ContainerStorageOperator metadata: name: default spec: operationType: DISKUPGRADE operationParams: pvNames: "disk-1aaf007e-36ac-4985-acf0-fc3c85de0e08" desiredDiskType: "cloud_essd.PL2"
观察CR status状态变为
SUCCESS
,表明云盘变配任务已完成。执行以下命令,查看PV的labels,确认相关PV是否变更成功。
kubectl get pv disk-1aaf007e-36ac-4985-acf0-fc3c85de0e08 -oyaml
部分预期输出:
labels: csi.alibabacloud.com/disktype:cloud_essd.PL2 name: disk-1aaf007e-36ac-4985-acf0-fc3c85de0e08 resourceVersion:"89703" uid: 5049a02d-dce3-47a0-9cc6-a4b9c6****
预期输出表明,云盘已成功变更为
cloud_essd.PL2
类型。