日本熟妇hd丰满老熟妇,中文字幕一区二区三区在线不卡 ,亚洲成片在线观看,免费女同在线一区二区

云盤存儲數據安全最佳實踐

當云盤非預期刪除導致數據丟失時,您可以通過ESSD類型云盤數據卷的自動極速快照功能,實現數據的快速恢復,以保證存儲數據的安全性。本文介紹如何使用ESSD云盤的自動極速快照功能實現云盤存儲數據安全。

前提條件

  • 已創建Kubernetes集群,且集群版本為1.20及以上。具體操作,請參見創建ACK托管集群

  • 訪問指定地域的ECS控制臺,確認已開啟云盤快照服務。具體操作,請參見開通快照

  • 確保CSI-Plugin和CSI-Provisioner組件版本不低于v1.24.4-7371f039-aliyun。關于升級CSI-Plugin和CSI-Provisioner組件的具體操作,請參見管理CSI組件

使用場景

云盤非預期刪除導致的數據丟失

云盤回收策略為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
  volumeDeleteSnapshotRetentionDays: "3"   # 該設置僅在reclaimPolicy為"Delete"時生效。
volumeBindingMode: WaitForFirstConsumer
reclaimPolicy: Delete
allowVolumeExpansion: true

參數

說明

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應用副本縮減為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名稱。
      namespace: autosnapshot
    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應用中模擬寫入數據的大小一致,說明數據已完成恢復。