当前位置: 首页 > news >正文

k8s之Snapshots 详解

Kubernetes Volume Snapshots 详解

在Kubernetes中,Volume Snapshots(卷快照) 是一项关键的存储功能,用于创建持久卷(PV)的时间点副本。这一特性通过CSI(容器存储接口) 实现,并引入了一组新的API资源来管理快照生命周期。本文将详细讲解Kubernetes中的Volume Snapshots相关概念、工作原理及使用方法。

一、核心概念与API资源

1. 卷快照相关资源

Kubernetes通过以下CRD(自定义资源定义)管理卷快照:

VolumeSnapshotClass

类似于StorageClass,定义了创建快照的存储后端配置删除策略

apiVersion: snapshot.storage.k8s.io/v1
kind: VolumeSnapshotClass
metadata:name: csi-snapshot-class
driver: ebs.csi.aws.com  # CSI驱动名称
deletionPolicy: Delete  # 当Snapshot删除时,后端快照也删除
parameters:# 特定于驱动的参数(如备份位置、加密等)
VolumeSnapshot

用户创建的快照请求,指向一个现有的PVC(PersistentVolumeClaim)。

apiVersion: snapshot.storage.k8s.io/v1
kind: VolumeSnapshot
metadata:name: my-pvc-snapshot
spec:volumeSnapshotClassName: csi-snapshot-classsource:persistentVolumeClaimName: my-pvc  # 要快照的PVC名称
VolumeSnapshotContent

由系统自动创建的实际快照内容,类似于PV与PVC的关系。

apiVersion: snapshot.storage.k8s.io/v1
kind: VolumeSnapshotContent
metadata:name: snapcontent-xyz
spec:volumeSnapshotClassName: csi-snapshot-classvolumeSnapshotRef:name: my-pvc-snapshot  # 关联的VolumeSnapshotnamespace: defaultsource:snapshotHandle: aws://us-west-2/snap-12345  # 存储后端的快照ID
status:readyToUse: truerestoreSize: 10Gi

2. CSI 与卷快照

  • CSI(容器存储接口):是Kubernetes与存储系统的标准接口,支持快照功能的CSI驱动需实现以下接口:

    • CreateSnapshot:创建卷快照
    • DeleteSnapshot:删除卷快照
    • ListSnapshots:列出快照
    • DescribeSnapshot:获取快照信息
  • 必备组件

    1. CSI Driver:如AWS EBS CSI Driver、Ceph CSI等
    2. external-snapshotter:Kubernetes官方提供的Sidecar组件,监听VolumeSnapshot资源并调用CSI驱动的快照接口

二、卷快照工作流程

1. 创建快照流程

sequenceDiagramparticipant 用户participant API Serverparticipant VolumeSnapshotControllerparticipant CSI external-snapshotterparticipant CSI Driverparticipant 存储后端用户->>API Server: 创建VolumeSnapshot资源API Server->>VolumeSnapshotController: 触发控制器VolumeSnapshotController->>CSI external-snapshotter: 调用CreateSnapshotCSI external-snapshotter->>CSI Driver: gRPC请求CreateSnapshotCSI Driver->>存储后端: 创建实际快照存储后端-->>CSI Driver: 返回快照IDCSI Driver-->>CSI external-snapshotter: 返回成功CSI external-snapshotter->>API Server: 创建VolumeSnapshotContentAPI Server->>VolumeSnapshot: 更新状态为Ready

2. 从快照恢复卷流程

apiVersion: v1
kind: PersistentVolumeClaim
metadata:name: restored-pvc
spec:storageClassName: ebs-scdataSource:  # 从快照恢复name: my-pvc-snapshotkind: VolumeSnapshotapiGroup: snapshot.storage.k8s.ioaccessModes:- ReadWriteOnceresources:requests:storage: 10Gi

三、关键功能与应用场景

1. 备份与恢复

  • 自动化备份:结合CronJob定期创建VolumeSnapshot
  • 灾难恢复:通过dataSource字段从快照恢复PVC
spec:dataSource:name: my-snapshotkind: VolumeSnapshotapiGroup: snapshot.storage.k8s.io

2. 测试与开发

  • 克隆生产数据:基于生产环境的卷快照创建测试环境
  • 版本回滚:应用升级失败时恢复到之前的状态

3. 数据迁移

  • 跨集群迁移:将快照复制到目标集群并恢复
  • 存储类型转换:例如从AWS EBS迁移到GCE PD

四、配置与使用示例

