变更云盘类型

ACK支持使用多种类型的云盘作为存储卷,可以满足不同场景的存储性能和成本需求。使用云盘存储卷时,您可以根据需求变更云盘类型。例如您在创建云盘时选择了SSD云盘,但后期需要更高的IOPS,您可以将SSD云盘变配为ESSD云盘。

前提条件

  • 集群的版本为1.20及以上,并且使用CSI存储插件。

    如需升级集群,请参见手动升级集群

  • 集群中已安装storage-operator组件,且组件版本不低于v1.26.1-50a1499-aliyun。

    说明

    storage-operator组件在集群中默认安装。您可以在集群管理页的左侧导航栏选择运维管理 > 组件管理,在存储页签下确认storage-operator组件的安装情况和版本信息。更多信息,请参见管理storage-operator组件

  • 如果您的集群是ACK专有集群,需确保集群的WorkerRoleMasterRole具备ModifyDiskSpec权限。具体操作,请参见创建自定义权限策略

    ACK托管集群无需进行此授权。

    展开查看权限策略

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

注意事项

  • 普通云盘、弹性临时盘不支持变更类型。

    支持变配的情况如下:

    高效云盘

    属于本地冗余类型云盘,支持变配到:

    说明

    若您需要变配为ESSD 同城冗余云盘:

    • 作为系统盘使用:不支持变配。

    • 作为数据盘使用:不支持直接变配,您可以先变配到ESSD PL0/PL1ESSD AutoPL云盘后,再变配到ESSD 同城冗余云盘。

    SSD云盘

    属于本地冗余类型云盘,支持变配到:

    • ESSD云盘PL1、PL2PL3

    • ESSD AutoPL云盘

    说明

    若您需要变配为ESSD 同城冗余云盘:

    • 作为系统盘使用:不支持变配。

    • 作为数据盘使用:不支持直接变配,您可以先变配到ESSD PL1ESSD AutoPL云盘后,再变配到ESSD 同城冗余云盘。

    ESSD Entry云盘

    属于本地冗余类型云盘,支持变配到:

    • ESSD云盘PL0、PL1、PL2PL3

    • ESSD AutoPL云盘

    • ESSD 同城冗余云盘

      说明

      只有作为数据盘使用时,支持变配为ESSD 同城冗余云盘。

    ESSD云盘

    属于本地冗余类型云盘:

    • PL0支持变配到:

      • ESSD 云盘PL1、PL2PL3

      • ESSD AutoPL云盘

      • ESSD 同城冗余云盘

        说明

        只有作为数据盘使用时,支持变配为ESSD 同城冗余云盘。

    • PL1、PL2、PL3根据计费方式,支持如下变配情况:

      • 如果源云盘是按量付费的计费方式。

        • PL1、PL2PL3性能级别间相互变配

        • 变配到ESSD AutoPL 云盘

        • PL1支持变配到ESSD 同城冗余云盘

          说明
          • 只有作为数据盘使用时,才支持变配为ESSD 同城冗余云盘。

          • ESSD PL2PL3类型的数据盘不支持直接变配到ESSD 同城冗余云盘,您可以先变配到ESSD PL1ESSD 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 同城冗余云盘

    属于同城冗余类型云盘:

    1. 选择变配后的云盘类型前需要选择变配的可用区

      • 云盘状态为使用中:选项置灰且不可选择。变配后的本地冗余云盘的可用区与当前云盘所挂载实例的可用区相同。

      • 云盘状态为待挂载:变配后的本地冗余云盘仅支持挂载至所选可用区下的实例。

    2. 支持变配到:

      • ESSD 云盘PL1、PL2PL3

      • ESSD AutoPL云盘

    ESSD PL-X 云盘(邀测)

    属于本地冗余类型云盘:

    • 不支持变配为其他类型,仅支持修改IOPS的大小。

    • 不支持将其他云盘变更为ESSD PL-X 云盘。

    说明

    当变配涉及到ESSD同城冗余云盘时,暂不支持调整存储卷的亲和性设置。例如,您将ESSD云盘变配为ESSD同城冗余云盘后,使用该云盘的Pod将依然无法调度到其他可用区。

  • 某些类型的云盘不支持挂载到某些规格的ECS实例,您需要确保当前Pod所调度到的ECS实例支持变更后的云盘类型。关于云盘类型和ECS实例规格的匹配关系,请参见实例规格族

  • 作为存储卷的云盘必须采用按量付费方式,变更云盘类型后,会直接按照新的云盘类型进行计费。

更多信息,请参见使用限制

步骤一:配置storage-operator组件开启云盘变配

连接集群,执行以下命令修改storage-operatorConfigMap文件,开启云盘变配功能。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实现云盘变配

重要

为了减少变配操作对您业务带来的影响,请您在业务低峰期进行变配。

  1. 创建用于测试云盘变配的StatefulSet。

    如果您已有挂载了云盘的StatefulSet,可跳过该步骤。

    1. 使用以下内容,创建StatefulSet.yaml文件。

      以下YAML将创建一个StatefulSet,该StatefulSet包含一个Pod,Pod挂载了一个40 GiBESSD 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    
    2. 创建StatefulSet。

      kubectl create -f StatefulSet.yaml
    3. 查看Pod部署情况。

      kubectl get pod -l app=nginx

      预期输出:

      NAME                 READY   STATUS    RESTARTS   AGE
      nginx-diskspec-0     1/1     Running   0          4m4s
    4. 查看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
  2. 确认变更前的云盘类型。

    kubectl get pv d-uf6ijdcp3aeoi82w**** -o=jsonpath='{.metadata.labels}'

    返回示例如下,cloud_essd.PL1表示当前云盘类型为ESSD云盘PL1。

    {"csi.alibabacloud.com/disktype":"cloud_essd.PL1"}
  3. 创建CR,执行云盘变配操作。

    1. 创建cr.yaml文件。

      YAML示例如下,请根据实际情况替换pvNamesdesiredDiskType

      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云盘

    2. 创建CR。

      kubectl create -f cr.yaml
  4. 确认变更后的云盘类型。

    1. 观察CR Status,确认变配操作成功。

      kubectl get ContainerStorageOperator default -o yaml

      在返回的status字段中确认状态,示例如下:

        status:
          message: []
          process: 100%
          status: SUCCESS
    2. 查看PVLabel,确认已经变配到ESSD AutoPL云盘。

      kubectl get pv d-uf6ijdcp3aeoi82w**** -o=jsonpath='{.metadata.labels}'

      预期输出:

      {"csi.alibabacloud.com/disktype":"cloud_auto"}