关于kubernetes:Kubernetes-snapshots-快照是什么以及如何使用快照

50次阅读

共计 4653 个字符,预计需要花费 12 分钟才能阅读完成。

随着 Kubernetes 中快照控制器的引入,当初能够为反对此性能的 CSI 驱动程序和云提供商创立快照。

API 是通用的且独立于供应商,这对于 Kubernetes 来说是典型的,因而咱们能够摸索它而无需深刻理解特定实现的细节。让咱们认真看看快照,看看它们如何使 Kubernetes 用户受害。

介绍

首先,让咱们廓清什么是快照。快照是文件系统在特定工夫点的状态。您能够保留它并在当前应用它来复原该特定状态。创立快照的过程简直是刹时的。创立快照后,对原始文件系统的所有更改都将写入不同的块。

因为快照数据与原始数据存储在同一地位,因而快照不能代替备份。同时,基于快照而不是实时数据的备份更加统一。这是因为在创立快照时保障所有数据都是最新的。

必须装置 snapshot-controller(所有 CSI driver 的通用组件),并且必须在 Kubernetes 集群中定义以下 CRD 能力应用快照性能:

  • VolumeSnapshotClass – 相当于快照的 StorageClass
  • VolumeSnapshotContent – 相当于快照的 PV
  • VolumeSnapshot – 相当于快照的 PVC

最重要的是,CSI 驱动程序必须反对快照创立并具备相干的 csi-snapshotter controller。

快照在 Kubernetes 中是如何工作的?

他们运作背地的逻辑很简略。有几个实体;VolumeSnapshotClass 形容快照创立的参数,例如 CSI driver。您还能够在那里指定其余设置,例如,快照是否应该是增量的以及它们应该存储在哪里。

创立 VolumeSnapshot 时,您必须指定将为其创立快照的 PersistentVolumeClaim

拍摄快照时,CSI 驱动程序会在集群中创立一个 VolumeSnapshotContent 资源并设置其参数(通常是资源 ID)。

接下来,快照控制器绑定 VolumeSnapshotVolumeSnapshotContent(就像 PV 和 PVC 一样)。

创立新的 PersistentVolume 时,您能够将先前创立的 VolumeSnapshot 设置为 dataSource 以应用其数据。

配置

VolumeSnapshotClass 容许您指定各种 VolumeSnapshot 属性,例如 CSI 驱动程序名称和其余云提供商 / 数据存储相干参数。上面提供了几个 VolumeSnapshotClass 资源定义示例的链接:

  • OpenStack
  • vSphere
  • AWS
  • Azure
  • LINSTOR
  • GCP
  • CephFS
  • Ceph RBD

创立 VolumeSnapshotClass 后,您就能够开始拍摄快照了。让咱们来看看一些典型的用例。

案例一:PVC templates

假如咱们想要一些蕴含数据的 PVC 模板,并在须要时克隆它。在以下状况下这可能会派上用场:

  • 应用数据疾速创立开发环境;
  • 在不同节点上应用多个 Pod 同时解决数据。

这背地的魔力是创立一个规范 PVC,用你想要的数据填充它,而后创立另一个 PVC 以原始集作为其源:

---
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
  name: pvc-worker1
spec:
  storageClassName: linstor-ssd-lvmthin-r2
  dataSource:
    name: pvc-template
    kind: PersistentVolumeClaim
  accessModes:
    - ReadWriteOnce
  resources:
    requests:
    storage: 10Gi

您将取得蕴含所有数据的原始 PVC 的残缺克隆,您能够立刻应用。快照机制在这里是齐全通明的,所以咱们甚至不用应用上述任何资源。

案例二:用于测试的快照

此案例展现了如何在不烦扰生产的状况下平安地对实时数据进行数据库迁徙建模。

咱们必须克隆咱们的应用程序应用的现有 PVC(就像在下面的示例中一样)以及具备克隆 PVC 的新应用程序版本来测试降级。如果遇到问题,您能够创立一个新的克隆并重试。

测试实现后,能够将新版本的应用程序部署到生产环境中。但首先,创立一个 mypvc-before-upgrade 快照,这样您就能够随时复原到降级前的状态。快照是应用 VolumeSnapshots 资源创立的。在其中指定创立快照的指标 PVC:

apiVersion: snapshot.storage.k8s.io/v1
kind: VolumeSnapshot
metadata:
  name: mypvc-before-upgrade
spec:
  volumeSnapshotClassName: linstor
  source:
    persistentVolumeClaimName: mypvc

mypvc-before-upgrade 切换到新版本后,您始终能够通过将快照指定为 PVC 源来复原到降级前的状态:

