详情页标题前

阿里云容器服务ACK使用云盘动态存储卷-云淘科技

详情页1

云盘是阿里云为云服务器ECS提供的数据块级别的块存储产品,具有低时延、高性能、持久性、高可靠等特点。ACK支持使用CSI插件创建云盘动态存储卷。本文介绍如何使用云盘动态存储卷,以及如何验证云盘动态存储卷的持久化存储特性。

索引

  • 前提条件

  • 使用说明

  • 操作步骤

    • 通过控制台的方式使用云盘动态存储卷

    • 通过kubectl命令行的方式使用云盘动态存储卷

  • 验证动态云盘的持久化存储

前提条件

  • 已创建Kubernetes托管版集群

  • 已通过kubectl工具连接集群

使用说明

类别

说明

使用场景

没有提前购买云盘,在应用部署时自动购买云盘的情况。

使用方式

  • 手动创建PVC,在PVC中声明StorageClass。

  • 部署应用时通过StorageClass自动创建PV。

有关StorageClass的详细说明,请参见存储类(StorageClass)。

操作步骤

您可以通过以下两种方式使用云盘动态存储卷。

通过控制台的方式使用云盘动态存储卷

步骤一:创建StorageClass

  1. 登录容器服务管理控制台,在左侧导航栏选择集群

  2. 集群列表页面,单击目标集群名称,然后在左侧导航栏,选择存储 > 存储类

  3. 存储类页面,单击右上角的创建

  4. 创建对话框,配置StorageClass的相关参数。

    主要配置项说明如下。

    配置项

    说明

    名称

    StorageClass的名称。

    名称必须以小写字母开头,只能包含小写字母、数字、小数点(.)和短划线(-)。

    存储卷类型

    可选择云盘NAS。本示例选择云盘

    存储驱动

    默认为CSI

    参数

    • 默认参数type,其值为cloud_essd。表示云盘类型,支持cloud_efficiency、cloud_auto、cloud_ssd、cloud_essd、available五种参数及除available外其他四种参数的任意组合。例如type: cloud_efficiency, cloud_ssd, cloud_essd,此配置方式支持对指定类型云盘的依次创建,直到创建成功。其中available会对SSD、高效依次尝试创建,直到创建成功。

    说明

    部分ECS机型不支持ESSD云盘挂载。更多信息,请参见块存储FAQ。

    • 可添加自定义参数。支持自定义的参数说明如下:

      • resourceGroupId:可选,定义云盘的资源组。默认为””。

      • regionId:可选,自动创建云盘所在的地域,与集群的地域相同。

      • zoneId:可选,自动创建云盘所在的区域。

        • 单可用区集群,与集群所在区域相同。

        • 多可用区集群,zoneId可同时配置多个,例如cn-beijing-a, cn-beijing-b

      • fstype:可选,自动创建云盘所使用的文件系统,默认为ext4

      • mkfsOptions:可选,云盘格式化所用的参数。例如mkfsOptions: "-O project,quota"

      • diskTags:可选,自定义云盘Tag。例如diskTags: "a:b,b:c"

      • encrypted:可选,表示创建的云盘是否加密。默认为false,创建的云盘不加密。

      • performanceLevel:可选,取值PL0、PL1、PL2或PL3。默认值为PL1。更多信息,请参见容量范围与性能级别的关系。

      • volumeExpandAutoSnapshot:可选,云盘扩容时通过极速快照实现自动数据备份,保证数据安全,默认为closed。

        • forced:自动快照创建失败时放弃云盘扩容。

        • besteffort:自动快照创建失败时报event warning,继续进行云盘扩容。

        • closed:不使用自动快照功能。

        如果数据安全性要求高,推荐使用forced方式避免扩容失败时的数据丢失。

        说明

        仅支持对ESSD云盘。扩容正常时自动快照将自动删除,扩容失败时自动快照保留24小时。

      • provisionedIops:可选,云盘预配置的读写IOPS。

        可能值:0~min{50,000, 1000×容量-基准性能}。

        基准性能=min{1,800+50×容量, 50000}。

        说明

        仅支持ESSD AutoPL云盘。更多内容,请参见ESSD AutoPL云盘规格。

      • burstingEnabled:可选,是否开启Burst(性能突发)。默认为false。

        • true:开启。

        • false:不开启。

        说明

        仅支持ESSD AutoPL云盘。更多内容,请参见ESSD AutoPL云盘规格。

    回收策略

    云盘的回收策略,默认为Delete,支持Retain。

    • Delete模式:删除PVC时,PV和云盘会一起删除。

    • Retain模式:删除PVC时,PV和云盘数据不会被删除,需要您手动删除。

    如果数据安全性要求高,推荐使用Retain方式以免误删数据。

    绑定模式

    云盘的绑定模式。默认为Immediate,支持WaitForFirstConsumer。

    • Immediate:表示先创建云盘再创建Pod。

    • WaitForFirstConsumer:延迟绑定,即调度器先调度Pod,并根据Pod的可用区信息创建云盘。

  5. 参数配置完成后,单击创建

    创建成功后,在存储类列表中可看到刚创建的StorageClass。