1. 启用卷快照功能

  1. 安装Snapshot CRDs

    kubectl apply -f https://github.com/kubernetes-csi/external-snapshotter/raw/v6.2.1/client/config/crd/snapshot.storage.k8s.io_volumesnapshotclasses.yaml
    kubectl apply -f https://github.com/kubernetes-csi/external-snapshotter/raw/v6.2.1/client/config/crd/snapshot.storage.k8s.io_volumesnapshots.yaml
    kubectl apply -f https://github.com/kubernetes-csi/external-snapshotter/raw/v6.2.1/client/config/crd/snapshot.storage.k8s.io_volumesnapshotcontents.yaml
    
  2. 部署external-snapshotter

    kubectl apply -f https://github.com/kubernetes-csi/external-snapshotter/raw/v6.2.1/deploy/kubernetes/snapshot-controller/rbac-snapshot-controller.yaml
    kubectl apply -f https://github.com/kubernetes-csi/external-snapshotter/raw/v6.2.1/deploy/kubernetes/snapshot-controller/setup-snapshot-controller.yaml
    
  3. 配置支持快照的CSI驱动(以AWS EBS为例):

    helm install aws-ebs-csi-driver aws-ebs-csi-driver/aws-ebs-csi-driver \--namespace kube-system \--set enableVolumeScheduling=true \--set enableVolumeResizing=true \--set enableVolumeSnapshot=true
    

2. 创建快照示例

  1. 定义VolumeSnapshotClass

    apiVersion: snapshot.storage.k8s.io/v1
    kind: VolumeSnapshotClass
    metadata:name: ebs-snapshot-class
    driver: ebs.csi.aws.com
    deletionPolicy: Retain  # 保留后端快照
    
  2. 创建VolumeSnapshot

    apiVersion: snapshot.storage.k8s.io/v1
    kind: VolumeSnapshot
    metadata:name: my-ebs-snapshot
    spec:volumeSnapshotClassName: ebs-snapshot-classsource:persistentVolumeClaimName: my-ebs-pvc
    
  3. 验证快照状态

    kubectl get volumesnapshot my-ebs-snapshot
    kubectl get volumesnapshotcontent
    

3. 从快照恢复PVC

apiVersion: v1
kind: PersistentVolumeClaim
metadata:name: restored-pvc
spec:storageClassName: ebs-scdataSource:name: my-ebs-snapshotkind: VolumeSnapshotapiGroup: snapshot.storage.k8s.ioaccessModes:- ReadWriteOnceresources:requests:storage: 10Gi

文章转载自:
http://chancellor.riewr.cn
http://caporal.riewr.cn
http://antehuman.riewr.cn
http://cavally.riewr.cn
http://capsicin.riewr.cn
http://bailee.riewr.cn
http://abetter.riewr.cn
http://apophyge.riewr.cn
http://calamary.riewr.cn
http://adequacy.riewr.cn
http://anagrammatism.riewr.cn
http://agrostology.riewr.cn
http://appel.riewr.cn
http://chamomile.riewr.cn
http://advertisement.riewr.cn
http://aristate.riewr.cn
http://aspersion.riewr.cn
http://cessionary.riewr.cn
http://capricious.riewr.cn
http://camelopardalis.riewr.cn
http://almsman.riewr.cn
http://brusquerie.riewr.cn
http://calls.riewr.cn
http://azimuthal.riewr.cn
http://anguilla.riewr.cn
http://angaraland.riewr.cn
http://ball.riewr.cn
http://antiandrogen.riewr.cn
http://artfully.riewr.cn
http://anaerobium.riewr.cn
http://www.dtcms.com/a/280369.html

相关文章:

  • Linux C IO多路复用
  • 静态补丁脚本 - 修改 libtolua.so
  • Unity音游开发全指南:模板与免费资源高效构建节奏游戏
  • Ubuntu 22.04 安装 mysql-server服务端
  • docker拉取nacos镜像失败
  • golang语法-----标准化输入输出
  • 渗透测试技术_Nessus工具(三):输出报告
  • 构建 Go 可执行文件镜像 | 探索轻量级 Docker 基础镜像(我应该选择哪个 Docker 镜像?)
  • STM32小实验三--让蜂鸣器响起来
  • Pytorch中张量的索引和切片使用详解和代码示例
  • CSS的初步学习
  • 用语音识别芯片驱动TFT屏幕还有链接蓝牙功能?
  • cursor使用mcp连接mysql数据库,url方式
  • java截取视频帧
  • c#进阶之数据结构(字符串篇)----String
  • C++中list各种基本接口的模拟实现
  • 【Java代码审计(2)】MyBatis XML 注入审计
  • 153.在 Vue 3 中使用 OpenLayers + Cesium 实现 2D/3D 地图切换效果
  • java中的接口
  • JavaScript 动态访问嵌套对象属性问题记录
  • HarmonyOS-ArkUI: Web组件加载流程1
  • 暴力破解:攻破系统的终极密钥
  • Rust指针选择
  • 安装带GPU的docker环境
  • 20250715使用荣品RD-RK3588开发板在Android13下接入USB3.0接口的红外相机
  • 【I3D 2024】Deblur-GS: 3D Gaussian Splatting from Camera Motion Blurred Images
  • 记录一条面试sql题目
  • JS中async/await功能介绍和使用演示
  • 普通字符类型和new String有什么区别
  • 使用JS编写动态表格