变更云盘类型

容器服务ACK提供在集群内创建多种云盘类型的功能,以满足不同场景的存储性能和价格需求。您可以根据业务需求变更云盘的类型。例如,创建云盘时选择了SSD云盘,但后期需要更高的IOPS时,您可以将该云盘变配为ESSD云盘。本文介绍如何变更云盘类型。

索引

前提条件

  • 已创建Kubernetes集群,Kubernetes版本为v1.20及以上,且存储插件选择为CSI。具体操作,请参见已创建Kubernetes托管版集群

  • storage-operator组件版本不低于v1.26.1-50a1499-aliyun。关于升级storage-operator组件的操作,请参见管理组件

  • 若您的集群为ACK专有版集群,则需要为集群WorkerRole和MasterRole配置如下权限。具体操作,请参见创建自定义权限策略

    展开查看ACK专有版集群WorkerRole和MasterRole权限策略内容

    {
        "Version": "1",
        "Statement": [
            {
                "Effect": "Allow",
                "Action": [
                    "ecs:CreateSnapshot",
                    "ecs:DescribeSnapshot",
                    "ecs:DeleteSnapshot",
                    "ecs:ModifyDiskSpec",
                    "ecs:DescribeTaskAttribute"
                ],
                "Resource": "*"
            }
        ]
    }
    说明

    ACK Pro版集群无需配置权限。

使用限制

  • 不支持ESSD AutoPL云盘和ESSD PL-X云盘的变配。

  • 关于变更云盘类型的限制条件,请参见限制条件

注意事项

关于变更云盘类型的注意事项,请参见注意事项

计费说明

关于变更云盘类型的计费说明,请参见计费说明

使用方式

  1. 使用以下命令,修改集群中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\"}"}}'
  2. 使用以下内容,在集群中创建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

使用示例

  1. 使用以下内容,创建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****    
  2. 执行以下命令,部署一个使用云盘存储的应用。

    kubectl apply -f sts-test.yaml
  3. 执行以下命令,查看Pod状态。

    kubectl get pods sts-test-0

    预期输出:

    NAME          READY  STATUS    RESTARTS
    sts-test-0    1/1    Running   0
  4. 等待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。

  5. 使用以下内容,将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"
  6. 观察CR status状态变为SUCCESS,表明云盘变配任务已完成。

    CR

  7. 执行以下命令,查看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类型。