步骤二:创建PVC

  1. 在集群管理页左侧导航栏,选择存储 > 存储声明

  2. 存储声明页面,单击右上角的创建

  3. 创建存储声明对话框中,配置参数。

    配置项

    说明

    存储声明类型

    支持云盘、NAS、OSS三种云存储类型。本示例选择云盘。

    名称

    创建的存储声明名称在命名空间内必须唯一。

    分配模式

    本示例选择使用存储类动态创建

    已有存储类

    单击选择存储类,在选择存储类对话框目标存储类右侧操作列单击选择

    总量

    所创建存储卷的容量。

    访问模式

    默认为ReadWriteOnce,也可选择ReadOnlyMany或ReadWriteMany。

  4. 单击创建

    创建成功后,在存储声明列表中可看到创建的存储声明,并且已绑定相应的存储卷。

步骤三:创建应用

  1. 在集群管理页左侧导航栏,选择工作负载 > 有状态

  2. 有状态页面,单击使用镜像创建

  3. 配置创建应用的参数信息。

    以下主要为您介绍数据卷的配置。关于其他参数的描述,请参见创建有状态工作负载StatefulSet。

    ACK数据卷支持配置本地存储和云存储,本示例需要配置云存储类型。

    本例中配置了一个云盘类型的数据卷,将该云盘挂载到容器中/tmp路径下,在该路径下生成的容器数据会存储到云盘中。

    阿里云容器服务ACK使用云盘动态存储卷-云淘科技
  4. 所有的信息都配置完成后,单击创建

    创建成功后,您就可以正常使用数据卷。

通过kubectl命令行的方式使用云盘动态存储卷

步骤一:创建StorageClass

在多可用区集群场景下,您可以根据不同的场景通过以下两种方式创建StorageClass。

方式一:使用Topology(延迟绑定)方式创建StorageClass