apiVersion: v1
kind: PersistentVolumeClaim
metadata:
  name: mypvc
spec:
  storageClassName: linstor-ssd-lvmthin-r2
  dataSource:
    name: mypvc-before-upgrade
    kind: VolumeSnapshot
    apiGroup: snapshot.storage.k8s.io
  accessModes:
    - ReadWriteOnce
  resources:
    requests:
    storage: 10Gi

案例三:应用快照做一致性备份

快照对于在运行环境中创立统一的备份是不可或缺的。没有它们,就没有方法在不先暂停应用程序的状况下进行 PVC 备份。

如果您尝试在利用程序运行时复制整个卷,则很可能会笼罩其中的某些局部。为防止这种状况,您能够拍摄快照并将其用于备份。

有多种工具可用于在 Kubernetes 中进行备份,这些工具尊重应用程序的逻辑且 / 或应用快照机制。其中一个工具 Velero 容许您主动应用快照,安顿额定的挂钩将数据重置到磁盘,并暂停 / 复原应用程序以取得更好的备份一致性。

同时,一些供应商提供了内置的备份性能。例如,LINSTOR 容许您主动将快照上传到近程 S3 服务器,并反对残缺和增量备份。

为了从此性能中受害,您须要创立一个专用的 VolumeSnapshotClass 蕴含拜访近程 S3 服务器所需的所有参数:

---
kind: VolumeSnapshotClass
apiVersion: snapshot.storage.k8s.io/v1
metadata:
  name: linstor-minio
driver: linstor.csi.linbit.com
deletionPolicy: Retain
parameters:
  snap.linstor.csi.linbit.com/type: S3
  snap.linstor.csi.linbit.com/remote-name: minio
  snap.linstor.csi.linbit.com/allow-incremental: "false"
  snap.linstor.csi.linbit.com/s3-bucket: foo
  snap.linstor.csi.linbit.com/s3-endpoint: XX.XXX.XX.XXX.nip.io
  snap.linstor.csi.linbit.com/s3-signing-region: minio
  snap.linstor.csi.linbit.com/s3-use-path-style: "true"
  csi.storage.k8s.io/snapshotter-secret-name: linstor-minio
  csi.storage.k8s.io/snapshotter-secret-namespace: minio
---
kind: Secret
apiVersion: v1
metadata:
  name: linstor-minio
  namespace: minio
immutable: true
type: linstor.csi.linbit.com/s3-credentials.v1
stringData:
  access-key: minio
  secret-key: minio123

新创建的快照当初将被推送到近程 S3 服务器:

---
apiVersion: snapshot.storage.k8s.io/v1
kind: VolumeSnapshot
metadata:
  name: mydb-backup1
spec:
  volumeSnapshotClassName: linstor-minio
  source:
    persistentVolumeClaimName: db-data

乏味的是,您能够在不同的 Kubernetes 集群中应用它们。为此,除了 VolumeSnapshotClass 之外,您还必须定义 VolumeSnapshotContentVolumeSnapshot

---
apiVersion: snapshot.storage.k8s.io/v1
kind: VolumeSnapshotContent
metadata:
  name: example-backup-from-s3
spec:
  deletionPolicy: Delete
  driver: linstor.csi.linbit.com
  source:
    snapshotHandle: snapshot-0a829b3f-9e4a-4c4e-849b-2a22c4a3449a
  volumeSnapshotClassName: linstor-minio
  volumeSnapshotRef:
    apiVersion: snapshot.storage.k8s.io/v1
    kind: VolumeSnapshot
    name: example-backup-from-s3
    namespace: new-cluster
---
apiVersion: snapshot.storage.k8s.io/v1
kind: VolumeSnapshot
metadata:
  name: example-backup-from-s3
spec:
  source:
    volumeSnapshotContentName: example-backup-from-s3
  volumeSnapshotClassName: linstor-minio

请留神,您必须在 VolumeSnapshotContent 中通过 snapshotHandle 参数指定存储系统的快照 ID。

当初您能够应用备份快照作为数据源来创立新的 PVC:

apiVersion: v1
kind: PersistentVolumeClaim
metadata:
  name: restored-data
  namespace: new-cluster
spec:
  storageClassName: linstor-ssd-lvmthin-r2
  dataSource:
    name: example-backup-from-s3
    kind: VolumeSnapshot
    apiGroup: snapshot.storage.k8s.io
  accessModes:
    - ReadWriteOnce
  resources:
    requests:
    storage: 10Gi

论断

借助快照,您能够通过创立统一的备份和克隆卷来更无效地利用您的存储解决方案。它们还容许您防止在不必要时复制数据。这是快照,让您的生存更轻松、更美妙!

正文完
 0