详情页标题前

阿里云容器服务ACK云盘存储数据安全最佳实践-云淘科技

详情页1

当云盘在线扩容引发数据损坏或云盘非预期删除导致数据丢失时,您可以通过ESSD类型云盘数据卷的自动极速快照功能,实现数据的快速恢复,以保证存储数据的安全性。本文介绍如何使用ESSD云盘的自动极速快照功能实现云盘存储数据安全。

前提条件

  • 已创建Kubernetes集群,且集群版本为1.20及以上。具体操作,请参见创建Kubernetes托管版集群。
  • 访问指定地域的ECS控制台,确认已开启云盘快照服务。具体操作,请参见开通快照。
  • 确保CSI-Plugin和CSI-Provisioner组件版本不低于v1.24.4-7371f039-aliyun。关于升级CSI-Plugin和CSI-Provisioner组件的具体操作,请参见安装与升级CSI组件。

使用场景

云盘在线扩容可能引发的数据损坏

随着业务迭代与使用增长,初始为集群Pod挂载的云盘内存容量和性能配置可能不再满足存储需求。您可以通过扩容云盘存储卷增加业务的可用存储空间。从数据保护出发,最稳定的方案是先停止应用层服务、解除挂载目录,然后再进行数据卷扩容。但大部分应用场景并不能容忍业务Pod的暂停。

为保护业务数据,容器服务ACK提供ESSD类型云盘数据卷在线扩容前的自动极速快照功能,以保证文件系统在线扩容造成数据丢失时,您可以通过云盘快照实现云盘存储数据的恢复。

云盘非预期删除导致的数据丢失

云盘回收策略为Delete模式,您在删除PVC时,PV和云盘将同时被删除。当您误删除了某个云盘时,您需要通过已创建的云盘快照将数据恢复到指定的时间点。若云盘快照不存在或快照创建后云盘有新数据写入,都将导致云盘存储数据丢失。

为保护业务数据,容器服务ACK提供ESSD类型云盘数据卷删除前的自动极速快照功能,将创建的云盘快照保留一段时间,用于恢复云盘非预期删除的数据。

使用效果

  • 云盘扩容失败时,能通过云盘极速快照完整地恢复数据
  • 非预期删除云盘时,能通过云盘极速快照完整地恢复数据。
  • 云盘极速快照秒级创建,降低了在线扩容或删除操作所需的时间。说明 极速快照仅支持ESSD类型云盘使用。

配置要求

CSI-Provisioner组件配置

执行以下命令,将kube-system命名空间下CSI-Provisioner的containers字段添加env配置:VOLUME_DEL_AUTO_SNAP: "true"

kubectl patch deploy csi-provisioner -n kube-system -p '{"spec":{"template":{"spec":{"containers":[{"name":"csi-provisioner","env":[{"name":"VOLUME_DEL_AUTO_SNAP","value":"true"}]}]}}}}'

说明 仅在VOLUME_DEL_AUTO_SNAPtrue时,允许使用ESSD云盘扩容前自动创建极速快照功能。

集群存储类配置

使用以下模板配置集群的存储类。

apiVersion: storage.k8s.io/v1
kind: StorageClass
metadata:
  name: alicloud-datasafe-essd
provisioner: diskplugin.csi.alibabacloud.com
parameters:
  type: cloud_essd
  volumeExpandAutoSnapshot: "forced"       # 该设置仅在type为"cloud_essd"时生效。
  volumeDeleteSnapshotRetentionDays: "3"   # 该设置仅在reclaimPolicy为"Delete"时生效。
volumeBindingMode: WaitForFirstConsumer
reclaimPolicy: Delete
allowVolumeExpansion: true
参数 说明
volumeExpandAutoSnapshot 定义ESSD云盘扩容前自动创建极速快照功能,保证数据安全。

  • 扩容成功时,自动删除创建的快照。
  • 扩容失败时,保留快照并透出快照ID,默认保留时间为1天。