延迟绑定可以优化ECS和云盘不在一个可用区的问题。以下以部署名为storage-class-csi-wffc.yaml文件为例,创建StorageClass。

  1. 使用以下内容,创建storage-class-csi-wffc.yaml文件。

    apiVersion: storage.k8s.io/v1
    kind: StorageClass
    metadata:
      name: alicloud-disk-wait-for-first-consumer
    provisioner: diskplugin.csi.alibabacloud.com
    parameters:
      type: cloud_auto,cloud_essd,cloud_ssd # 使用该配置,按优先级自适应选择云盘类型,最终创建的云盘类型受节点实例、所在可用区云盘支持情况等因素影响。
      fstype: ext4
      diskTags: "a:b,b:c"
      encrypted: "false"
      performanceLevel: PL1
      volumeExpandAutoSnapshot: "forced" # 该设置仅在创建的云盘类型为cloud_essd时生效。
      provisionedIops: "40000"
      burstingEnabled: "false"
    volumeBindingMode: WaitForFirstConsumer
    reclaimPolicy: Retain
    allowVolumeExpansion: true

    参数

    说明

    metadata

    name

    StorageClass的名称。

    provisioner

    配置为diskplugin.csi.alibabacloud.com。表示使用阿里云云盘Provisioner插件创建StorageClass。

    parameters

    type

    表示云盘类型,支持cloud_efficiency、cloud_auto、cloud_ssd、cloud_essd、available五种参数及除available外其他四种参数的任意组合。例如,type: cloud_efficiency, cloud_ssd, cloud_essd,此配置方式支持对指定类型云盘的依次创建,直到创建成功。其中available会对SSD、高效依次尝试创建,直到创建成功。

    说明

    部分ECS机型不支持ESSD云盘挂载。更多信息,请参见块存储FAQ。

    resourceGroupId

    可选,定义云盘的资源组。默认为””。

    regionId

    可选,自动创建云盘所在的地域,与集群的地域相同。

    zoneId

    可选,自动创建云盘所在的区域。

    • 单可用区集群,与集群所在区域相同。

    • 多可用区集群,zoneId可同时配置多个,例如,

      zoneId: cn-hangzhou-a,cn-hangzhou-b,cn-hangzhou-c

    重要

    若您在StorageClass中使用了zoneId参数,由默认的WaitForFirstConsumer参数产生的zoneId将不会生效,此处请谨慎使用。

    fstype

    可选,自动创建云盘所使用的文件系统,默认为ext4。

    mkfsOptions

    可选,云盘格式化所用的参数。例如mkfsOptions: "-O project,quota"

    diskTags

    可选,自定义云盘Tag。例如diskTags: "a:b,b:c"

    encrypted

    可选,表示创建的云盘是否加密。默认为false,创建的云盘不加密。

    performanceLevel

    可选,取值PL0、PL1、PL2或PL3。默认值为PL1。更多信息,请参见容量范围与性能级别的关系。

    volumeExpandAutoSnapshot

    可选,云盘扩容时通过极速快照实现自动数据备份,保证数据安全,默认为closed。

    • forced:自动快照创建失败时放弃云盘扩容。

    • besteffort:自动快照创建失败时报event warning,继续进行云盘扩容。

    • closed:不使用自动快照功能。

    如果数据安全性要求高,推荐使用forced方式避免扩容失败时的数据丢失。

    说明

    仅支持对ESSD云盘。扩容正常时自动快照将自动删除,扩容失败时自动快照保留24小时。

    provisionedIops

    可选,云盘预配置的读写IOPS。

    可能值:0~min{50,000, 1000×容量-基准性能}。

    基准性能=min{1,800+50×容量, 50000}。

    说明

    仅支持ESSD AutoPL云盘。更多内容,请参见ESSD AutoPL云盘规格。

    burstingEnabled

    可选,是否开启Burst(性能突发)。默认为false。

    • true:开启。

    • false:不开启。

    说明

    仅支持ESSD AutoPL云盘。更多内容,请参见ESSD AutoPL云盘规格。

    volumeBindingMode

    云盘的绑定模式。默认为Immediate,支持WaitForFirstConsumer。

    • Immediate:表示先创建云盘再创建Pod。

    • WaitForFirstConsumer:延迟绑定,即调度器先调度Pod,并根据Pod的可用区信息创建云盘。

    reclaimPolicy

    云盘的回收策略,默认为Delete,支持Retain。

    • Delete模式:删除PVC的时候,PV和云盘会一起删除。

    • Retain模式:删除PVC的时候,PV和云盘数据不会被删除,需要您手动删除。

    如果数据安全性要求高,推荐使用Retain方式以免误删数据。

    allowVolumeExpansion

    配置为true时,可以实现云盘的自动扩容。

  2. 执行以下命令,创建StorageClass。

    kubectl apply -f storage-class-wffc.yaml
  3. 查看创建的StorageClass。

    1. 登录容器服务管理控制台。

    2. 在控制台左侧导航栏,单击集群

    3. 集群列表页面,单击目标集群名称或者目标集群右侧操作列下的详情

    4. 在集群管理页左侧导航栏中,选择存储 > 存储类

      存储类页面,查看创建的StorageClass。

方式二:先创建云盘再创建Pod的方式创建StorageClass

  1. 使用以下内容,创建storage-class-immediate.yaml文件。

    apiVersion: storage.k8s.io/v1
    kind: StorageClass
    metadata:
      name: alicloud-disk-immediate
    provisioner: diskplugin.csi.alibabacloud.com
    parameters:
      type: cloud_essd,cloud_ssd,cloud_efficiency #使用该配置,按优先级自适应选择云盘类型,最终创建的云盘类型受节点实例、所在可用区云盘支持情况等因素影响
      regionId: cn-beijing
      zoneId: cn-beijing-b
      encrypted: "false"
    reclaimPolicy: Retain
    allowVolumeExpansion: true
    volumeBindingMode: Immediate

    参数

    说明

    provisioner

    配置为diskplugin.csi.alibabacloud.com。表示使用阿里云云盘Provisioner插件创建StorageClass。

    parameters

    type

    表示云盘类型,支持cloud_efficiency、cloud_auto、cloud_ssd、cloud_essd、available五种参数及除available外其他四种参数的任意组合。例如,type: cloud_efficiency, cloud_ssd, cloud_essd,此配置方式支持对指定类型云盘的依次创建,直到创建成功。其中available会对SSD、高效依次尝试创建,直到创建成功。

    说明

    部分ECS机型不支持ESSD云盘挂载。更多信息,请参见块存储FAQ。

    regionId

    可选,期望创建云盘的区域。

    zoneId

    可选,期望创建云盘的可用区。

    encrypted

    可选,标识创建的云盘是否加密。默认情况是false,创建的云盘不加密。

    provisionedIops

    可选,云盘预配置的读写IOPS。

    可能值:0~min{50,000, 1000×容量-基准性能}。

    基准性能=min{1,800+50×容量, 50000}。

    说明

    仅支持ESSD AutoPL云盘。更多内容,请参见ESSD AutoPL云盘规格。

    burstingEnabled

    可选,是否开启Burst(性能突发)。默认为false。

    • true:开启。

    • false:不开启。

    说明

    仅支持ESSD AutoPL云盘。更多内容,请参见ESSD AutoPL云盘规格。

    reclaimPolicy

    云盘的回收策略,默认为Delete,支持Retain。

    • Delete模式:删除PVC的时候,PV和云盘会一起删除。

    • Retain模式:删除PVC的时候,PV和云盘数据不会被删除,需要您手动删除。

    如果数据安全性要求高,推荐使用Retain方式以免误删数据。

    allowVolumeExpansion

    配置为true时,可以实现云盘的自动扩容。

    volumeBindingMode

    云盘的绑定模式。默认为Immediate,支持WaitForFirstConsumer。

    • Immediate:表示先创建云盘再创建Pod。

    • WaitForFirstConsumer:延迟绑定,即调度器先调度Pod,并根据Pod的可用区信息创建云盘。

  2. 执行以下命令,创建StorageClass。

    kubectl apply -f storage-class-immediate.yaml
  3. 查看创建的StorageClass。

    1. 登录容器服务管理控制台。

    2. 在控制台左侧导航栏,单击集群

    3. 集群列表页面,单击目标集群名称或者目标集群右侧操作列下的详情

    4. 在集群管理页左侧导航栏中,选择存储 > 存储类

      存储类页面,查看创建的StorageClass。

