K8s 无备份,不运维!
为了降低这些风险,K8s 的备份与恢复就成了一项“必须提前准备”的基础能力。通过定期备份集群关键数据和业务资源,在出现故障时才能有回退和兜底方案,快速恢复系统状态,避免长时间停机。
K8s备份方案选择
| etcd物理备份 | |||
| velero逻辑备份 |
Etcd 物理备份
适用场景:
集群巡检时必须进行的操作。
在集群升级或修改核心组件前,手动触发备份,防止操作失误。
创建备份脚本:自动执行备份,保留7天内的备份文件,避免磁盘爆满。
#!/usr/bin/env bashset -e # 脚本遇到错误立即退出# 配置路径(不需修改)ETCD_CA_CERT="/etc/kubernetes/pki/etcd/ca.crt"ETCD_CERT="/etc/kubernetes/pki/etcd/server.crt"ETCD_KEY="/etc/kubernetes/pki/etcd/server.key"BACKUP_DIR="/opt/etcd_backup" # 备份文件存储路径# 创建备份目录[ ! -d "${BACKUP_DIR}" ] && mkdir -p ${BACKUP_DIR}# 删除7天前的备份文件find ${BACKUP_DIR} -name "*.db" -mtime +7 -exec rm -f {} \;# 执行etcd快照备份ETCDCTL_API=3 /usr/local/bin/etcdctl --endpoints=https://127.0.0.1:2379 \--cacert="${ETCD_CA_CERT}" --cert="${ETCD_CERT}" --key="${ETCD_KEY}" \snapshot save "${BACKUP_DIR}/etcd-snapshot-$(date +%Y%m%d.%H%M%S).db"
# 设置定时任务crontab -e# 在crontab中添加:每小时执行一次备份脚本0 */1 * * * /bin/bash /opt/etcd_backup.sh >> /opt/etcd_backup.log 2>&1
Etcd 恢复
适用场景:
etcd数据损坏、集群完全不可用时。
恢复会覆盖当前etcd所有数据,确保恢复点是最新的。
准备恢复:停止
kube-apiserver和etcd服务,并清空旧数据。执行恢复:从备份文件恢复etcd数据。
ETCDCTL_API=3 /usr/local/bin/etcdctl snapshot restore /tmp/etcd-snapshot-xxx.db \--name etcd1 \--initial-cluster "etcd1=https://<ip>:2380,etcd2=https://<ip>:2380,etcd3=https://<ip>:2380" \--data-dir=/var/lib/etcd
ETCDCTL_API=3 /usr/local/bin/etcdctl endpoint healthVelero 逻辑备份
适用场景:
误删了业务命名空间(如prod),导致业务配置丢失。
业务版本发布前,备份当前环境,方便发布失败时回滚。
跨集群迁移业务(如从测试集群迁移到生产集群)。
安装Velero
wget https://github.com/vmware-tanzu/velero/releases/download/v1.8.1/velero-v1.8.1-linux-amd64.tar.gztar -xvf velero-v1.8.1-linux-amd64.tar.gzcp velero-v1.8.1-linux-amd64/velero /usr/bin/chmod +x /usr/bin/velerovelero version
# 创建备份计划,例如备份prod命名空间velero create schedule prod-daily-backup \--schedule="0 1 * * *" \ # 每天凌晨1点执行--include-namespaces=prod \ # 备份指定命名空间--ttl=168h # 保留7天
Velero 恢复
适用场景:
误删prod命名空间、改坏了应用配置。
业务发布失败后,回滚到备份时的状态。
恢复整个命名空间(常用):
velero restore create --from-backup prod-daily-backup-xxx
恢复特定资源(例如只恢复某个
Deployment):
velero restore create \--from-backup prod-daily-backup-xxx \--include-resources=deployments \--include-namespaces=prod
小结
K8s集群的备份与恢复,不仅是系统维护中的一个重要环节,更是保障业务持续运行、应对突发故障的“生命线”。通过合理的备份策略和恢复流程,我们能够最大限度地减少数据丢失和停机时间,确保集群在任何意外情况下都能迅速恢复。
无论是使用etcd物理备份来保障集群的整体健康,还是利用velero逻辑备份来应对单个应用或命名空间的故障,两者结合的方式将为K8s集群提供双重保障。通过定期巡检备份方案、演练恢复流程,运维团队能够在故障发生时做到胸有成竹,迅速恢复生产环境。
最终,任何一个完备的备份恢复方案,都离不开持续的验证与演练。通过不断完善备份策略并进行定期测试,确保数据恢复不成问题。
以为能躺赚,结果“养虾”变成了“养雷”,第一批“养虾人”已经失眠了……
DeepSeek被针对,Anthropic指控三家中国AI蒸馏剽窃,马斯克硬刚“贼喊抓贼”!
明明大厂裁员滚滚,为什么运维还这么难招?
在 SQL 中写了 in 和 not in,技术总监让我明天不用来了
年底了!系统稳如狗,甲方觉得我们没工作量,怎么收运维费?
为什么DeepSeek火之后,人们想到的是大量裁员,而不是实行上三休四?
《AI数据分析之ChatBI发展与应用实践》白皮书(附下载)正式上线啦
号外!《核心系统分布式数据库选型指南》电子书(附下载)正式上线
解锁数据架构现代化密码,《实时数仓选型指南》电子书(附下载)正式上线啦