欢迎光临
我们一直在努力

K8s 数据备份方案实战:利用 Velero 实现集群级别的灾难恢复与迁移

Kubernetes(K8s)已经成为容器编排的事实标准,但集群配置、应用状态和持久卷数据的备份与恢复,始终是生产环境运维的关键挑战。Velero(前称 Heptio Ark)是 K8s 社区中最流行且功能强大的开源备份工具,它允许用户备份和恢复 K8s 资源和持久卷。

本文将手把手教你如何安装和使用 Velero,以实现 K8s 集群的完整备份和灾难恢复。


1. Velero 简介与工作原理

Velero 负责备份 K8s API 资源(如 Deployment, Service, ConfigMap, PersistentVolumeClaim 等)到对象存储(如 AWS S3, Azure Blob, Google Cloud Storage 或兼容 S3 协议的存储)。对于持久卷(PV)数据,Velero 依赖其 VolumeSnapshot 功能(需要安装相应的 CSI 驱动)或 Restic(一个文件系统级别的备份工具)进行数据备份。

2. 环境准备

2.1. 前置条件

  1. 一个运行中的 Kubernetes 集群。
  2. 安装 kubectlvelero CLI 工具。
  3. 一个 S3 兼容的对象存储桶(例如 AWS S3)。

2.2. 配置云存储凭证

创建一个名为 credentials-velero 的文件,包含访问 S3 存储桶的密钥。

[default]
aws_access_key_id = AKIAIOSFODNN7EXAMPLE
aws_secret_access_key = wJalrXUtnFEMI/K7MDENG/bPxRfiCYEXAMPLEKEY

3. 安装和部署 Velero

我们以 AWS S3 为例进行安装。你需要指定提供商、插件、存储桶名称和凭证文件。

步骤 3.1:安装 Velero CLI

根据你的操作系统下载并安装 Velero CLI 工具。

步骤 3.2:执行 Velero 部署

以下命令会将 Velero 服务器组件部署到 K8s 集群的 velero 命名空间中,并配置它使用你的 S3 存储桶。

# 注意:请替换 --bucket 和 --backup-location-config 中的区域和桶名
VELERO_VERSION=v1.11.0

velero install \
    --provider aws \
    --plugins velero/velero-plugin-for-aws:${VELERO_VERSION} \
    --bucket velero-k8s-backups-bucket-2023 \
    --secret-file ./credentials-velero \
    --backup-location-config region=us-east-1 \
    --use-volume-snapshots=false # 如果不使用 CSI/VolumeSnapshot,可以暂时禁用

# 检查 Velero Pod 状态
kubectl get pods -n velero

部署成功后,你应该看到 Velero Pod 处于 Running 状态。

4. 实战备份操作

首先,创建一个示例命名空间和 Deployment,用于后续备份。

kubectl create namespace demo-app-ns
kubectl apply -f - <<EOF
apiVersion: apps/v1
kind: Deployment
metadata:
  name: nginx-deployment
  namespace: demo-app-ns
  labels:
    app: nginx
spec:
  replicas: 2
  selector:
    matchLabels:
      app: nginx
  template:
    metadata:
      labels:
        app: nginx
    spec:
      containers:
      - name: nginx
        image: nginx:latest
        ports:
        - containerPort: 80
EOF

4.1. 创建备份

我们可以选择备份特定的命名空间。

# 创建一个名为 'demo-backup-001' 的备份,只包含 'demo-app-ns' 命名空间
velero backup create demo-backup-001 --include-namespaces demo-app-ns

4.2. 检查备份状态

确认备份是否成功上传到 S3。

# 查看备份列表
velero backup get

# 详细查看备份日志和状态
velero backup describe demo-backup-001

当状态显示为 Phase: Completed 时,备份完成。

5. 灾难恢复实战

模拟集群发生灾难,我们手动删除刚刚备份的命名空间。

kubectl delete namespace demo-app-ns
# 确认命名空间已被删除
kubectl get namespaces

5.1. 执行恢复操作

使用刚才创建的备份文件执行恢复。

# 从备份 'demo-backup-001' 创建恢复任务
velero restore create --from-backup demo-backup-001

5.2. 检查恢复状态

velero restore get

# 检查恢复详细日志
velero restore describe demo-backup-001-restore-xxxxx

5.3. 验证结果

检查被删除的命名空间和 Deployment 是否重新出现并处于运行状态。

kubectl get namespace demo-app-ns
kubectl get deployment -n demo-app-ns

如果所有资源都已成功恢复,则说明 Velero 工作正常。

6. 总结

Velero 是 K8s 灾难恢复策略中不可或缺的一部分。通过结合对象存储,它能提供健壮的集群配置和应用状态备份能力。对于需要备份持久卷数据的场景,请确保在安装时配置 CSI 插件或启用 Restic。

【本站文章皆为原创,未经允许不得转载】:汤不热吧 » K8s 数据备份方案实战:利用 Velero 实现集群级别的灾难恢复与迁移
分享到: 更多 (0)

评论 抢沙发

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址