步骤二:创建PVC

  1. 使用以下内容,创建pvc-disk.yaml文件。

    apiVersion: v1
    kind: PersistentVolumeClaim
    metadata:
      name: disk-pvc
    spec:
      accessModes:
      - ReadWriteOnce
      volumeMode: Filesystem
      resources:
        requests:
          storage: 25Gi
      storageClassName: alicloud-disk-wait-for-first-consumer 

    参数

    说明

    name

    PVC的名称。

    accessModes

    配置访问模式。

    volumeMode

    可选,挂载云盘的格式,为Filesystem或Block。 默认为文件系统挂载。

    storageClassName

    StorageClass的名称,用于绑定StorageClass。

    storage

    申请的云盘大小,最小为20 GiB。

  2. 执行以下命令,创建PVC。

    kubectl create -f pvc-disk.yaml
  3. 查看创建的PVC。

    在集群管理页左侧导航栏,选择存储 > 存储声明。在存储声明页面可以看到创建的PVC。

步骤三:创建应用

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

    apiVersion: apps/v1
    kind: StatefulSet
    metadata:
      name: mysql
    spec:
      selector:
        matchLabels:
          app: mysql
      serviceName: mysql
      template:
        metadata:
          labels:
            app: mysql
        spec:
          containers:
          - name: mysql
            image: mysql:5.7
            env:
            - name: MYSQL_ROOT_PASSWORD
              valueFrom:
                secretKeyRef:
                  name: mysql-pass
                  key: password
            ports:
            - containerPort: 80
              name: mysql
            volumeMounts:
            - name: pvc-disk
              mountPath: /data
          volumes:
            - name: pvc-disk
              persistentVolumeClaim:
                claimName: disk-pvc
    ---
    apiVersion: v1
    kind: Secret
    metadata:
      name: mysql-pass
    type: Opaque
    data:
      username: dGVz****             
      password: dGVzdDEt****     

    参数

    说明

    mountPath

    云盘挂载的位置。

    claimName

    PVC的名称,用于绑定PVC。

  2. 执行以下命令,创建应用并挂载PVC。

    kubectl create -f mysql.yaml
  3. 查看已创建的应用。

    在集群管理页左侧导航栏,选择工作负载 > 有状态。您可以在有状态页面看到已创建的应用。

验证动态云盘的持久化存储

云盘提供了持久化存储服务,当某个Pod删除时,重新部署的Pod将自动同步之前Pod的所有数据。

