在跨多块云盘的业务场景下,您可以通过文件系统一致性快照在同一时间点捕获所有云盘的数据状态,为业务中挂载的多块云盘同时创建快照,以确保数据写入云盘的时序一致性。当系统崩溃或其他故障发生时,仍可保持数据的一致性和完整性。本文介绍如何使用文件系统一致性快照。
前提条件
已创建Kubernetes集群,且集群为v1.18及以上版本。具体操作,请参见创建Kubernetes托管版集群。
操作步骤
本文以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
创建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
创建文件系统一致性快照。
使用以下内容,创建advanced-snapshot.yaml文件。
apiVersion: storage.alibabacloud.com/v1beta1 kind: AdvancedVolumeSnapshot metadata: name: advanced-snapshot namespace: default spec: 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
执行以下命令,查询文件系统一致性快照的创建状态及为各个云盘生成的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)