默认值为closed。取值如下:

  • forced:自动极速快照创建失败时,放弃云盘扩容。
  • besteffort:自动极速快照创建失败时报event warning,继续进行云盘扩容。
  • closed:不使用云盘扩容自动极速快照功能。
volumeDeleteSnapshotRetentionDays 定义ESSD云盘删除前自动创建极速快照的保留时间,单位:天。

该字段为空时,不能使用创建极速快照功能,所以建议您在使用时配置该参数值。

自动创建极速快照

本文以有状态应用MySQL为例,介绍云盘在线扩容失败或云盘误删除数据导致数据丢失的场景下,如何使用ESSD类型云盘自动创建极速快照功能保护并恢复数据。

  1. 使用以下内容,创建mysql.yaml文件。
    apiVersion: v1
    kind: PersistentVolumeClaim
    metadata:
      name: essd-pvc
      namespace: autosnapshot
    spec:
      accessModes:
      - ReadWriteOnce
      resources:
        requests:
          storage: 25Gi
      storageClassName: alicloud-datasafe-essd  # 使用集群存储类最佳实践配置。
    ---
    apiVersion: v1
    kind: Secret
    metadata:
      name: mysql-pass
      namespace: autosnapshot
    type: Opaque
    data:
      username: dGVzdDEK
      password: dGVzdDEtdmFsdWUK
    ---
    apiVersion: apps/v1
    kind: StatefulSet
    metadata:
      name: mysql-sts
      namespace: autosnapshot
    spec:
      selector:
        matchLabels:
          app: mysql-sts
      serviceName: mysql-sts
      template:
        metadata:
          labels:
            app: mysql-sts
        spec:
          containers:
          - name: mysql-sts
            image: mysql:5.7
            env:
            - name: MYSQL_ROOT_PASSWORD
              valueFrom:
                secretKeyRef:
                  name: mysql-pass
                  key: password
            ports:
            - containerPort: 80
              name: mysql-sts
            volumeMounts:
            - name: mysql
              mountPath: /var/lib/mysql
              subPath: mysql
          volumes:
            - name: mysql
              persistentVolumeClaim:
                claimName: essd-pvc
  2. 执行以下命令,部署MySQL应用。
    kubectl apply -f mysql.yaml
  3. 执行以下命令,确认MySQL应用已挂载对应的云盘存储卷。
    kubectl get pvc -nautosnapshot | grep essd-pvc

    预期输出:

    essd-pvc   Bound    d-2zeit7uza22vjya1****   25Gi       RWO            alicloud-datasafe-essd   54s

    其中, d-2zeit7uza22vjya1****为已挂载成功的ESSD云盘实例ID。

  4. 执行以下命令,进入MySQL应用容器。
    kubectl -n autosnapshot exec -it mysql-sts-0 -- /bin/sh
  5. 在容器Shell中执行以下命令,模拟数据写入。
    dd if=/dev/urandom of=/var/lib/mysql/mysql/record.txt bs=1M count=1000
  6. 在容器Shell中执行以下命令,查看写入数据的大小。
    ls /var/lib/mysql/mysql -l | grep record

    预期输出:

    -rw-r--r-- 1 root  root  1048576000 Nov  8 02:36 record.txt

数据安全的云盘扩容

  1. 执行以下命令,对MySQL应用中使用的云盘存储卷进行扩容。
    kubectl patch pvc essd-pvc -n autosnapshot -p '{"spec":{"resources":{"requests":{"storage":"30Gi"}}}}'
  2. 执行以下命令,确认扩容成功且自动极速快照功能正常。
    kubectl describe pvc essd-pvc -n autosnapshot

    部分预期输出:

    Capacity:   30Gi
    ...
    Events:
    ...ControllerExpandVolume:: Snapshot create successful: snapshotName[volume-expand-auto-snapshot-d-2ze9belqefqhdmga****-2022-11-07-21:03:12], sourceId[d-2zeit7uza22vjya1****], snapshotId[s-2ze3pmo5ppaa9stb****]

    部分参数说明如下。

    • sourceId:扩容的ESSD云盘实例ID,与essd-pvc中绑定的云盘实例ID一致。
    • snapshotId:扩容前自动创建的极速快照ID。
      • 若云盘扩容成功:您可以在ECS控制台中使用ID搜索该极速快照,显示没有查询到符合条件的数据,说明云盘扩容成功时,该极速快照已自动删除。
      • 若云盘扩容失败:该极速快照将被保留,默认保留日期为1天。