根据以下示例,验证动态云盘的持久化存储特性。

  1. 查看MySQL应用所在的Pod和云盘文件。

    1. 执行以下命令,查看MySQL应用所在Pod的名称。

      kubectl get pod | grep mysql

      预期输出:

      nginx-dynamic-1****   1/1     Running     0          3m
    2. 执行以下命令,查看/data路径下是否挂载了新的云盘。

      kubectl exec nginx-dynamic-1**** -- df | grep data

      预期输出:

      /dev/vdh        20511312    45080  20449848   1% /data
    3. 执行以下命令,查看/data路径下的文件。

      kubectl exec nginx-dynamic-1**** -- ls /data

      预期输出:

      lost+found
  2. 在云盘里创建文件。

    1. 执行以下命令,在/data路径下创建文件MySQL。

      kubectl exec nginx-dynamic-1**** -- touch /data/mysql
    2. 执行以下命令,查看/data路径下的文件。

      kubectl exec nginx-dynamic-1**** -- ls /data

      预期输出:

      mysql
      lost+found
  3. 执行以下命令,删除名为nginx-dynamic-1****的Pod。

    kubectl delete pod nginx-dynamic-1****

    预期输出:

    pod "nginx-dynamic-1****" deleted
  4. 验证删除Pod后,云盘中创建的文件是否仍然存在。

    1. 执行以下命令,查看重建的Pod名称。

      kubectl get pod 

      预期输出:

      NAME                       READY   STATUS      RESTARTS   AGE
      nginx-dynamic-2****        1/1     Running     0          2m
    2. 执行以下命令,查看/data路径下的文件。

      kubectl exec nginx-dynamic-2**** -- ls /data

      预期输出:

      mysql
      lost+found

      MySQL文件仍然存在,说明动态云盘的数据可持久保存。

内容没看懂? 不太想学习?想快速解决? 有偿解决: 联系专家

阿里云企业补贴进行中: 马上申请

腾讯云限时活动1折起,即将结束: 马上收藏

同尘科技为腾讯云授权服务中心。

购买腾讯云产品享受折上折,更有现金返利:同意关联,立享优惠

转转请注明出处:https://www.yunxiaoer.com/170602.html

(0)
上一篇 2023年12月10日 下午1:17
下一篇 2023年12月10日
详情页2

相关推荐

  • 阿里云容器服务ACK在CloudShell上通过kubectl管理Kubernetes集群-云淘科技

    CloudShell是阿里云推出的云命令行工具,您可以在任意浏览器上运行CloudShell命令管理阿里云资源。本文介绍如何在容器服务ACK控制台上利用CloudShell通过kubectl管理集群。 前提条件 CloudShell仅支持通过公网连接集群,因此待连接集群的API Server必须已开启公网访问能力。具体操作,请参见控制集群API Server…

    2023年12月10日
  • 阿里云容器服务ACK首次使用容器服务Kubernetes版-云淘科技

    您首次使用容器服务Kubernetes版(Alibaba Cloud Container Service for Kubernetes,简称容器服务ACK)时,需要为服务账号授予系统默认角色。当且仅当该角色被正确授予后,容器服务才能正常地调用相关服务(ECS,OSS、NAS、SLB等),创建集群以及保存日志等。本文介绍在首次使用ACK时如何授权容器服务默认角…

    阿里云容器服务 2023年12月10日
  • 阿里云容器服务ACK使用OSS静态存储卷-云淘科技

    对象存储OSS(Object Storage Service)是阿里云提供的海量、安全、低成本、高持久的云存储服务。本文为您介绍如何通过命令行及控制台的方式使用OSS静态存储卷。 前提条件 已创建Kubernetes托管版集群。 已创建Bucket存储空间。 说明 若Bucket和ECS实例位于相同地域,请选择私网域名。 已通过kubectl连接集群。 背景…

    2023年12月10日
  • 阿里云容器服务ACK功能发布记录-云淘科技

    本文介绍容器服务 Kubernetes 版 ACK(Container Service for Kubernetes)的最新动态。 背景信息 容器服务 Kubernetes 版 ACK(Container Service for Kubernetes)支持的Kubernetes(K8s)版本:v1.28、v1.26、v1.24。关于版本机制更多内容,请参见K…

    阿里云容器服务 2023年12月10日
  • 信息流广告,信息流部分建议宽度830px,只针对默认列表样式,顺序随机
  • 阿里云容器服务ACK使用VPC的多路由表功能-云淘科技

    ACK通过CCM(Cloud Controller Manager)组件在VPC路由表中添加合适的路由来连通集群中Pod之间的网络连接。您可以通过更新cloud-config配置文件让ACK集群使用VPC多路由表功能。本文介绍如何让ACK集群使用VPC支持的多路由表。 前提条件 已创建ACK集群: 创建ACK托管集群。具体操作,请参见创建Kubernetes…

    2023年12月10日

联系我们

400-800-8888

在线咨询: QQ交谈

邮件:admin@example.com

工作时间:周一至周五,9:30-18:30,节假日休息

关注微信
本站为广大会员提供阿里云、腾讯云、华为云、百度云等一线大厂的购买,续费优惠,保证底价,买贵退差。