ARTICLE DETAIL

建站实战干货

来自一线的建站与推广经验沉淀,每一条都经过真实交付验证。

90DaysOfDevOps 实战:使用 Kasten K10 为 Kubernetes 有状态应用构建备份与恢复方案

2026/10/7 1:52:15 拓冰建站 浏览量
90DaysOfDevOps 实战:使用 Kasten K10 为 Kubernetes 有状态应用构建备份与恢复方案 文档/教程【免费下载链接】90DaysOfDevOpsThis repository started out as a learning in public project for myself and has now become a structured learning map for many in the community. We have 3 years under our belt covering all things DevOps, including Principles, Processes, Tooling and Use Cases surrounding this vast topic.项目地址https://gitcode.com/gh_mirrors/90/90DaysOfDevOps点击查看免费下载本指南基于 90DaysOfDevOps 挑战第 87 天内容完整演示如何在 minikube 集群中部署开源 Kubernetes 数据保护平台Kasten K10通过 CSI 卷快照对运行在 MongoDB 上的有状态应用Pacman 游戏执行备份、模拟误操作故障并完成恢复。读完本文你将掌握 minikube 卷快照插件配置、K10 的 Helm 部署与认证、应用级快照创建以及基于恢复点还原数据的完整实战链路。Day 86 使用开源备份工具 Kopia 将重要数据备份到本地 NAS 与云端对象存储解决了“单机/文件级”数据保护问题。本节将视角切换到 Kubernetes 平台集群中的数据库等有状态工作负载同样需要数据保护而 Kasten K10 正是面向 Kubernetes 的备份、恢复与数据迁移平台我们将在之前搭建的 minikube 集群上完成一次端到端演练。Kubernetes 集群准备启用卷快照与 CSI HostPath 插件备份 Kubernetes 中的数据库本质上是备份其背后的持久化存储。因此我们首先需要用支持**卷快照Volume Snapshot**的 CSI 驱动来运行集群。本文沿用挑战全程使用的 minikube通过--addons参数启用两个关键插件minikube start --addons volumesnapshots,csi-hostpath-driver \ --apiserver-port6443 \ --container-runtimecontainerd \ -p 90daysofdevops \ --kubernetes-version1.21.2参数说明--addons volumesnapshots启用 Kubernetes 卷快照 API 相关组件VolumeSnapshotClass、VolumeSnapshot、VolumeSnapshotContent等 CRD这是 K10 创建存储级快照的基础。--addons csi-hostpath-driver部署 CSI HostPath 驱动为本地 minikube 环境提供可被快照的 CSI 卷能力。--container-runtimecontainerd指定容器运行时为 containerd。--apiserver-port6443、-p 90daysofdevops固定 API Server 端口并给集群命名便于后续命令复用。集群启动后此时尚未部署 K10我们需要为 CSI HostPath 驱动对应的卷快照类打上 K10 专属注解让 K10 识别并使用它kubectl annotate volumesnapshotclass csi-hostpath-snapclass \ k10.kasten.io/is-snapshot-classtrue同时为了让 PVC 默认落在可由 CSI 快照的存储类上还需把默认存储类从standard切换到csi-hostpathkubectl patch storageclass csi-hostpath-sc -p {metadata: {annotations:{storageclass.kubernetes.io/is-default-class:true}}} kubectl patch storageclass standard -p {metadata: {annotations:{storageclass.kubernetes.io/is-default-class:false}}}这两条命令分别将csi-hostpath-sc标记为默认存储类、取消standard的默认地位。此后集群中新建 PVC 若未显式指定存储类将自动使用可快照的csi-hostpath-sc。部署 Kasten K10添加 Helm 仓库并安装K10 通过 Helm 图表分发首先添加官方仓库helm repo add kasten https://charts.kasten.io/也可以使用arkade kasten install k10一键安装但本文按完整流程逐步执行。创建命名空间并安装 K10整个部署约需 5 分钟helm install k10 kasten/k10 --namespacekasten-io \ --set auth.tokenAuth.enabledtrue \ --set injectKanisterSidecar.enabledtrue \ --set-string injectKanisterSidecar.namespaceSelector.matchLabels.k10/injectKanisterSidecartrue \ --create-namespace各--set参数含义auth.tokenAuth.enabledtrue启用基于 Token 的认证方式用于后续登录 Web 控制台。injectKanisterSidecar.enabledtrue允许 K10 向带特定标签的工作负载注入 Kanister 侧车容器Kanister 是 Kasten 开源的 Kubernetes 应用级数据管理框架Day 88 会专门展开。injectKanisterSidecar.namespaceSelector.matchLabels.k10/injectKanisterSidecartrue限定侧车注入的命名空间标签选择器。观察 Pod 启动使用 watch 模式实时观察 K10 各组件 Pod 的就绪情况kubectl get pods -n kasten-io -w端口转发访问控制台K10 的 Web 控制台由gateway服务提供在新终端中执行端口转发kubectl --namespace kasten-io port-forward service/gateway 8080:8000控制台地址为http://127.0.0.1:8080/k10/#/获取登录 Token开启 Token 认证后需要从集群中读取一次性 Token 完成登录。执行以下命令TOKEN_NAME$(kubectl get secret --namespace kasten-io|grep k10-k10-token | cut -d -f 1) TOKEN$(kubectl get secret --namespace kasten-io $TOKEN_NAME -o jsonpath{.data.token} | base64 --decode) echo Token value: echo $TOKEN将输出的 Token 粘贴到浏览器页面随后按要求填写邮箱与公司名称即可进入 K10 控制台本演练为本地实验环境可填写任意占位信息。部署有状态应用Pacman MongoDB备份对象需要一个真正“有状态”的应用。我们复用 Kubernetes 章节中的 Pacman 游戏应用——前端为 Node.js后端为带持久化 PVC 的 MongoDB StatefulSet高分榜数据写入数据库是演示“关键业务数据”的绝佳载体。应用清单文件位于仓库 2022/Days/Kubernetes/pacman-stateful-demo.yaml包含以下核心资源Namespacepacman隔离应用空间。PodSecurityPolicy / RBAC 资源为应用提供权限注意该清单写于较早 Kubernetes 版本policy/v1beta1的 PodSecurityPolicy 在新版本集群中已废弃阅读源码时需留意版本差异。Secretmongodb-users-secret以 Base64 形式存放数据库管理员账号、库名与用户名密码供 MongoDB 和前端通过secretKeyRef注入环境变量。PVCmongo-storage申请 1GiReadWriteOnce存储这就是将被 K10 快照的持久化数据所在。StatefulSetmongo运行bitnami/mongodb:4.4.8通过 initContainer 修正/bitnami/mongodb数据目录权限chown -R 1001:1001并配置 readinessProbe 探测 MongoDB 连通性。Deploymentpacman运行quay.io/ifont/pacman-nodejs-app:latest通过环境变量MONGO_SERVICE_HOST、MONGO_AUTH_USER、MONGO_DATABASE等连接 MongoDB。ServicemongoClusterIP27017与pacmanLoadBalancer80→8080。部署并确认资源就绪kubectl apply -f pacman-stateful-demo.yaml kubectl get all -n pacman在新终端转发 Pacman 前端端口浏览器访问http://localhost:9090/kubectl port-forward svc/pacman 9090:80 -n pacman花点时间在游戏里刷出几个高分——这些记录将写入 MongoDB成为我们接下来要保护的“任务关键数据”。使用 K10 保护高分数据发现应用返回 K10 控制台你会看到“Applications”卡片中的应用数量从 1 增加到 2——Pacman 应用被自动发现。点击 Applications 卡片即可查看集群中自动发现的应用列表。K10 支持两类数据保护手段存储级快照storage based snapshots与导出到对象存储export to object storage。本演练先使用前者——在集群内创建一份手动存储快照。创建手动快照在 Pacman 应用详情中选择手动快照选项保持默认设置提交。控制台会实时显示作业状态完成后快照作业呈现成功状态。故障场景模拟误操作写入脏数据快照创建完成后我们模拟一次“灾难性误操作”往高分榜中写入两条完全不该存在于生产库中的脏数据记录。这一步对应现实中最常见的数据丢失原因——意外删除或错误写入而非勒索软件或基础设施故障。数据恢复回到快照时间点选择恢复点回到 Applications 卡片的 Pacman 标签页此时可以看到我们拥有1 个恢复点restore point。点击 Restore系统会列出与该应用关联的所有快照与导出副本。执行恢复选择该恢复点在弹出的侧边窗口保持默认设置并点击恢复随后确认执行。回到控制台 Dashboard 可看到恢复作业的实时进度。验证恢复结果恢复完成后重新执行之前的端口转发kubectl port-forward svc/pacman 9090:80 -n pacman刷新浏览器打开高分榜之前被污染的脏数据已经消失排行榜恢复为创建快照时的干净状态。小结与下一步本演练只是 K10 备份能力的冰山一角除了集群内快照K10 还支持将备份副本导出到对象存储、跨集群数据迁移、以及面向数据库的应用一致性备份等能力后续还会在**灾难恢复Disaster Recovery与数据可迁移性data mobility**场景中继续使用它。下一节将进入应用一致性Application Consistency主题使用 Kasten 的开源框架 Kanister 实现数据库级别的应用一致性备份与恢复相关内容见 Day 88。参考资源Day 49Kubernetes 全景概览集群、节点、StatefulSet 等基础概念Day 86Kopia 备份本地文件到 NAS 与云端对象存储Pacman 有状态应用完整清单文件Day 88Kanister 应用级备份与恢复赞分享文档/教程【免费下载链接】90DaysOfDevOpsThis repository started out as a learning in public project for myself and has now become a structured learning map for many in the community. We have 3 years under our belt covering all things DevOps, including Principles, Processes, Tooling and Use Cases surrounding this vast topic.项目地址https://gitcode.com/gh_mirrors/90/90DaysOfDevOps点击查看免费下载相关推荐90DaysOfDevOps 实战用 Kasten K10 为 Kubernetes 有状态应用构建备份与恢复方案90DaysOfDevOps 实战用 Kasten K10 为 Kubernetes 有状态应用构建备份与恢复方案 导读 本文是 90DaysOfDevOps文档/教程90DaysOfDevOps 实战使用 Kasten K10 在 Kubernetes 中完成有状态应用的备份与恢复90DaysOfDevOps 实战使用 Kasten K10 在 Kubernetes 中完成有状态应用的备份与恢复 本篇技术指南来自 90DaysOfDev文档/教程90DaysOfDevOps Day87使用 Kasten K10 在 minikube 上实现 Kubernetes 有状态应用的备份与恢复实战90DaysOfDevOps Day87使用 Kasten K10 在 minikube 上实现 Kubernetes 有状态应用的备份与恢复实战 本篇文章来文档/教程上一篇vue-treeselect入门指南如何快速构建强大的多级选择器下一篇JoyShockMapper 开源项目使用教程创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考