数据安全的云盘删除

  1. 执行以下命令,将MySQL应用副本缩减为0。
    kubectl scale sts/mysql-sts -n autosnapshot --replicas=0
  2. 执行以下命令,删除MySQL应用所使用的PVC。
    kubectl delete pvc essd-pvc -n autosnapshot
  3. 执行以下命令,查询自动极速快照相关的集群资源。
    kubectl get volumesnapshot

    预期输出:

    d-2zeit7uza22vjya1****-delprotect                   true                                d-2zeit7uza22vjya1****-delprotect-content   30Gi                               d-2zeit7uza22vjya1****-delprotect-content          6s             6s

    部分参数说明如下。

    • d-2zeit7uza22vjya1****:删除的ESSD云盘实例ID,与essd-pvc删除前绑定的云盘实例ID一致。
    • d-2zeit7uza22vjya1****-delprotect:对应极速快照的VolumeSnapshot名称。
    • d-2zeit7uza22vjya1****-delprotect-content:对应极速快照的VolumeSnapshotContent名称。

使用云盘扩容或删除时创建的自动极速快照恢复数据

下面以使用数据安全的云盘删除中创建的自动极速快照为例,介绍如何使用云盘删除时创建的自动极速快照在应用中恢复数据,使用云盘扩容时创建的自动极速快照在应用中恢复数据的方法类似。

说明 极速快照的VolumeSnapshot默认位于default命名空间中,当应用部署在非default命名空间时,您需要在应用所在的命名空间中创建新的VolumeSnapshot资源用于恢复数据。本文MySQL应用示例部署在autosnapshot命名空间中,您就需要在该空间中创建对应的VolumeSnapshot。

  1. 使用以下命令,查询自动极速快照对应的VolumeSnapshotContent中snapshotHandle字段的值。
    kubectl get volumesnapshotcontent d-2zeit7uza22vjya1****-delprotect-content -oyaml | grep snapshotHandle

    预期输出:

    snapshotHandle: s-2zegw6gmuc866xgc****
  2. 使用以下YAML内容,创建新的VolumeSnapshotContent,并预绑定即将创建的VolumeSnapshot。
    apiVersion: snapshot.storage.k8s.io/v1
    kind: VolumeSnapshotContent
    metadata:
      name: datasafe-volumesnapshotcontent
    spec:
      deletionPolicy: Retain
      driver: diskplugin.csi.alibabacloud.com
      source:
        snapshotHandle: s-2zegw6gmuc866xgc****   # 源VolumeSnapshotContent中snapshotHandle字段的值。
      volumeSnapshotRef:
        name: datasafe-volumesnapshot       # 即将创建的VolumeSnapshot名称。
        namespace: autosnapshot             # MySQL应用所在命名空间。
  3. 使用以下YAML内容,在MySQL应用所在的命名空间中创建对应的VolumeSnapshot。
    apiVersion: snapshot.storage.k8s.io/v1
    kind: VolumeSnapshot
    metadata:
      name: datasafe-volumesnapshot
      namespace: autosnapshot
    spec:
      source:
        volumeSnapshotContentName: datasafe-volumesnapshotcontent
  4. 使用以下YAML内容,根据自动极速快照名称创建PVC。
    apiVersion: v1
    kind: PersistentVolumeClaim
    metadata:
      name: essd-pvc       # 使用MySQL应用中定义的PVC名称。
    spec:
      accessModes: [ "ReadWriteOnce" ]
      storageClassName: alicloud-datasafe-essd
      resources:
        requests:
          storage: 30Gi
      dataSource:
        name: datasafe-volumesnapshot
        kind: VolumeSnapshot
        apiGroup: snapshot.storage.k8s.io
  5. 执行以下命令,将MySQL应用副本恢复至1。
    kubectl scale sts/mysql-sts -n autosnapshot --replicas=1
  6. 执行以下命令,确认PVC已成功绑定到MySQL应用中。
    kubectl describe pvc essd-pvc -n autosnapshot | grep "Used By"

    预期输出:

    Used By:     mysql-sts-0
  7. 执行以下命令,进入MySQL应用容器。
    kubectl -n autosnapshot exec -it mysql-sts-0 -- /bin/sh
  8. 执行以下命令,查看模拟写入的数据是否已经恢复。
    ls /var/lib/mysql/mysql -l | grep record

    预期输出:

    -rw-r--r-- 1 root  root  1048576000 Nov  8 02:36 record.txt

    预期输出数据大小1048576000和MySQL应用中模拟写入数据的大小一致,说明数据已完成恢复。

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

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

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

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

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

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

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

