在业务系统跨多块云盘的场景下,您可以通过创建文件系统一致性快照,为业务中挂载的多块云盘同时创建快照,保证数据写入云盘的时序一致性,并保持其崩溃一致性。本文介绍文件系统一致性快照的使用方法。
前提条件
- ACK发布的Kubernetes v1.18及之上版本默认提供了存储快照的功能,因此使用云盘存储快照时,请确保您创建的ACK集群Kubernetes版本等于或大于v1.18。具体操作,请参见创建Kubernetes托管版集群。
- 访问指定地域的ECS控制台,确认已开启云盘快照服务。具体操作,请参见开通快照。
操作步骤
本文以nginx应用为例,介绍文件系统一致性快照的使用。
重要 创建文件系统一致性快照过程中会冻结云盘的文件系统,但不影响业务的正常运行。
- 部署应用。
- 使用以下内容,创建nginx-deploy.yaml文件。
apiVersion: v1 kind: PersistentVolumeClaim metadata: name: essd-pvc-0 labels: app: nginx #创建一致性快照组时PVC的选择依据。 spec: accessModes: - ReadWriteOnce volumeMode: Filesystem resources: requests: storage: 25Gi storageClassName: alicloud-disk-essd #默认创建的ESSD存储类。 --- apiVersion: v1 kind: PersistentVolumeClaim metadata: name: essd-pvc-1 labels: app: nginx #创建一致性快照组时PVC的选择依据。 spec: accessModes: - ReadWriteOnce volumeMode: Filesystem resources: requests: storage: 25Gi storageClassName: alicloud-disk-essd --- apiVersion: apps/v1 kind: StatefulSet metadata: name: nginx spec: selector: matchLabels: app: nginx serviceName: nginx template: metadata: labels: app: nginx spec: containers: - name: nginx image: nginx ports: - containerPort: 80 name: web volumeMounts: - name: essd-0 mountPath: /data/essd0 - name: essd-1 mountPath: /data/essd1 volumes: - name: essd-0 persistentVolumeClaim: claimName: essd-pvc-0 - name: essd-1 persistentVolumeClaim: claimName: essd-pvc-1
- 执行以下命令,部署nginx有状态应用,并挂载两个云盘。
kubectl apply -f nginx-deploy.yaml
- 使用以下内容,创建nginx-deploy.yaml文件。
- 创建pre-rule和post-rule。Rule用于定义创建的一致性快照的类型。若类型为应用一致性快照,Rule还将定义应用的冻结与解冻指令。
- 使用以下内容,创建rule.yaml文件。
apiVersion: storage.alibabacloud.com/v1beta1 kind: Rule metadata: name: post-rule spec: containerName: "csi-plugin" ruleType: filesystem_consistent rules: - actionType: command action: "" --- apiVersion: storage.alibabacloud.com/v1beta1 kind: Rule metadata: name: pre-rule spec: containerName: "csi-plugin" ruleType: filesystem_consistent rules: - actionType: command action: ""
参数 说明 ruleType 一致性快照的类型,包含文件系统一致性快照和应用一致性快照。
- filesystem_consistent:表示使用文件系统一致性快照。
- app_consistent:表示使用应用一致性快照。
rules. actionType 当ruleType=app_consistent时,该参数生效。
action的类型,目前仅支持command。当值为command时,执行action中的指令。
rules. action 当ruleType=app_consistent时,该参数生效。
- 在pre-rule中:表示一致性快照创建前执行的应用冻结指令。
- 在post-rule中:表示一致性快照创建后执行的应用恢复指令。
containerName 当ruleType=app_consistent时,该参数生效。
Rules的执行容器。
重要 文件系统一致性快照与应用一致性快照使用kube-system命名空间下的csi-plugin组件,将自动完成文件系统的冻结与解冻操作。
- 执行以下命令,创建pre-rule及post-rule。
kubectl apply -f rule.yaml
- 使用以下内容,创建rule.yaml文件。
- 创建文件系统一致性快照。
- 使用以下内容,创建advanced-snapshot.yaml文件。
apiVersion: storage.alibabacloud.com/v1beta1kind: AdvancedVolumeSnapshotmetadata: name: advanced-snapshot namespace: defaultspec: pvcSelector: matchLabels: #当nameList字段不存在时生效。 app: "nginx" #nameList: ["essd-pvc-0", "essd-pvc-1"] hook: preRule: "pre-rule" postRule: "post-rule" retentionDays: "1" reclaimPolicy: Delete targetRegions: ["cn-hanzghou"] #本文示例在cn-beijing本地域创建的文件系统一致性快照,拷贝到cn-hangzhou地域。
参数 说明 pvcSelector. matchLabels 可选,目标PVC需要满足的标签。
pvcSelector. nameList 可选,目标PVC的名称。
说明 若matchLabels与nameList同时存在,则只考虑nameList。
hook 可选,一致性快照关联的Rule。
该值为空时,将为每个目标PVC单独创建非一致性的快照。
hook. preRule 一致性快照创建前执行的Rule。
选择集群中已存在的Rule作为pre-rule。
hook. postRule 一致性快照创建后执行的Rule。
选择集群中已存在的Rule作为post-rule。
retentionDays 可选,创建的一致性快照的保留时间,默认为1天。
reclaimPolicy 可选,快照的回收机制,默认为Delete。
- Delete:删除整组AdvancedVolumeSnapshot或单个VolumeSnapshot时,对应的VolumeSnapshotContent及关联的快照会被同时删除。
- Retain:删除整组AdvancedVolumeSnapshot或单个VolumeSnapshot时,对应的VolumeSnapshotContent及关联的快照不会被同时删除。
- 执行以下命令,创建文件系统一致性快照。
kubectl apply -f advanced-snapshot.yaml
- 使用以下内容,创建advanced-snapshot.yaml文件。
- 执行以下命令,查询文件系统一致性快照的创建状态及为各个云盘生成的SnapshotID。
kubectl describe advancedvolumesnapshot advanced-snapshot
预期输出的Status部分示例如下:
Status: Group Snapshot ID: Group Volume Snapshot Status: done Snapshot Status: Disk ID: d-2zee3khhqsnfql****** Message: Pvc Name: essd-pvc-0 Region ID: Snapshot ID: s-2ze0wl2fd6337w****** Status: accomplished Disk ID: d-2ze9b1j3v4w6pz****** Message: Pvc Name: essd-pvc-1 Region ID: Snapshot ID: s-2zeg9tk9plor4w****** Status: accomplished Disk ID: d-2zee3khhqsnfql****** Message: Pvc Name: essd-pvc-0 Region ID: cn-hangzhou Snapshot ID: s-bp1izimv6vjlyr****** Status: accomplished Disk ID: d-2ze9b1j3v4w6pz****** Message: Pvc Name: essd-pvc-1 Region ID: cn-hangzhou Snapshot ID: s-bp1hu9p9m3hfaq****** Status: accomplished
其中,Region ID为空的快照,说明是在本地域创建的文件系统一致性快照;Region ID为cn-hangzhou的快照,说明是从本地域拷贝到targetRegions的文件系统一致性快照。
- 执行以下命令,确认集群中已创建关联的volumeSnapshot资源。
kubectl get volumesnapshot
预期输出:
NAME READYTOUSE SOURCEPVC SOURCESNAPSHOTCONTENT RESTORESIZE SNAPSHOTCLASS SNAPSHOTCONTENT CREATIONTIME AGE s-2ze0wl2fd6337w****** true s-2ze0wl2fd6337w****** 25Gi s-2ze0wl2fd6337w****** 9m50s 8m45s s-2zeg9tk9plor4w****** true s-2zeg9tk9plor4w****** 25Gi s-2zeg9tk9plor4w****** 9m47s 8m45s s-bp1hu9p9m3hfaq****** true s-bp1hu9p9m3hfaq****** 0 s-bp1hu9p9m3hfaq****** 52y 6m35s s-bp1izimv6vjlyr****** true s-bp1izimv6vjlyr****** 0 s-bp1izimv6vjlyr****** 52y 6m36s
Region ID为cn-hangzhou的快照在本集群中已创建volumeSnapshot资源,但由于地域不同,所以
restoresize
显示为0。可在ECS控制台左侧导航栏中单击存储与快照,查看不同地域的快照。说明 您通过跨地域拷贝的文件系统一致性快照会一直保留,如不需要,可手动删除。
- 将已有的文件系统一致性快照导入到使用快照恢复应用的目标集群中,恢复应用。可通过创建volumeSnapshot和volumeSnapshotContent的方式跨集群恢复应用。在本集群恢复应用时,可直接使用已有的volumeSnapshot和volumeSnapshotContent。具体操作,请参见静态创建快照。
内容没看懂? 不太想学习?想快速解决? 有偿解决: 联系专家
阿里云企业补贴进行中: 马上申请
腾讯云限时活动1折起,即将结束: 马上收藏
同尘科技为腾讯云授权服务中心。
购买腾讯云产品享受折上折,更有现金返利:同意关联,立享优惠
转转请注明出处:https://www.yunxiaoer.com/171279.html