相关推荐

  • 阿里云ECS云服务器块存储FAQ-云淘科技

    本文汇总了使用块存储时的常见问题。 存储容量单位包SCU问题 什么是存储容量单位包SCU? 哪些块存储产品可以使用存储容量单位包SCU? 存储容量单位包SCU可以单独使用吗? 存储容量单位包SCU的抵扣规则是什么? SCU如何计费? SCU可以退款吗? ESSD云盘问题 什么是ESSD云盘? ESSD云盘提供的产品规格有哪些? 相比SSD云盘或者高效云盘,E…

    阿里云服务器 2023年12月9日
  • 阿里云ECS云服务器修改ESSD云盘性能级别-云淘科技

    ESSD云盘四种性能级别可以达到的性能上限不同,您可以在使用ESSD云盘的过程中根据需要修改云盘的性能级别。本文介绍如何修改ESSD云盘的性能级别。 注意事项 修改ESSD云盘性能级别时,请您注意以下信息: 您的账号不能处于欠费状态。 若ESSD云盘已挂载到包年包月ECS实例上,则实例不能处于过期状态。 新创建的ESSD云盘请您等待云盘进入待挂载(Avail…

    阿里云服务器 2023年12月9日
  • 信息流广告,信息流部分建议宽度830px,只针对默认列表样式,顺序随机
  • 阿里云ECS云服务器步骤一:扩容云盘容量-云淘科技

    本文为您介绍如何扩容云盘容量,扩容云盘分为在线扩容(扩容完无需重启实例)和离线扩容(扩容完需要重启实例)两种方式。 操作场景 当云盘(系统盘或数据盘)使用空间不足时,您可以在ECS控制台上扩容云盘的容量以增加存储空间。说明 云盘无法缩小容量,扩容后的云盘新容量生效后无法再缩小,建议您合理规划存储空间。如果您有云盘缩容的需求,可以通过阿里云服务器迁移中心SMC…

    2023年12月9日
  • 阿里云ECS云服务器修改自动快照策略-云淘科技

    您在使用自动快照策略过程中,可以根据需要修改自动快照的策略信息、标签信息,自动快照是否随云盘释放。 修改自动快照的策略信息 您可以根据需要修改自动快照的策略名称、创建时间、重复日期、保留时间等信息。 登录ECS管理控制台。 在左侧导航栏,选择存储与快照 > 快照。 在页面左侧顶部,选择目标资源所在的地域。 在快照页面,单击自动快照策略页签。 在自动快照…

    阿里云服务器 2023年12月9日
  • 阿里云ECS云服务器修改自动快照策略-云淘科技

    您在使用自动快照策略过程中,可以根据需要修改自动快照的策略信息、标签信息,自动快照是否随云盘释放。 修改自动快照的策略信息 您可以根据需要修改自动快照的策略名称、创建时间、重复日期、保留时间等信息。 登录ECS管理控制台。 在左侧导航栏,选择存储与快照 > 快照。 在页面左侧顶部,选择目标资源所在的地域。 在快照页面,单击自动快照策略页签。 在自动快照…

    2023年12月9日

联系我们

400-800-8888

在线咨询: QQ交谈

邮件:admin@example.com

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

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